使用shuttle实现bytom上跨链资产交换
蕙质兰心283
发表于 2023-1-10 02:30:43
182
0
0
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
下面我们来看一下操作的具体步骤:9 u" a5 T; {$ }% G* |4 [1 Y f
第一步: 首先搭建节点环境% W7 X/ y0 w- k7 _
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录+ E: I# ]) D* R# U
1.2 启动并配置好bytom节点,参考:bytom readme.md
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
$ cd $GOPATH/src/github.com/shuttle
$ make install- G3 {% z5 i+ M) [; W$ G4 R
Shuttle help 相关命令如下:
$ swap -h6 Y5 f' g1 y% P% D$ k$ ?4 P
swap is a commond line client for bytom contract
Usage:
swap [flags]
swap [command]
vailable Commands:! M% L4 }) }' Z
callHTLC call HTLC contract for asset swapping
callTradeoff call tradeoff contract for asset swapping
cancelHTLC cancel HTLC contract for asset swapping4 X4 A. V. V- W
cancelTradeoff cancel tradeoff contract for asset swapping
deployHTLC deploy HTLC contract* p+ Y$ q& O* w O7 O" ~6 s
deployTradeoff deploy tradeoff contract
help Help about any command% n& t/ W+ ] y, j2 c- O
Flags:
-h, --help help for swap$ l M7 y0 `* F3 g
Use "swap [command] --help" for more information about a command.' N, P" r/ r$ S4 }
第二步:同一条链上进行跨链资产交换) e& R. i5 [3 K1 _ k
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
首先我们启动bytom节点,为了测试,你可以启动solnet节点:
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
$ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
创建账户参考7 @: V8 @) v, T
发行资产参考# M; K, B; E1 M k0 c
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。6 i0 @% t8 A. f- g: J
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)* q: c2 t8 Q4 Z2 @' `; u, I
$ swap deployTradeoff -h
deploy tradeoff contract
Usage:
swap deployTradeoff [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]) I2 D" [+ W3 A/ k
Flags:
--amountLocked uint tradeoff contract locked value with amount //锁定资产的数量
--amountRequested uint tradeoff contract paramenter with requested amount //锁定需要兑换的资产数量$ C& p! ^/ g" \7 J9 ], u
--assetLocked string tradeoff contract locked value with assetID //资产ID6 X# l' D1 g s2 E" O
--assetRequested string tradeoff contract paramenter with requested assetID //兑换的资产ID3 H7 ^9 R# b/ M5 _4 o& y) v
--cancelKey string tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
-h, --help help for deployTradeoff" ]4 }1 H4 s. k* m- H( i
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")& N( ?7 e7 B- q
--seller string tradeoff contract paramenter with seller control-program
--txFee uint contract transaction fee (default 40000000)
下面是实例化部署合约的过程:
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000( H- w t! [" F- ?7 Z# Y7 `3 E; R! z8 M
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
2.2 调用tradeoff合约(下面是调用合约的命令)
$ swap callTradeoff -h/ e% |" c& m0 ]8 o
call tradeoff contract for asset swapping4 J ]1 l4 L) M
Usage:
swap callTradeoff [txFee flag] [URL flags(ip and port)] [flags]& b' ~* a1 c0 c1 y. M
Flags:5 w0 `& x+ P N6 t. x0 `" y2 F
-h, --help help for callTradeoff
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)6 k8 B7 E" p8 B1 A% @& l- q( p+ s
调用合约实例化参数如下:9 a7 A7 r9 L: e4 y7 L5 V) [
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f6 k- M4 E, y$ r7 M
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:+ ]5 d/ u1 L1 E/ n9 i
* t3 P7 b: Z# t! i R# a
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。 \7 E5 F) x: f6 |! L6 ?
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下: A2 i2 w" w) y. y) {& v
$ swap cancelTradeoff -h( y' q0 b9 E4 D* C- |" m" g5 G
cancel tradeoff contract for asset swapping$ _6 Z, o: q3 i
Usage:
swap cancelTradeoff [txFee flag] [URL flags(ip and port)] [flags]0 F( u4 [+ h( ^7 ^& i3 Q
Flags:& N' L4 s; |% _5 _5 ^3 O
-h, --help help for cancelTradeoff0 `$ W- U4 K+ {& x! m
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")
--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; M- P2 D4 L( s/ G
--> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c54 i/ c2 M! [/ A2 Q" y' G$ Y, W3 i
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058 e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5 2 W) f0 z* K" x. e' X8 N C
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f6 e: D# O7 c8 N
示例图如下:" a9 L4 {. ~! B- }2 r9 F* z3 V# h
/ b3 _+ y* y$ O. ?
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
第三步:不同链上资产进行交换
你可以使用该工具在bytom和vapor上交换资产:+ h& H9 }& X! T, D9 Z- h$ u/ V4 q
. O& `1 i- g/ u9 X- w) N
3.1 搭建并启动bytom和vapor节点! W6 Q' K1 X8 H2 U
为了方便测试。你可以启动bytom和vapor的solonet节点1 s$ K0 N+ M1 Q. }/ O; P& ?* z
启动bytom solonet 节点:
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
$ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining' a: J2 q/ S! k/ A' y" b8 D: `
启动vapor solonet 节点:
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node5 s3 I) Z$ O6 u5 z# a6 S/ \, ?; [
$ vapord node --home $HOME/bytom/vapor-solonet --mining # launch vapor solonet node and start mining8 ]. D. [" m. ]& U
3.2 部署HTLC合约(合约的部署命令如下)* T0 Q, ^, _6 o# T% j6 J9 t# l# R2 Y
$ swap deployHTLC -h5 Z: u P+ l) n; g7 n. G6 ~
deploy HTLC contract, W2 ^! M4 r' c% y( _0 {. i
Usage:9 h& h5 X$ |# j9 w' z! K8 y7 [, a
swap deployHTLC [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
Flags:; c! P% @2 y- Z! [, F
--amountLocked uint HTLC contract locked value with amount
--assetLocked string HTLC contract locked value with assetID+ V, ]2 X; P" J: R
--blockHeight uint HTLC contract locked value with blockHeight4 f2 W5 n5 K# \4 ], H
--hash string HTLC contract locked value with hash
-h, --help help for deployHTLC
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")
--recipient string HTLC contract paramenter with recipientPublicKey
--sender string HTLC contract paramenter with sender PublicKey
--txFee uint contract transaction fee (default 40000000)8 k3 J. }" T( N! _6 w
部署HTLC合约的实例参数如下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e5 C' y" L+ n/ _
3.3 调用HTLC合约
$ swap callHTLC -h1 Q6 h R2 S% v4 G8 y( ^
call HTLC contract for asset swapping
Usage:
swap callHTLC [txFee flag] [URL flags(ip and port)] [flags]
Flags:
-h, --help help for callHTLC( o7 z* ^6 |) _& ^1 H% W
--ip string network address (default "127.0.0.1")2 H/ _3 V' `+ d( @4 w
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)
调用HTLC合约的实力化参数如下:
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
实际的交换过程如下:
0 p5 G. Z* `& ^$ ^/ c
3.4 取消HTLC合约(命令参数如下)
$ swap cancelHTLC -h6 j9 V7 {7 r, p1 i4 N- }4 P
cancel HTLC contract for asset swapping' y8 x) _) [7 R
Usage: @+ f8 K# c- V5 U B( q0 [" R
swap cancelHTLC [txFee flag] [URL flags(ip and port)] [flags]
Flags:6 T0 z( q! z" {4 u |1 K
-h, --help help for cancelHTLC
--ip string network address (default "127.0.0.1")* D0 D0 r) T* l
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)
取消HTLC合约的实例化参数如下:& G* Y) G0 q! C% n7 g$ d4 B; X" p) m, C
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd% q. a4 }+ h, _! k( ]9 G) w
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 ! J) x- Q' C6 ~; R5 _8 c0 A
示例图如下:
! S& R& @" R3 ?- Z% V
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
成为第一个吐槽的人