Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
186 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!/ B, G' a. Y% J9 F) d% o
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
2 a) o+ _/ M# P$ X下面我们来看一下操作的具体步骤:) S, @# W. y  u5 e7 W7 [& N
第一步: 首先搭建节点环境+ R- |; U- ]6 R" f5 s- R* u+ {9 y
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录( p/ L9 y1 r: s% `, K
1.2 启动并配置好bytom节点,参考:bytom readme.md
, s. T2 b" P+ d" ]5 p" \2 c' w1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:3 i$ Q: m" p) s; E; l; X
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle+ m0 b' F( k2 A% ], B" p$ I
$ cd $GOPATH/src/github.com/shuttle
& a& J- m; W' J- A: Q+ A $ make install
9 P1 G* J4 J/ W& MShuttle help 相关命令如下:
9 l! v: r) _: o $ swap -h
. U! |& A) J$ s# W) [. Q. Q swap is a commond line client for bytom contract
7 ?/ `" ]# O% _$ A$ K  |; C8 w$ f4 w Usage:
1 w6 M* d! m+ ?   swap [flags]3 ]% _. z4 w  l' G
   swap [command]
, ^- X6 w# ^, o% \2 y, b+ N7 I% ^$ cvailable Commands:
4 d) v/ ]; E" `& }  callHTLC       call HTLC contract for asset swapping+ d5 D2 E1 ?' e% @5 x3 s5 j
  callTradeoff   call tradeoff contract for asset swapping
# q/ ~3 E: v& x, E# f  cancelHTLC     cancel HTLC contract for asset swapping
, v" ^' c- X1 |8 b  cancelTradeoff cancel tradeoff contract for asset swapping' t+ S4 S8 ?& u9 d- v( m
  deployHTLC     deploy HTLC contract
, U% F4 D- P* p2 ~' Z  deployTradeoff deploy tradeoff contract5 l( E6 \7 E; i7 B7 M8 {. R
  help           Help about any command- J; Q' J) S' Q$ G2 Z
Flags:
1 a( G3 ]8 T' X# W& X  -h, --help   help for swap% o! {, q! J; y0 k
Use "swap [command] --help" for more information about a command.
/ G& I- o; _% a/ W第二步:同一条链上进行跨链资产交换
7 Q# g3 J5 r4 `+ ]& P2 p如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:" U) V0 H3 o) c6 C& X  `

, J( \$ K9 r* B- e/ D" s首先我们启动bytom节点,为了测试,你可以启动solnet节点:7 G  h$ S0 h( ]: [! k
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node* @; j$ }4 ?+ i  `- h& O; D
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining6 O; U% |3 X: ?7 |1 ~' f
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试; ]/ X* t) g7 u0 R5 Z
创建账户参考
  v; h; k, o& M7 }' r( `* u发行资产参考
