Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
194 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!# {3 b" s# L1 L: K4 m& j
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
- ]$ A/ D; K# O9 j7 v下面我们来看一下操作的具体步骤:
- U4 D& g$ g% J5 r! ?" |第一步: 首先搭建节点环境
& [7 r1 [* U4 T! W, Z1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
; s9 y5 X  D  }+ q* @2 y( |$ F1.2 启动并配置好bytom节点,参考:bytom readme.md+ ]% x5 I4 ~( @7 P( h# o
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:  d$ T' `8 }- q) `
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle3 o) J1 [6 `8 T. G; i% F& t
$ cd $GOPATH/src/github.com/shuttle& T8 O" Q1 g6 S' G' t0 ~8 @6 l
$ make install' o! q6 o5 Z+ y1 s8 {
Shuttle help 相关命令如下:$ A! j/ Q2 g7 z7 J+ F; I1 z
$ swap -h
$ }5 u0 C# ^+ F8 e swap is a commond line client for bytom contract
3 r( y( W3 l; }# \) r- [* G1 x+ ] Usage:
* z3 m# E2 S8 M+ `   swap [flags]
  ~  j* F8 u! I. }   swap [command], L. {; d( A3 d" s4 t4 w$ q
vailable Commands:  e, e9 L8 E* z+ w5 U4 S
  callHTLC       call HTLC contract for asset swapping: x! V' U" z! y
  callTradeoff   call tradeoff contract for asset swapping8 \$ J5 c4 E6 ?0 f
  cancelHTLC     cancel HTLC contract for asset swapping% w6 g! @. S6 x9 ]" F
  cancelTradeoff cancel tradeoff contract for asset swapping. }# J1 j: r# ]* y
  deployHTLC     deploy HTLC contract
4 D: z1 v0 m. i( |, c' ?& ]! C  deployTradeoff deploy tradeoff contract% @9 @1 p& \  |( p% u1 j+ s
  help           Help about any command
% I" K3 k- M; j, wFlags:
' q& _% D% g" U! f/ K* c9 K  -h, --help   help for swap
/ V) o. u+ H& l6 h2 |Use "swap [command] --help" for more information about a command.; ~5 m. E2 Q1 _/ S+ d  _
第二步:同一条链上进行跨链资产交换) h- g/ t( U/ q4 {
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:, t3 D6 B% o2 ~9 R1 Q

% k% J" X: u# D: `! ^9 z2 }, x  W首先我们启动bytom节点,为了测试,你可以启动solnet节点:# [4 `) l0 d# k# s2 W: H; W  g$ N
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node. T3 I( K9 X! s: x' Q; n4 k
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining9 e& _+ C. V" G0 N
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
/ R! F) U7 i- y+ |" ^创建账户参考
8 i5 e0 M# D9 ?! d8 g! i发行资产参考, ]) ^6 D+ N( U- b  c
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
, g7 a# G% I" x6 S####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
/ R. ?% ]3 z: Y5 c; ^0 K' U4 N$ swap deployTradeoff -h2 `* _' L8 [- W6 D3 t
deploy tradeoff contract0 u3 o* C" C7 z- S& ^# J5 s$ F
Usage:) P" x8 x% ^, Y( Y- |( [
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]: o* a) I# W! j0 m
Flags:
: r4 m1 d5 f3 i& [# X( @     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量+ N6 ~; Q0 E) n* C- `" B
     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量5 ]. _% y/ \" y# i
     --assetLocked string      tradeoff contract locked value with assetID //资产ID% P" y- k, y: k. V- `' c# D
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID2 L% ~: u; i2 D# f$ }
     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
