使用shuttle实现bytom上跨链资产交换
蕙质兰心283
发表于 2023-1-10 02:30:43
93
0
0
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。0 k8 o1 a& a( L( T# E, F1 g0 t( B7 x
下面我们来看一下操作的具体步骤:
第一步: 首先搭建节点环境
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录8 P# H+ I. p; A1 I l
1.2 启动并配置好bytom节点,参考:bytom readme.md( C8 `1 e5 }, p' }
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:+ n" r7 m4 u1 @5 H7 h
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle; a, \; X8 p, G4 R6 Z" F
$ cd $GOPATH/src/github.com/shuttle4 ]8 Z- q7 w1 C) I% q
$ make install" x5 G! M( Z7 X; o
Shuttle help 相关命令如下:' B; t; }3 B' n' P; F& ~
$ swap -h. e9 q1 U2 k" T4 @' ]8 K9 d% X
swap is a commond line client for bytom contract0 J( O; G: _: p0 c z9 D6 e' z
Usage:
swap [flags]8 }5 {2 B8 \, \ @, ?! [
swap [command]
vailable Commands:* X7 U, D. a1 s2 T% }
callHTLC call HTLC contract for asset swapping+ w% C: _* m' v0 R
callTradeoff call tradeoff contract for asset swapping
cancelHTLC cancel HTLC contract for asset swapping* ^8 X. O T+ v& X- m( ^
cancelTradeoff cancel tradeoff contract for asset swapping. G. |# A5 c& x9 w6 U. C1 q) k3 M# g
deployHTLC deploy HTLC contract
deployTradeoff deploy tradeoff contract# u o; [; B% f" C
help Help about any command
Flags:
-h, --help help for swap
Use "swap [command] --help" for more information about a command.. H2 F9 s! J) P' Y5 j) U$ o+ a
第二步:同一条链上进行跨链资产交换& D7 k+ n9 A5 b2 _+ m/ `
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:% @! b$ I/ d& w* c
* r7 U# ~+ V' ~# ?- q, T( E! [
首先我们启动bytom节点,为了测试,你可以启动solnet节点:
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node% m5 w {$ [% A0 r. B9 K
$ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining, I" m% a+ k1 b( P/ p* @
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试8 G: f! |6 d4 d
创建账户参考+ j, J& s' _- w5 R6 @& K
发行资产参考
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。& E; W( s" K/ w5 H
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)" H. e. U; D1 |& j$ w
$ swap deployTradeoff -h
deploy tradeoff contract
Usage:
swap deployTradeoff [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]# |7 @% |1 {5 j$ F/ l2 f
Flags:- I3 U, k X) o1 h
--amountLocked uint tradeoff contract locked value with amount //锁定资产的数量2 X) n$ e5 E) X5 H( y c4 Y" P
--amountRequested uint tradeoff contract paramenter with requested amount //锁定需要兑换的资产数量
--assetLocked string tradeoff contract locked value with assetID //资产ID
--assetRequested string tradeoff contract paramenter with requested assetID //兑换的资产ID/ C9 a1 l. V* j- b8 q8 H# D- J* T
--cancelKey string tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey. i8 W6 P ^, s; x: x
-h, --help help for deployTradeoff
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")
--seller string tradeoff contract paramenter with seller control-program
--txFee uint contract transaction fee (default 40000000)( h0 O: Y5 P% o! U9 `8 x Q- {# ~
下面是实例化部署合约的过程:
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
2.2 调用tradeoff合约(下面是调用合约的命令)9 u X5 i5 F/ b
$ swap callTradeoff -h" Q" B, I0 x* V) m
call tradeoff contract for asset swapping& |* L' p& T3 O4 n
Usage:
swap callTradeoff [txFee flag] [URL flags(ip and port)] [flags]
Flags:
-h, --help help for callTradeoff8 D% r9 d" s$ F
--ip string network address (default "127.0.0.1"). ?5 z9 O( @) l/ c& e2 B
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)
调用合约实例化参数如下:; E) @# u" B$ E! R* d& B# h
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:! ]# b8 l0 C. n- G5 Q0 j1 E+ u- d
5 Y# B5 J. \' @# y0 c: m
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。7 a# g" H$ }3 R; s+ t& C, @
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
$ swap cancelTradeoff -h& Q$ t' L3 H' w2 @
cancel tradeoff contract for asset swapping
Usage:
swap cancelTradeoff [txFee flag] [URL flags(ip and port)] [flags]! O+ m: T9 Z; M# o' K2 T
Flags:) v! y$ R4 U1 T$ v6 g% O. t
-h, --help help for cancelTradeoff1 U/ e) ?! l4 p. s+ \7 P. b
--ip string network address (default "127.0.0.1")! r6 u3 L3 Z" \7 X0 P
--port string network port (default "9888")* g, F9 U, w* C5 {
--txFee uint contract transaction fee (default 40000000)
取消tradeoff合约的实例化如下:
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
--> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c51 E: {- p: e0 s# z y- j8 Y ~
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058 e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5 - q' F+ P( u( U! L2 B
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f
示例图如下:; M k' }' ?! Y( f. V5 C( w
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
第三步:不同链上资产进行交换3 u- g( Z, z3 W' B6 J9 ]4 b
你可以使用该工具在bytom和vapor上交换资产:; z5 Q7 V [: g$ `
3.1 搭建并启动bytom和vapor节点- B B: Q- }4 [# M% |4 c
为了方便测试。你可以启动bytom和vapor的solonet节点. y. {8 F0 {8 c8 W( g# x5 B
启动bytom solonet 节点:
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node# V6 Y' Y! t: M! h2 }
$ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining; S+ R) n6 m1 L$ ~
启动vapor solonet 节点:
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
$ vapord node --home $HOME/bytom/vapor-solonet --mining # launch vapor solonet node and start mining
3.2 部署HTLC合约(合约的部署命令如下)1 T: M) I2 [. k$ K* q5 L
$ swap deployHTLC -h% ~& w; q8 Y+ b! D
deploy HTLC contract" |* t1 m% w6 s# c2 J
Usage: E) D' K. q5 H2 q4 P, B! d
swap deployHTLC [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
Flags:# V1 W$ A/ N5 G ~4 ?7 D7 y! b
--amountLocked uint HTLC contract locked value with amount
--assetLocked string HTLC contract locked value with assetID
--blockHeight uint HTLC contract locked value with blockHeight. C4 X6 j. x$ f- p+ T3 V. k
--hash string HTLC contract locked value with hash
-h, --help help for deployHTLC
--ip string network address (default "127.0.0.1")4 ?; k: {: y' l
--port string network port (default "9888")
--recipient string HTLC contract paramenter with recipientPublicKey3 p: ^% r5 c7 A! \) n+ m
--sender string HTLC contract paramenter with sender PublicKey
--txFee uint contract transaction fee (default 40000000)
部署HTLC合约的实例参数如下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000! Z4 D. k; m1 u: X$ V
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e A4 `, _/ l5 U M& H: |% x
3.3 调用HTLC合约
$ swap callHTLC -h( I. I) H4 {. [: s: b
call HTLC contract for asset swapping6 j/ c& r3 Y* p- h
Usage:
swap callHTLC [txFee flag] [URL flags(ip and port)] [flags]6 S# A g& V1 S- i
Flags:2 j! p' t. I7 C6 @
-h, --help help for callHTLC
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")9 w- i3 n5 h' b5 H* E& T% J
--txFee uint contract transaction fee (default 40000000)
调用HTLC合约的实力化参数如下:
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e3 P, |" M U4 Y: [* r! U
实际的交换过程如下:. V/ ^/ Q/ b# j( w+ W
$ b# Y: w* x. m/ J# L& ~
3.4 取消HTLC合约(命令参数如下)$ J5 @4 P" E% S; R
$ swap cancelHTLC -h. C4 R1 o# d& y1 U7 X4 B; f3 H
cancel HTLC contract for asset swapping
Usage:. X) M: Z4 \/ U/ `# d4 P. s1 J: `
swap cancelHTLC [txFee flag] [URL flags(ip and port)] [flags]- g4 v/ I+ F- N, O
Flags:
-h, --help help for cancelHTLC" L3 o3 w) g. j3 `* {
--ip string network address (default "127.0.0.1") J( \/ h5 M/ S/ F. G- g& y+ M' X
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)/ Q$ @4 s7 q ]# e1 B2 r
取消HTLC合约的实例化参数如下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 200000000005 r) q& q: X7 l2 G0 d- |
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270
示例图如下:7 t/ g8 j" e% L6 F" t
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。8 w; p; P2 [- _ \& F' e7 V
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
成为第一个吐槽的人