Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
116 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
2 F1 ~2 u8 R  J" X该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。7 a! r. S4 l3 W7 t  B6 g
下面我们来看一下操作的具体步骤:
  j/ Z1 N6 c* q$ ]# k第一步: 首先搭建节点环境$ {  j" l" w* i8 }& d1 C
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录( q6 }. k0 b) I. i. T$ l5 D
1.2 启动并配置好bytom节点,参考:bytom readme.md
' s& T6 j* e& [1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:/ K1 P! D0 Z) j" ?. Z  u; f: v* a
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle# f0 D& T5 O! o9 L; `
$ cd $GOPATH/src/github.com/shuttle) [" M) c. Y; T! s& Y* J: ?
$ make install% O! Q# u% F, d: E0 F* W# f
Shuttle help 相关命令如下:8 @; o1 _! Z6 Q( l* e6 _% m) P/ }
$ swap -h
& n4 g( q. a, Q8 m/ B4 ?6 s( a swap is a commond line client for bytom contract
2 Y6 L+ g$ ~9 Y5 @/ o, M Usage:7 o) z1 Z! b+ d# c
   swap [flags]3 N( u* o9 c/ G$ k: h0 w1 `' J
   swap [command]$ M" [# b2 [! e- J8 C
vailable Commands:' e: \# Y9 z0 T8 l
  callHTLC       call HTLC contract for asset swapping
4 U8 ^4 P0 c2 o2 J% H' ^  callTradeoff   call tradeoff contract for asset swapping
# p+ P" k4 V  T8 C  cancelHTLC     cancel HTLC contract for asset swapping
7 C  H1 r5 e/ W  cancelTradeoff cancel tradeoff contract for asset swapping
. n; Q# }7 j& V& |% m  deployHTLC     deploy HTLC contract
. H/ q% o8 N! e- t* u& ]% ^9 [  deployTradeoff deploy tradeoff contract
2 \- T, T8 `# R) y' h  help           Help about any command$ C) t- |5 p) l+ b  Q
Flags:4 ]1 ~, D4 G5 u8 y, X% S4 t
  -h, --help   help for swap$ P- e, k4 _% w7 ~$ I! D* q7 h
Use "swap [command] --help" for more information about a command.
6 p5 Z8 R/ U4 Q, j8 H  T+ y# e5 V第二步:同一条链上进行跨链资产交换
& l4 S: n- O7 c- P, e如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:* A, Y9 |# T; |
2 y7 }5 s/ H2 c6 L
首先我们启动bytom节点,为了测试,你可以启动solnet节点:
/ G8 M3 _/ K9 I* d. _$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node( R  \% h0 P' K, t; \. E7 E4 T
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
* G0 z" f$ y/ L; ^4 _搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
5 p. b  _% b/ @: |创建账户参考  D9 U1 X" I3 u; t& {
发行资产参考+ c6 D: k; V5 V* i: X1 H
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
) T: E" h# g5 m" p4 M####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
. B: J5 E; l; {! N$ swap deployTradeoff -h
0 L2 T. M: z: N; @1 x/ Qdeploy tradeoff contract
0 S3 A8 F9 o) c8 A& D! i3 _7 c' S  ZUsage:' ?: _; o; i. F+ I
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
- P, s* o5 P2 O) VFlags:* ]; T( i5 B! D+ |! I; S
     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量$ N, l7 z% V2 L% `/ _
     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量7 _. W7 w1 K  U9 x. D( ~( R
     --assetLocked string      tradeoff contract locked value with assetID //资产ID& G' Z4 M, D* h9 V& ?/ z( h2 H
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
2 j. ^) c, E  g# x2 c  h, }* c     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey# ^3 N! s3 ]9 l) o3 I
-h, --help                    help for deployTradeoff: ^/ R2 m; }4 B* p
     --ip string               network address (default "127.0.0.1")
- }9 t, _, X/ G2 b9 R  Q     --port string             network port (default "9888")% w' M  Q& X7 K+ T3 |1 j  F
     --seller string           tradeoff contract paramenter with seller control-program5 H6 g9 M7 I" A, E/ ?: U7 |! g
     --txFee uint              contract transaction fee (default 40000000)# W7 Y1 {# T, V$ u2 q, ^
下面是实例化部署合约的过程:
* A6 I/ W7 P0 [  c$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000# S. H1 v  Y2 ], f# _) Q
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f2 V# V3 \) w* c
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
$ ]; y) W, Q% N5 s* [2.2 调用tradeoff合约(下面是调用合约的命令); w3 V  O7 y% F( b5 X
$ swap callTradeoff -h
8 E! O* S- a  i( o% vcall tradeoff contract for asset swapping
/ L! V1 S* y7 _, m1 HUsage:6 V; W1 s$ ~! c/ S, C
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]9 {. \- W+ T3 y' \! M$ r
Flags:
% L  T5 n2 Q" O- p-h, --help          help for callTradeoff
; W6 `' P$ r: d; R5 z6 ~& \+ r9 O# Q  --ip string     network address (default "127.0.0.1")
; E+ T, O6 E5 S8 z  --port string   network port (default "9888")
5 r  d5 _9 |# A% `! E& D  --txFee uint    contract transaction fee (default 40000000)
  U" S( S' J. b- Z- a调用合约实例化参数如下:
$ M' J; @0 C, l! d $ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f, }: I8 L9 M  |% c1 z
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
8 w0 l2 F' x( ~5 ?调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:1 i: c# l! X4 q! Y$ @0 A. M: l

5 v1 [. l; [2 M1 L交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。
2 C2 M( m+ L  v$ e& i2 K- u. q2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
/ E1 B+ n1 d) n8 @" b/ F; E0 j如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
; G2 B4 T7 x! Q* L/ W* K( r+ ]$ swap cancelTradeoff -h/ x) J% B6 K# N! r
cancel tradeoff contract for asset swapping' \+ j: G- t' n, q
Usage:0 D4 C5 p1 U9 R/ \. m
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
1 z1 h2 W% t9 b9 f& nFlags:0 F) Y, `% i/ H( u
-h, --help          help for cancelTradeoff0 K, O6 k. {* s
   --ip string     network address (default "127.0.0.1")5 x' D/ [6 {: _# |- @
   --port string   network port (default "9888")
$ ]! r8 E- x+ X% p9 k) _) }9 B4 h; X   --txFee uint    contract transaction fee (default 40000000)
( M! [$ \- s7 @1 ~7 c" F% r取消tradeoff合约的实例化如下:- [' d1 y* R. u1 P+ Y
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000003 D  ]* W: ~& L/ ?5 L7 {# }+ {) m0 a
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5- E, b& s/ d$ y/ B9 u7 m
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  * \1 P1 D. F0 e( s5 ]
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f8 v; J$ f+ V2 p
示例图如下:
* d/ t4 K9 J1 ~+ K/ V) t' m# h* A* y/ J) t
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。( ^9 g, J. T# |" h" e
第三步:不同链上资产进行交换
0 }- h, Y' E, M9 _4 `, U; @你可以使用该工具在bytom和vapor上交换资产:
, p; Q4 J& V( b4 v7 {, }) L  {& n1 E$ z# W! T7 q
3.1 搭建并启动bytom和vapor节点
" f8 P; Z- q7 w6 j为了方便测试。你可以启动bytom和vapor的solonet节点# E. {/ V3 w/ P9 i
启动bytom solonet 节点:; u: X5 S: p" ], q3 N/ t
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node0 x: r2 v& ?% h6 b. o9 K
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
, @6 B# ]( O! f启动vapor solonet 节点:( s) [3 x. Y5 ]# ?8 X. z: v, t
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
+ ^/ _6 U6 i1 j! Q$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining5 f* U; D' ?2 R
3.2 部署HTLC合约(合约的部署命令如下)% x& S; A0 T" G4 v
$ swap deployHTLC -h/ r/ A: r' ^, @7 F- K! a
deploy HTLC contract
- |5 ~/ x& U$ r! |& W1 L Usage:! a/ p! V7 S3 [; t
swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]+ K$ I3 m+ V6 x4 f# a" v! H
Flags:
, Z. `/ Z( P! o( N& r  --amountLocked uint    HTLC contract locked value with amount
8 B1 N2 S7 p7 g" ]4 r  --assetLocked string   HTLC contract locked value with assetID
6 @5 G. j/ s) A+ M+ v) ]: R. c  --blockHeight uint     HTLC contract locked value with blockHeight
" c; Q2 e4 A8 C* t. ^5 l% s  --hash string          HTLC contract locked value with hash6 P& l+ V7 i, ]1 a2 }
-h, --help                 help for deployHTLC" L  N. O; d1 U4 m$ ~
  --ip string            network address (default "127.0.0.1"). n8 Q; j5 |. J; L  \# {* b) y
  --port string          network port (default "9888")$ \+ A+ T' ?+ {. n/ v" Z
  --recipient string     HTLC contract paramenter with recipientPublicKey3 w7 {, E6 q( S
  --sender string        HTLC contract paramenter with sender PublicKey- ?+ A9 `. Y5 t
  --txFee uint           contract transaction fee (default 40000000), s) o, Q" c9 w+ M
部署HTLC合约的实例参数如下:
! a2 `3 c* M# f; V $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000# V5 [! J/ [$ n0 f# q) V
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
2 A/ [$ {/ E# M  P( t4 s# G3.3 调用HTLC合约& c) r8 B, ^0 `6 x" R
$ swap callHTLC -h4 u9 V4 q& z3 H( b
call HTLC contract for asset swapping
7 N! E& s1 \" x7 S# y& @4 ~Usage:' s. q- Z% h) \$ m% @8 p, M2 T
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
7 H1 {( A. I, XFlags:8 p! K* N6 R/ W3 h& b& {$ I
-h, --help          help for callHTLC
6 w) x7 a+ S1 z   --ip string     network address (default "127.0.0.1"): l+ X" O3 n( M5 j1 s5 Y/ D/ W
   --port string   network port (default "9888")% w$ O: I0 r' M+ F- k' ^: b% c; J5 S8 l
   --txFee uint    contract transaction fee (default 40000000)' J- U; u3 P! k0 o# g$ _& X  a
调用HTLC合约的实力化参数如下:2 r* U0 E. W& j' @
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e* @3 Z  V7 b- ]% ]
--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
+ x* M' P4 D; c" l9 `& l+ C1 f实际的交换过程如下:9 o* d$ e6 R# V' h( W) E! V4 |2 J
. J+ b1 J" g3 f& R' t& ]& r
3.4 取消HTLC合约(命令参数如下)
5 l7 ?) V5 K5 i$ swap cancelHTLC -h: ]0 G  d" j1 C5 t5 b$ w0 Q
cancel HTLC contract for asset swapping
7 _; L. ^9 s/ l  z5 {" fUsage:
, C; E8 _! U' a7 _$ A0 V2 U8 Mswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]
8 Z: G! K: d. {! S, M6 zFlags:, P5 v1 ^7 |9 F% q8 u
-h, --help          help for cancelHTLC
2 b/ |  {6 ~+ d# s4 X* A  --ip string     network address (default "127.0.0.1"), Y; T$ |0 _" \; H5 D$ g
  --port string   network port (default "9888")$ _# G# k' S. L# L2 a- F
  --txFee uint    contract transaction fee (default 40000000)9 I* G. t$ r( x) ~# f( r4 |$ }0 \
取消HTLC合约的实例化参数如下:
, f' F; q( @8 H$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000; W. y; v% `  v* ^
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd7 _) {4 `* \' `, M/ {3 g/ C
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd& t# b  l( Z1 m) `+ h7 K% o$ O3 l
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 , ?! f( S; F+ I
示例图如下:
! W' x/ l+ W# i& X5 g
6 V6 s3 ]/ ?6 t# j; N1 M9 S" C$ f取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
7 h% e& w  z6 H" `# K这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1