Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

使用shuttle实现bytom上跨链资产交换

蕙质兰心283
106 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
4 C# |2 [# F1 }, T该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。3 U2 W4 n! N' c8 S
下面我们来看一下操作的具体步骤:
  h; K2 X8 d+ @9 u3 ~" d第一步: 首先搭建节点环境
8 m/ g+ H3 L# X  }0 f2 z( n3 k1 D1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
; d; b3 v% y# k+ |1.2 启动并配置好bytom节点,参考:bytom readme.md) ~! @: J. P1 j; T$ k0 m3 m- o1 e7 }3 R
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
/ K! Y0 C/ o* ~- V9 L& j $ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
3 A( u3 ~) C9 U3 k4 z8 ?& u- u, \1 g $ cd $GOPATH/src/github.com/shuttle1 d/ r& I+ X( {* L1 Y
$ make install
) y' u' j7 ]! H: V* W( }Shuttle help 相关命令如下:
. _7 c4 J7 x5 e% i' G+ B) m $ swap -h
2 {  B8 g6 t# [" Z( } swap is a commond line client for bytom contract' F0 i! H* Y  t( O8 ]
Usage:. E5 D* L! r4 P5 h" Z/ q
   swap [flags]
3 p( F& X" ?6 \" m% I- [/ l, T, S   swap [command]
; K4 D  f  L' E0 i4 nvailable Commands:
; w8 A% l# K! M5 s+ V5 r  callHTLC       call HTLC contract for asset swapping
- @, ]) a% _# y9 Q$ c9 I) b  callTradeoff   call tradeoff contract for asset swapping
' }4 C2 ~$ k( x0 {! `  j7 x, G  u7 Y  cancelHTLC     cancel HTLC contract for asset swapping
) E6 b( T+ Y; a2 P; i4 o  cancelTradeoff cancel tradeoff contract for asset swapping; }7 M; O: c2 a, M5 ]
  deployHTLC     deploy HTLC contract
+ G+ Z/ Y2 S: x( S" @  deployTradeoff deploy tradeoff contract
3 P# c1 O0 B  r! X8 f2 s  help           Help about any command$ t+ H$ S' b7 W6 X! ?: ^
Flags:5 u8 B8 w0 P  A7 z9 V
  -h, --help   help for swap: d; ]( x( W. E7 ^5 x! @
Use "swap [command] --help" for more information about a command.
! h! c; j) T0 K: C) h8 N第二步:同一条链上进行跨链资产交换) {8 v/ l+ Z% |' y  h" X# N
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:7 G! M, q! Z  U- R: U; L
% g) I- C' I) x% b
首先我们启动bytom节点,为了测试,你可以启动solnet节点:+ t6 R* @! D) l3 O& j
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node, t+ x2 b1 j. J0 C+ k1 h
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining  ]+ f0 E0 [# F
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试% [+ Z  C" I6 ]
创建账户参考
  R, F9 ]; w/ b5 d0 _9 M发行资产参考) c7 r/ B1 e- t, j
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
( P1 s3 V: t$ `5 ~5 V####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)4 U0 s! Y* H( A. Y
$ swap deployTradeoff -h
9 f, p8 f% P( Q0 o$ N% R2 C4 p4 qdeploy tradeoff contract
$ a7 F/ |* G7 ?Usage:
# n6 E" L9 B; g' H/ p- B$ Kswap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
2 a. a! a5 E1 s  J: nFlags:
. M3 n& K/ R/ \; z  k' E5 C: z9 \     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
& E1 R4 X4 }& a% M/ F2 J     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量
/ \5 A1 c9 ?2 q! ^     --assetLocked string      tradeoff contract locked value with assetID //资产ID5 D! O! V0 q! {* }0 m% d
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
7 L5 z% Q2 y3 A6 b- q8 R4 l     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
/ }* w8 O# s5 M! C. | -h, --help                    help for deployTradeoff2 i9 q$ [9 c" O0 d3 g
     --ip string               network address (default "127.0.0.1")$ x0 M7 ^( Q+ A. Z
     --port string             network port (default "9888")
4 b( L8 S3 w8 H, U7 n     --seller string           tradeoff contract paramenter with seller control-program
3 |8 C) g. V! ~& E- B" Y) ^     --txFee uint              contract transaction fee (default 40000000)0 J' |* l, s. r, q# x# o, Z/ N
下面是实例化部署合约的过程:  W- k6 y- a% Q6 I" _" k% a
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000" O9 J/ T1 `& A" K/ e4 I
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f7 h2 F# U3 A. e: S" l1 h
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。1 Y- v" p! M9 m$ }" o
2.2 调用tradeoff合约(下面是调用合约的命令)
& S7 r5 r; l# C% P$ swap callTradeoff -h
3 p+ i' @5 u  u, ~call tradeoff contract for asset swapping
* r9 G' |  p$ S! x# ?3 z6 N8 wUsage:- x" h, a& {4 O9 v/ ~; ~
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
5 z; j4 Z" s% s( _' S+ c0 v; c$ P+ `% gFlags:0 W4 H, L4 z+ P5 ]- d1 F
-h, --help          help for callTradeoff
$ ]' ^$ j/ I/ i4 a6 H! v, N: }, r  --ip string     network address (default "127.0.0.1")5 R5 Y  }' R8 m  E: S
  --port string   network port (default "9888")