+ ?: Q$ z6 t6 U6 e" ^( R -h, --help                    help for deployTradeoff
, \$ n9 Q+ f& O! s% d     --ip string               network address (default "127.0.0.1")
0 L3 {- Q9 S$ T/ a4 o1 L     --port string             network port (default "9888")+ h5 _( ~& d6 L) ~! h
     --seller string           tradeoff contract paramenter with seller control-program
9 m3 o+ H8 D% O# ?0 l     --txFee uint              contract transaction fee (default 40000000)$ B/ V' ]) N9 X: E" o/ |5 R
下面是实例化部署合约的过程:0 h3 f! G( d. `! Y) [* p
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000008 _! ]3 m) m  {$ R& z2 E) ?
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f- ?0 e# p' Y5 b/ R/ Z. f: H' K
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
1 j+ z' h; B( p8 a; P0 v2.2 调用tradeoff合约(下面是调用合约的命令)
6 M2 Z0 }8 T5 L7 F' K8 a$ swap callTradeoff -h
3 O( L- e, U4 d7 `& bcall tradeoff contract for asset swapping. H8 _) q3 g5 O. F( y9 j2 E- N
Usage:
0 q. x$ _& n6 z) d6 ~% e& m6 C* t; mswap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
& D# m2 d: P; c4 C- t! ~Flags:4 N( C0 u" z' E, V# Y4 p- H
-h, --help          help for callTradeoff
% p6 `+ t5 m4 m: ^% M  --ip string     network address (default "127.0.0.1"); u- @& t1 [" H. Z0 M: ~& ?
  --port string   network port (default "9888")8 S- `- N! D# g: \% _
  --txFee uint    contract transaction fee (default 40000000)
$ M6 t2 f% V9 d调用合约实例化参数如下:. h8 d8 Z4 l" }, t9 e9 T
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
2 J1 U, f( Q. C! z3 g  N --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
. A6 P( a. H% G4 r1 I' ~调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
! c0 Y2 |0 p8 k$ z) z( J1 d2 L
3 h: Y) U1 p  X交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。8 X8 e) ?( E. G$ g
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
. E  e  `4 O/ q如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:& V2 t* V4 y+ L, H, J  i$ |7 |
$ swap cancelTradeoff -h
, c- k- D- b$ o6 @/ Ucancel tradeoff contract for asset swapping, _% G3 o- Y" l
Usage:# t1 [; r5 H1 ?$ o& ?* u
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
  x, H- E* H3 H6 `4 I: BFlags:2 r/ D. X+ [7 p
-h, --help          help for cancelTradeoff" u# r/ Z+ C/ z2 `
   --ip string     network address (default "127.0.0.1")
( f6 s4 I1 |3 `& e+ t9 a) e   --port string   network port (default "9888")
7 S9 b5 U$ @* H   --txFee uint    contract transaction fee (default 40000000)
/ o2 @9 ^' @& L) O取消tradeoff合约的实例化如下:' s* S! k+ c: v7 d
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
; ]% w$ C1 I) X0 N  E( h  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
1 ]' k/ g) t) _0 i1 V $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  4 ?* Q, ]$ ^: }9 s5 N& y, V
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f
. G* h# ~) J* [& s示例图如下:0 ?2 d5 o& w  s4 e. [1 v
% t  R8 N8 C2 k2 b: @8 J; X9 p$ B
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。: G. ^1 C) j. j& p4 @7 R) N( p
第三步:不同链上资产进行交换
+ C. j7 l* i$ |5 U! J你可以使用该工具在bytom和vapor上交换资产:
3 b7 k. l" Y: i
) |- m  S: E! J3.1 搭建并启动bytom和vapor节点/ f% X+ p" d2 w
为了方便测试。你可以启动bytom和vapor的solonet节点
) ~8 {7 s( ^8 H+ Z启动bytom solonet 节点:
  O- d; u  N7 t2 Z) i. e) q) h# J$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
  M. s) |6 a" L$ T) u1 e. m$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
, J5 {7 y) k1 |( h0 }5 M$ s0 h* \启动vapor solonet 节点:7 P& s( I" k( ?8 q' t
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node. u% u) X% w" e8 D+ E! a& a
$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining/ l9 ?; w4 W; E1 j2 j$ C& v2 M$ j4 y
3.2 部署HTLC合约(合约的部署命令如下)# @1 i' {8 d0 N7 t. t0 A* ]
$ swap deployHTLC -h
" C  k2 j, @- [  D2 z deploy HTLC contract' O. o7 P5 A% `1 c8 ]2 d
Usage:8 K1 G7 J3 V! w. l) t% @
swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
0 w& p, Q  l  Z# L  d) B/ _2 b Flags:
; P. p8 F" O' h, d  --amountLocked uint    HTLC contract locked value with amount
; c* V3 [7 d8 M- @* K2 J) N  --assetLocked string   HTLC contract locked value with assetID: r+ [; t, ]# E# N9 _3 j
  --blockHeight uint     HTLC contract locked value with blockHeight( ~1 v5 _! s5 ~3 N0 V. a7 A
  --hash string          HTLC contract locked value with hash% g) `3 d6 V6 e7 v9 l
-h, --help                 help for deployHTLC" }; t0 x" O" P' O) c
  --ip string            network address (default "127.0.0.1")5 ~0 V* r* v: `
  --port string          network port (default "9888")
* u" I: F7 o. e  --recipient string     HTLC contract paramenter with recipientPublicKey
1 J. @& H+ U7 X  x5 s$ D2 x) o  --sender string        HTLC contract paramenter with sender PublicKey
0 q" n' e% D* B3 X  --txFee uint           contract transaction fee (default 40000000)
) Q6 z" M! o/ ^4 z部署HTLC合约的实例参数如下:, Z! W- f: O7 _9 T9 o3 j/ Q, I
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
6 h. m0 d& n; J --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e  L( p6 v2 f2 b3 F
3.3 调用HTLC合约
- `; D! M5 A% K6 C& N$ swap callHTLC -h5 V$ t$ J2 l3 \
call HTLC contract for asset swapping$ n# [8 T8 L, L
Usage:
( v- f3 e9 g( nswap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]! x  `/ j+ [* N! k! m
Flags:
3 ~8 N. _' S+ G3 n: `6 R -h, --help          help for callHTLC' W: r' ]& x/ R' K
   --ip string     network address (default "127.0.0.1")9 W0 J# o/ \! C! `
   --port string   network port (default "9888")
; ~' ^; x- ]$ n. a. G   --txFee uint    contract transaction fee (default 40000000)" n( z3 q  Z, R& u4 F7 _! B
调用HTLC合约的实力化参数如下:6 `3 C# i/ c9 f
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
" ]; Q& I# {9 @, u--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e! K# }5 K' S/ y# d
实际的交换过程如下:
$ }6 R' i, e2 W! c  e6 S' u! h: s; ~+ q/ K$ ~
3.4 取消HTLC合约(命令参数如下)- j: ?# J& H) [8 X1 J% j
$ swap cancelHTLC -h
5 _- C' @! K3 T/ H. Ycancel HTLC contract for asset swapping
: n2 i1 Y% M9 u' c* s) x( V3 JUsage:
# E& ]) v! S$ c6 E$ {% vswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]8 T" e+ r$ T7 c  Q2 ]
Flags:
: C: @/ U! o7 a4 J-h, --help          help for cancelHTLC$ u) u: j/ S9 L. z& i
  --ip string     network address (default "127.0.0.1")1 S) [  p2 a6 T: ^3 g" @" K) o
  --port string   network port (default "9888")- }& U! O  C- z+ J
  --txFee uint    contract transaction fee (default 40000000)
5 X& ?  \5 L% ?7 c3 w取消HTLC合约的实例化参数如下:
% h5 r& E) M# c, H, k* f$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
$ V- t3 K# p! N, Z6 |! r2 o--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd( L! I: F5 X, p1 b& U1 `: i+ x+ m
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd* g2 Y9 @. w  E
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270
6 R; X9 U% ]0 A. I1 ]- C  Z- q示例图如下:
6 H: j0 _1 r( H; L' z; N  o5 m5 ^9 t1 u! M
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
: s) h) q0 ^7 U2 C) M( i% S这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1