使用shuttle实现bytom上跨链资产交换
蕙质兰心283
发表于 2023-1-10 02:30:43
187
0
0
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。% Z' \0 ~& `+ [5 H, ?6 P9 l4 `4 t
下面我们来看一下操作的具体步骤:% f- ]/ b) F$ C0 n/ ~
第一步: 首先搭建节点环境( r" K. w$ q) u2 K' i2 n8 a9 D
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
1.2 启动并配置好bytom节点,参考:bytom readme.md
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle& F7 ?- ?3 ?; d. ~! o7 B' t+ F
$ cd $GOPATH/src/github.com/shuttle" d8 o ?6 A0 \9 {7 k: F
$ make install
Shuttle help 相关命令如下:) c6 S8 G- L! T' v/ a. |
$ swap -h
swap is a commond line client for bytom contract
Usage:
swap [flags]. F. t( ^: h: P+ O, P
swap [command]
vailable Commands:
callHTLC call HTLC contract for asset swapping, r2 o, M2 ?# a7 A: {9 |
callTradeoff call tradeoff contract for asset swapping
cancelHTLC cancel HTLC contract for asset swapping8 y: [3 B* U5 d4 y0 z; J& `8 d
cancelTradeoff cancel tradeoff contract for asset swapping
deployHTLC deploy HTLC contract
deployTradeoff deploy tradeoff contract" b E C0 h2 Z6 p. ^: h& N
help Help about any command
Flags:# D& {' O/ b1 s
-h, --help help for swap
Use "swap [command] --help" for more information about a command.% `' W" S+ N2 [) F& q+ W
第二步:同一条链上进行跨链资产交换
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
m+ u1 S) n" u* @ i3 K
首先我们启动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)用来测试& B& C) X5 d2 v7 }2 u) N8 ?
创建账户参考
发行资产参考" O- N( V0 b' d2 i- K1 B2 K J
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
$ swap deployTradeoff -h3 A+ z/ D6 m- A0 R
deploy tradeoff contract. p: S7 s- d& u) x. {
Usage:2 S% Z- \2 r% E% h! Z
swap deployTradeoff [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
Flags:
--amountLocked uint tradeoff contract locked value with amount //锁定资产的数量# @! U$ N$ E+ Q7 Y5 N7 L) f1 L/ e
--amountRequested uint tradeoff contract paramenter with requested amount //锁定需要兑换的资产数量 d* ]# B* @8 [7 m: Q- r0 J
--assetLocked string tradeoff contract locked value with assetID //资产ID# l V& g1 } g; R# G A. R9 a
--assetRequested string tradeoff contract paramenter with requested assetID //兑换的资产ID
--cancelKey string tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey) Z8 h1 R) A) \% O6 V
-h, --help help for deployTradeoff. D) j/ x7 a2 S3 I: V* [5 z
--ip string network address (default "127.0.0.1")
--port string network port (default "9888") W. O5 U: Z! T8 w
--seller string tradeoff contract paramenter with seller control-program* @# b$ F5 e, W M/ @# O( B
--txFee uint contract transaction fee (default 40000000)
下面是实例化部署合约的过程:: r' p1 s. t1 `% l/ ^! r9 H, ?
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000007 t$ P6 | \1 x9 a
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
2.2 调用tradeoff合约(下面是调用合约的命令)
$ swap callTradeoff -h+ m8 v$ w+ k |3 w
call tradeoff contract for asset swapping! v0 `" r5 J4 F; h
Usage:; w7 S2 J. a( g& b/ D
swap callTradeoff [txFee flag] [URL flags(ip and port)] [flags]
Flags:
-h, --help help for callTradeoff4 L. {$ U- e6 |# Q
--ip string network address (default "127.0.0.1")( Y. K G$ @% R2 J D1 W
--port string network port (default "9888")/ Y1 k) P3 ^% I+ W% K8 f, {
--txFee uint contract transaction fee (default 40000000), b3 y }& A$ k! @- `; e+ z! H. B
调用合约实例化参数如下:$ ?% z7 J' ?6 W
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f s( L& k5 o# o( L3 q' b
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c7 B: w& b2 g8 r( I8 u
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
; R" f0 j# G- ~
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。) i, Z# h" v6 Q8 D+ P
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)8 | k, O& X! F' T- g3 r
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
$ swap cancelTradeoff -h
cancel tradeoff contract for asset swapping
Usage:
swap cancelTradeoff [txFee flag] [URL flags(ip and port)] [flags]1 p. _2 Y" _8 o
Flags:* M/ ?) y' R7 u O6 \
-h, --help help for cancelTradeoff+ x0 e9 ?, q5 O, f* P( H
--ip string network address (default "127.0.0.1"): ?1 W& d* g1 |# g9 T+ T) k. G
--port string network port (default "9888")- {2 A6 Z- G9 r/ B3 `
--txFee uint contract transaction fee (default 40000000)& Q L5 R/ G5 e
取消tradeoff合约的实例化如下:/ e5 Y4 f% A, }
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000& g9 o0 n! B- D
--> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c59 H* K7 v: R$ ]; t7 @- H0 z* |- P, h
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058 e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5 2 w+ p& x! j9 ]' E9 a1 @
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f6 C! U* ~( g8 `: Y
示例图如下:
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。" `/ N( S, ?# l J0 \$ f- \
第三步:不同链上资产进行交换3 v3 P6 [9 t; C/ Y0 @: z% j
你可以使用该工具在bytom和vapor上交换资产:
3.1 搭建并启动bytom和vapor节点/ ]1 p9 ]9 \8 b' f0 y3 j
为了方便测试。你可以启动bytom和vapor的solonet节点
启动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
启动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合约(合约的部署命令如下)
$ swap deployHTLC -h# x3 D( b) O% W! H& X; K
deploy HTLC contract
Usage:
swap deployHTLC [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]" Y0 t8 r+ p6 K) s, L
Flags:2 t! D0 I/ `9 A: _: {- b; \1 P
--amountLocked uint HTLC contract locked value with amount
--assetLocked string HTLC contract locked value with assetID
--blockHeight uint HTLC contract locked value with blockHeight+ |3 h( a/ g# K
--hash string HTLC contract locked value with hash8 S3 U P9 I0 [
-h, --help help for deployHTLC \3 S4 K0 C! \: |3 j
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")" s5 q, h1 `- z+ e
--recipient string HTLC contract paramenter with recipientPublicKey
--sender string HTLC contract paramenter with sender PublicKey7 x* k/ W* P$ U0 e E& D L3 Y6 f
--txFee uint contract transaction fee (default 40000000)
部署HTLC合约的实例参数如下:: C4 R3 Q& v) P! }$ {
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000( V; j* o( i7 g3 l
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
3.3 调用HTLC合约0 A" _4 {3 n( \3 h( _* E
$ swap callHTLC -h. [8 N9 k* G# e' r5 P' y% C# i' C
call HTLC contract for asset swapping
Usage:9 M9 K7 L& ]5 s5 ~( H6 x% M( [
swap callHTLC [txFee flag] [URL flags(ip and port)] [flags]* ], a& H' W$ m
Flags:
-h, --help help for callHTLC8 Q3 o d: T9 V6 k0 Q% _
--ip string network address (default "127.0.0.1")( k& ?3 s0 ` u4 f& S# B. o
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)
调用HTLC合约的实力化参数如下:
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e8 |" z, Q! H9 C3 \2 `9 e
实际的交换过程如下:
3 u3 J- W* r/ C; w" E: j) f
3.4 取消HTLC合约(命令参数如下)
$ swap cancelHTLC -h
cancel HTLC contract for asset swapping
Usage:
swap cancelHTLC [txFee flag] [URL flags(ip and port)] [flags]
Flags:
-h, --help help for cancelHTLC
--ip string network address (default "127.0.0.1")
--port string network port (default "9888")
--txFee uint contract transaction fee (default 40000000)
取消HTLC合约的实例化参数如下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000% N) d. y* Z, p# r/ S0 O
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 - [. N1 z7 W% E
示例图如下:
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
成为第一个吐槽的人