5 p) e! T, F5 ?* b7 I6 t  --txFee uint    contract transaction fee (default 40000000)$ D1 o* O9 Q1 N8 j2 I# ]
调用合约实例化参数如下:
. A# Y6 c/ A1 Z- k7 ?) N2 c0 b% b: | $ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
9 |# ]  Z2 M( o3 U. I% w --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
+ @+ A& `/ H$ ]1 C调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
5 U7 J5 }* M+ u0 p. Q5 }4 j- x7 Q& L- \
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。
, d( V9 T' J( U5 c+ C1 }2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)6 b2 A# A8 ~2 ?: i  O* V
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
0 A* o0 w* G9 ?4 q' E1 t) e$ swap cancelTradeoff -h! o4 I0 _: N; Q1 j  Y
cancel tradeoff contract for asset swapping, Z8 ~8 a1 w( d/ ^  H* N
Usage:1 I+ o" p0 r$ B/ H; {& ^. o( M
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]3 z  h# U( ^2 d& p
Flags:
# ?" k7 C5 e, w4 c0 P7 U8 g-h, --help          help for cancelTradeoff, Y& _8 W' g0 Z# z
   --ip string     network address (default "127.0.0.1")$ v2 N0 Q& [1 E; p/ ]
   --port string   network port (default "9888"), i7 o1 X+ V% M* ]8 V
   --txFee uint    contract transaction fee (default 40000000)) g) k' g; e9 A9 J; I
取消tradeoff合约的实例化如下:7 ]7 |# r" p8 w, |; \+ L- E5 t
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
4 p! z. i6 m& b7 C6 G  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
- N$ h* [* N. H: a0 r $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  
/ J4 x$ P6 j, ~; j6 u; ~ --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f1 h* ?8 B" d. l, C  H6 {
示例图如下:
! i) N" s2 E2 F: h
" u4 d6 h. k4 V7 V/ ^上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。8 U  U# }# o3 {: y
第三步:不同链上资产进行交换
3 i: b! d3 A, V! v: N9 @; _% t7 w+ [你可以使用该工具在bytom和vapor上交换资产:
: I6 C; l# `/ W! X( B( S/ r; \3 u1 U9 o/ Y4 J
3.1 搭建并启动bytom和vapor节点6 ^! p. y; E6 v
为了方便测试。你可以启动bytom和vapor的solonet节点2 [, u+ D1 a$ Q/ p/ D( S7 n
启动bytom solonet 节点:' _; p( @* M4 w( e1 T& c/ y
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
' M, v3 I' X6 X, L6 z$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining$ C: t  w% B! x+ l: F" D
启动vapor solonet 节点:7 _: [  X& M9 n" X7 X4 J
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
. s! `, z6 h; l! m$ Y$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining
7 v& @0 q$ X% K4 X3.2 部署HTLC合约(合约的部署命令如下)
. C$ O9 \2 I' z$ A+ o $ swap deployHTLC -h
3 F' t0 v: W' `( B8 ^8 J& s: [1 Z deploy HTLC contract
. B: \4 @0 S  d8 I& |  m$ F Usage:
1 n7 g+ Z6 K7 R; `% t swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]  @" u+ M! o& I( R# g4 ?- s! \* F
Flags:
" H/ c- Y% ?# k. X  --amountLocked uint    HTLC contract locked value with amount
, K) T# V: e' }& b% s; ~! k  --assetLocked string   HTLC contract locked value with assetID
3 v, A# @8 u4 a5 }# |  --blockHeight uint     HTLC contract locked value with blockHeight
& b2 Q4 z% `* S$ J+ _, H& t" j9 G' ]  --hash string          HTLC contract locked value with hash
4 \3 T% J; R$ f& \5 a/ e5 K-h, --help                 help for deployHTLC
4 l3 w9 C! {1 {9 v2 u% A8 _& m; q# F. k  --ip string            network address (default "127.0.0.1")* s/ g7 ?6 h" i# g+ o# N
  --port string          network port (default "9888")" n' ~7 g" ?9 G4 E; s2 Y
  --recipient string     HTLC contract paramenter with recipientPublicKey
9 V5 y" L2 r2 ~" ?6 ~  --sender string        HTLC contract paramenter with sender PublicKey
. y: a5 p8 e- u  --txFee uint           contract transaction fee (default 40000000)) d2 u/ l( ]( {
部署HTLC合约的实例参数如下:
! A% w# h4 T8 i3 q1 C $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000, q) N$ Y2 r$ D1 E* n8 @9 P3 x- C* I
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e( w5 o6 i8 v+ K2 @& D6 v
3.3 调用HTLC合约* i" L* H8 r# ?* Q$ C
$ swap callHTLC -h
2 ^+ R6 X: S- N* v# e7 C1 H" Gcall HTLC contract for asset swapping3 T7 V1 f* q8 D. i
Usage:3 `2 F; J$ p" w4 r
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
( n( B5 [" C/ S5 L/ [! QFlags:& M- U1 Z# |3 _$ F0 O
-h, --help          help for callHTLC1 S2 i, F6 y0 B2 d" k/ O4 ~
   --ip string     network address (default "127.0.0.1")$ M5 s* |+ f5 t2 f9 N
   --port string   network port (default "9888")" b( b5 L2 N. U2 R! J
   --txFee uint    contract transaction fee (default 40000000)
' u' |8 m, ?( k& d+ Y调用HTLC合约的实力化参数如下:, F; J5 k8 U- u( s* n" I
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e4 a9 u- ]2 y- y4 K7 G- R: V3 ?
--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e! {" @3 H0 i$ i
实际的交换过程如下:
9 M3 [9 H! S9 E# R  R1 C
) v+ v  m' {5 C! S7 {; w+ R3.4 取消HTLC合约(命令参数如下)7 _7 X" C4 v; J( A3 n. [: E
$ swap cancelHTLC -h
4 j- }2 }, Y) G( J; }; Dcancel HTLC contract for asset swapping
  A. |: [, e3 W. Q8 H8 OUsage:
$ U2 m0 ?$ I4 kswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]
6 w7 b6 ~; p' c2 @9 S7 QFlags:
6 }$ `+ L6 z( x4 t; [6 W-h, --help          help for cancelHTLC
# r- Z+ B% u  S5 U$ I* H  k, K4 ^  --ip string     network address (default "127.0.0.1")
2 z0 m1 [  m# L9 w- C& }  --port string   network port (default "9888")
3 B$ K6 n: M2 N# z9 M6 h! c/ Q) k  --txFee uint    contract transaction fee (default 40000000)/ F2 Y# p2 h! V& s
取消HTLC合约的实例化参数如下:
' I- o3 {. M3 P4 {8 W$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
& v' k( I; r" \! ^- h--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
  ^' o% x9 X& Y- i1 b# @2 a  t$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd8 y- X4 A# [0 V! v/ i/ H0 J* U
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 / D8 _8 q7 }* N. R9 C% r1 s, v
示例图如下:
8 i) W, j) X5 d4 |) V! u9 L
3 z8 }6 I1 S4 l& O' W取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。. q" u: p# A1 Y5 P- Y6 w, ]) I
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1