Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
182 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
* b# o% g7 e. R该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
+ U6 d+ s9 p; [: k0 ]下面我们来看一下操作的具体步骤: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
, E6 r9 i8 H/ J' U6 `' X, r1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
$ L1 j7 w6 s% u2 s$ C, P $ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
' T+ C' M2 y6 }; p% |5 B: Z $ cd $GOPATH/src/github.com/shuttle
/ p) C; j% B/ W! h $ make install- G3 {% z5 i+ M) [; W$ G4 R
Shuttle help 相关命令如下:
2 |7 I* M, N$ A5 [) J $ swap -h6 Y5 f' g1 y% P% D$ k$ ?4 P
swap is a commond line client for bytom contract
& m4 T* w$ C# G" P, Q! l Usage:
& \0 j! `! q# r   swap [flags]
5 s) I; U6 i/ a. }   swap [command]
% Z8 V: s! c4 `* O- z; E6 _vailable Commands:! M% L4 }) }' Z
  callHTLC       call HTLC contract for asset swapping
! j$ ~7 Q3 r7 g  callTradeoff   call tradeoff contract for asset swapping
7 _; h$ [' w; F2 n  cancelHTLC     cancel HTLC contract for asset swapping4 X4 A. V. V- W
  cancelTradeoff cancel tradeoff contract for asset swapping
9 S# ?9 G, E* c; k% |  deployHTLC     deploy HTLC contract* p+ Y$ q& O* w  O7 O" ~6 s
  deployTradeoff deploy tradeoff contract
: E, X, |% x+ b2 G1 ]# g9 L' O7 l5 [5 `  help           Help about any command% n& t/ W+ ]  y, j2 c- O
Flags:
: h; d7 S: {; V+ Y  -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合约可以实现资产的交换,整个交换流程图如下:
* K0 {- z: E, W6 _& ?! Q
, v% _: ~6 Y6 A5 i首先我们启动bytom节点,为了测试,你可以启动solnet节点:
* O9 l# l7 G* a* A" L3 S) T$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
+ y! N# _4 ]/ j; I8 ]# k7 Z: q( K$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
1 ^" R# h9 ]0 f+ t- g0 I搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
$ {& k) [9 P, k6 W: b创建账户参考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
4 a/ P) T; h3 W: ]deploy tradeoff contract
' C$ {* o9 B* tUsage:
5 x1 o* Y- y& G( gswap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]) I2 D" [+ W3 A/ k
Flags:
0 @- u+ B9 T2 r; i) a  {" M  N     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
; L: y; p( n0 Y8 h' L& z     --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
. e- Q' {) v$ b9 u, n5 H8 v -h, --help                    help for deployTradeoff" ]4 }1 H4 s. k* m- H( i
     --ip string               network address (default "127.0.0.1")
! Y9 q$ B  q  D9 u0 l9 e     --port string             network port (default "9888")& N( ?7 e7 B- q
     --seller string           tradeoff contract paramenter with seller control-program
" B. z5 e' w* _, F) s     --txFee uint              contract transaction fee (default 40000000)
" R* a: o. f4 J3 A* H8 \下面是实例化部署合约的过程:
: R. q8 C3 X* k! e; b% D$ 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
" \9 B9 q" i. m5 y7 t2 w6 ?合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
6 K5 _! W4 ^6 J3 ]0 \, f' R2.2 调用tradeoff合约(下面是调用合约的命令)
8 A4 y4 L# ~9 z' y$ swap callTradeoff -h/ e% |" c& m0 ]8 o
call tradeoff contract for asset swapping4 J  ]1 l4 L) M
Usage:
, z5 r# ~1 [# k1 t3 O4 q6 O, c0 b) Bswap 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
/ j- k6 p+ B0 I2 u$ v( _+ E  --ip string     network address (default "127.0.0.1")
6 S( Z5 X! l6 H- L5 A0 t  --port string   network port (default "9888")
% t) `3 l0 y6 s6 P% ~8 `3 N! k  --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
& o! Y$ |  w- [( o3 J5 B+ f! i调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:+ ]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合约的相关命令)
+ x* w! f( b- G0 B( _! H* f如果有人想取消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:
! \" m1 T& O6 V* Lswap 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")
8 t7 Z+ {! U  [2 [. s) V   --port string   network port (default "9888")
5 a# d* L0 x" Y% F3 p3 g/ E4 l   --txFee uint    contract transaction fee (default 40000000)
; ?) u; o8 \  c" a/ j9 O+ g取消tradeoff合约的实例化如下:
9 Q3 X* A0 P: e* l4 l7 G $ 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为例。
/ v" w+ K6 F  Y( X" z$ P+ {6 [第三步:不同链上资产进行交换
, P1 l% `4 s& |9 f, ?0 ?你可以使用该工具在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 节点:
8 L4 m( A8 Q: Z, j$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
' P& l; q9 I* K% G! w$ 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 节点:
3 s% S8 x6 W1 D0 @$ 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]
  u7 P3 s* ^  {7 \4 | Flags:; c! P% @2 y- Z! [, F
  --amountLocked uint    HTLC contract locked value with amount
" ^3 m+ K7 i  |; [- q! F- i  G  --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
2 ~% C" K3 w3 K+ t, B-h, --help                 help for deployHTLC
; r9 t: J0 B5 ^  --ip string            network address (default "127.0.0.1")
) ^/ ]1 l1 B5 u% B" ]- ^: R+ C2 R, Q/ O  --port string          network port (default "9888")
8 c: O! q& B, S+ N  --recipient string     HTLC contract paramenter with recipientPublicKey
* M9 Q8 R' j1 C6 j; O) h  --sender string        HTLC contract paramenter with sender PublicKey
. i- X& A1 e5 b  --txFee uint           contract transaction fee (default 40000000)8 k3 J. }" T( N! _6 w
部署HTLC合约的实例参数如下:
. r" L0 B. x$ O  ^' k9 O $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
+ A) A( E/ e0 f. i --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e5 C' y" L+ n/ _
3.3 调用HTLC合约
  Y* L$ H( T8 ^; T1 K' o: {% P$ swap callHTLC -h1 Q6 h  R2 S% v4 G8 y( ^
call HTLC contract for asset swapping
% j/ n4 |/ r  |8 N( oUsage:
5 w; H9 r! Y/ R0 c6 xswap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
; {! ~5 l* e5 h0 U! vFlags:
% \, F  D+ J' b, { -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")
5 [. O6 \9 G( J/ t   --txFee uint    contract transaction fee (default 40000000)
: \) J* A( i' G4 e# C! N3 _& Q调用HTLC合约的实力化参数如下:
5 Y0 Q4 T* h$ D6 A$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
; Q9 M( Y7 F5 g--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
. U" p1 n5 x1 o  a: ^实际的交换过程如下:
1 L) Y+ _; z3 O: n" M: V: \0 t+ @0 p5 G. Z* `& ^$ ^/ c
3.4 取消HTLC合约(命令参数如下)
6 V: z' T! Z! X/ O  L$ ^- F( r$ 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]
  `9 C. @1 {. V6 Y/ y7 RFlags:6 T0 z( q! z" {4 u  |1 K
-h, --help          help for cancelHTLC
- L8 a1 f$ q4 ^7 Q- W8 j/ o4 q- T  --ip string     network address (default "127.0.0.1")* D0 D0 r) T* l
  --port string   network port (default "9888")
) {1 ^4 E/ R$ ~+ K( S4 j7 A  --txFee uint    contract transaction fee (default 40000000)
  j' g8 D! v! S9 \% T% h: ^1 a取消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
0 r# p' f& x6 S. @--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
7 V# O. z% o, t9 B, I( {1 ]$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd% q. a4 }+ h, _! k( ]9 G) w
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 ! J) x- Q' C6 ~; R5 _8 c0 A
示例图如下:
" {+ E/ W. b. S6 B+ `0 ]0 Y! S& R& @" R3 ?- Z% V
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
) L0 n6 q: p1 i+ t这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1