1 N4 q5 a+ w% x例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
- P+ `$ a& m2 Y####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)# w8 v% `8 x' r& k5 \1 n% G
$ swap deployTradeoff -h9 r. F! e4 Y. K6 {7 V- M6 A( j( f% K1 t
deploy tradeoff contract
& P8 m' E5 l' l1 I. W  ^; oUsage:
6 D' |$ h0 y' j3 K7 S" E) k) Rswap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
$ Q! n8 \  i2 `+ K" |. e4 gFlags:
" V% \: _/ [* s5 X" s: x     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量4 e! Y& v' \  }' N
     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量
/ @) w1 O9 R) g; ^  n+ {     --assetLocked string      tradeoff contract locked value with assetID //资产ID
! H" m/ I3 m' D$ C* V# F8 I     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
( ]2 T. i' u* h/ k+ a     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
! g4 J- W) _" A -h, --help                    help for deployTradeoff1 |2 N+ ?8 V. ]
     --ip string               network address (default "127.0.0.1")3 w9 Y6 l/ X/ u
     --port string             network port (default "9888")1 P" R, [* {" f) a0 x% _$ k
     --seller string           tradeoff contract paramenter with seller control-program+ i- s/ b! }0 {3 Q* C
     --txFee uint              contract transaction fee (default 40000000)" R* s6 X4 B. N9 W/ n  s0 G
下面是实例化部署合约的过程:
# C& N3 F2 O8 w. d$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
* P- \6 k* Z8 l& N. R3 Z; e3 G--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
& C/ p. B4 E3 b+ \" n合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
9 o. w+ x! h; N# E% T+ R- p2.2 调用tradeoff合约(下面是调用合约的命令)
' T0 W, b; O% _1 s$ X! ^$ swap callTradeoff -h
' x4 C5 a2 X1 g3 \( P# }/ e- ]call tradeoff contract for asset swapping& w) v' h2 J$ o. K+ h' z
Usage:) Q) F& ^' a7 V( y
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
: k/ S  t  Y( |2 q2 R6 M2 IFlags:5 N; M; `! W/ s' U, t8 Y
-h, --help          help for callTradeoff- j7 m. A7 B' p
  --ip string     network address (default "127.0.0.1")
0 n( H0 u# u. n; h# q  --port string   network port (default "9888")2 ^3 o) g9 s- C  D, L% _" t) J
  --txFee uint    contract transaction fee (default 40000000), z' k' f- k" e  Z' U
调用合约实例化参数如下:4 ~& ^! n4 s8 S$ A6 {' r
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
3 P0 e8 }+ D! S --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c) L! g4 l1 G  {
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:" }9 Y# @# g; l, i; V4 X8 W3 {

3 Q5 h% g6 N" ^. D% W交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。
5 V! ^' Q% O( G, `; y2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
$ Y3 `' ~9 ^% ~+ L. g如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
: x. g, _/ S0 {6 M. l$ swap cancelTradeoff -h6 d0 W) E! R. w, ^( N' U& L
cancel tradeoff contract for asset swapping
+ s$ U+ N8 B$ `4 r- U5 \Usage:/ r% H& W6 W8 \6 R
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
$ E6 f% i0 H( R* |# _Flags:
  Z: c& u8 }6 o+ u+ Q- O-h, --help          help for cancelTradeoff% u% I4 o& N5 [
   --ip string     network address (default "127.0.0.1")
$ {2 V/ }; Q0 [7 f4 Z. P: r   --port string   network port (default "9888")
9 N8 Z6 j4 q9 o   --txFee uint    contract transaction fee (default 40000000)3 ^! R- }. U" y, P9 C1 k- Y
取消tradeoff合约的实例化如下:
; {" o) w+ i% U* q $ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
' e5 _) P& F0 `- [8 C  i4 ?  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
, S% x6 ~: Q2 J7 k: m $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  2 r& v: r0 B8 q0 {- A  S( v
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f. g+ }4 k8 I$ s: V* U+ j2 D7 f/ x
示例图如下:
. r- T& w' s2 N' a4 W, b# V" f, G1 {4 m( f
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。% o* ^6 F6 D0 S
第三步:不同链上资产进行交换+ b* L" [; t. g. d! {. n5 S
你可以使用该工具在bytom和vapor上交换资产:& J* d$ V7 ]3 ]9 ]# L/ J- ~+ ^

" e+ G, U, j5 L) Q3.1 搭建并启动bytom和vapor节点
3 w! d! l( o) M1 S  i* ~为了方便测试。你可以启动bytom和vapor的solonet节点
9 ]- Q0 f7 [0 i启动bytom solonet 节点:' f, d' Y: v* E7 u3 E3 z8 a( O4 P3 r
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
- d, v1 Y7 u, @' g. c$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining  S  o/ t8 E7 \7 O, P0 d+ r" e
启动vapor solonet 节点:6 O& b+ L0 [2 f3 ]2 s
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node- L$ `, F- i/ L0 y4 N
$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining
; V! A2 C, p/ I3.2 部署HTLC合约(合约的部署命令如下)
+ T- _) `; d4 B- r/ {' L $ swap deployHTLC -h
( w' Q: O0 E7 V deploy HTLC contract
' V, {. H0 X. w: L, [# Y Usage:! E! s! _* D8 z8 @0 ]& d
swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
' Q6 ~1 X/ ]4 m9 C0 K- s* [ Flags:  ~& f( W) N2 w3 @0 [* t' y5 V' g
  --amountLocked uint    HTLC contract locked value with amount
  v$ M+ g; r6 F3 B  --assetLocked string   HTLC contract locked value with assetID$ P. M9 \7 q& ?; N  p5 v0 X
  --blockHeight uint     HTLC contract locked value with blockHeight; U7 X( X0 }# K9 t  L4 Q0 [
  --hash string          HTLC contract locked value with hash
  x6 O3 W/ P* K4 R+ T* ^-h, --help                 help for deployHTLC
+ C# H- E, K0 o2 r& k( Y1 x  --ip string            network address (default "127.0.0.1")8 K( W0 l$ I/ X) y
  --port string          network port (default "9888")4 ^0 [0 w% a4 z3 n* H
  --recipient string     HTLC contract paramenter with recipientPublicKey
# ^- w; r# K/ Q/ s0 c8 w+ @$ k  --sender string        HTLC contract paramenter with sender PublicKey# I# V. g5 U) Y4 i+ K- J
  --txFee uint           contract transaction fee (default 40000000)
) a" f5 A+ J7 F' y7 `部署HTLC合约的实例参数如下:
9 ^# X$ {* A9 j $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
2 M) a# o3 t7 Z; L --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
( D( K. S! f2 f  I3.3 调用HTLC合约# N+ |) n4 w  J4 o
$ swap callHTLC -h
& k" l2 b% O& B  ~1 x* W/ ecall HTLC contract for asset swapping
- D- S+ j6 N" @. s9 H& [$ j- _Usage:# r5 \; T! }( U, _$ ?1 q# c9 l/ r, e
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
' ]( J9 M) a4 SFlags:; Y9 S7 j& L5 I4 y
-h, --help          help for callHTLC
* F4 B5 x& `% ^( V& \) \% m# \   --ip string     network address (default "127.0.0.1")2 Y* ]% I; C' a6 o$ y
   --port string   network port (default "9888")$ t% M6 G  Z9 T' P5 O1 @
   --txFee uint    contract transaction fee (default 40000000)
% \  O( T+ a" H8 I5 z: O调用HTLC合约的实力化参数如下:
6 C* v5 L( n" S: s$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
/ J3 ~- ^' B' ^# }6 R, |; y5 v( B--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e: P+ g) I6 {$ _! V! e/ P
实际的交换过程如下:) |1 [/ K$ q& p! k

: ~: ~1 s. T" |) F! H# h3.4 取消HTLC合约(命令参数如下)
- i+ N/ L2 E& T  s$ swap cancelHTLC -h
/ |& U+ ^/ d% G( K2 p: X! \cancel HTLC contract for asset swapping& [2 W% `: w( Y; [' P0 t
Usage:
8 _* T$ f7 z$ P) k' Pswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]/ Q0 x6 `; b/ V' X) ~, p/ b
Flags:
! ~, e5 Z8 R+ z6 |2 J* U5 U-h, --help          help for cancelHTLC
  K  k7 g8 a6 P  --ip string     network address (default "127.0.0.1")9 L1 q9 E# z! p( }- N6 ?* J
  --port string   network port (default "9888"), \( S8 y) q2 s/ V1 F
  --txFee uint    contract transaction fee (default 40000000)/ y0 }8 A5 o& L$ X
取消HTLC合约的实例化参数如下:, i" P4 H/ V8 G5 Y' O
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
; `( Z" r" d+ B) c$ y" i" S0 h' w--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd' B, W: n; J: l# K, @8 I) Z# G  \
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
" V0 J" ~. w, g/ G; \: B4 Z--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 6 }& }! Y& p4 U. R
示例图如下:
# n! t+ v7 l. j4 y1 D2 N8 P; N! e* c+ |  w) I/ T! p0 L: V
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。8 m$ ?  m2 W9 Z" Y: x! ?
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1