Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
100 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!5 k, P- H. J( W5 W) y7 i3 Z' P; L
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
. v7 f5 z" g9 f下面我们来看一下操作的具体步骤:
3 \1 s" U  w- c. ~" Y9 `第一步: 首先搭建节点环境
% @( Y/ C. Y; b* R1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录$ p7 c8 i( o5 ~4 e; s3 i
1.2 启动并配置好bytom节点,参考:bytom readme.md
1 c: t4 w/ @$ ~& D# _1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:4 ^: M6 O- o3 y9 Y
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle3 ~5 x1 H- R! H' v+ V7 \
$ cd $GOPATH/src/github.com/shuttle
: X6 C$ t" y0 e# {; \+ ` $ make install- |0 @, [* S) u- Z% \; B2 N2 A4 ^
Shuttle help 相关命令如下:, o! H0 M# g! z  ~) N7 Y7 p% h* z
$ swap -h
: [- l) j, P9 e( c swap is a commond line client for bytom contract
, b( r1 M! P. }4 e, T4 N8 ~5 B# m6 j Usage:3 |/ C9 s+ ]% W9 A/ U" j
   swap [flags]3 i7 a2 x2 d, h8 q
   swap [command]0 b+ U+ J$ J/ c% {- }
vailable Commands:7 w4 W8 G+ n2 E
  callHTLC       call HTLC contract for asset swapping$ }5 @, m, i2 }/ `" ?/ J: j
  callTradeoff   call tradeoff contract for asset swapping
! X! j/ ^- o2 S: e6 H9 J8 z  cancelHTLC     cancel HTLC contract for asset swapping
2 w8 p/ ?# r" p% S  cancelTradeoff cancel tradeoff contract for asset swapping
( Q% ]+ h3 X1 }1 Z1 ]  deployHTLC     deploy HTLC contract$ F. k; W3 A7 S* Y. ^4 ~
  deployTradeoff deploy tradeoff contract/ j2 T+ K: p: n
  help           Help about any command
1 U: b( Q3 d3 E/ _Flags:" I+ ^" S' D9 h" V% ~# P
  -h, --help   help for swap
' Q5 q4 z0 a7 }+ s! yUse "swap [command] --help" for more information about a command.9 i6 C0 |3 h$ y# v- A
第二步:同一条链上进行跨链资产交换5 s/ u# B3 |* o2 n) }2 z  l: M
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:' S3 O6 G  s0 `4 J

2 I. w6 ~' y7 ~9 s# \: P/ k首先我们启动bytom节点,为了测试,你可以启动solnet节点:
3 Z9 G/ [- D8 u2 Z$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node# Z2 f. X- j; W0 d! U# w$ ]
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
; \; E! g( v$ V8 O! z0 X8 X& {搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试$ X' \" T+ l( |
创建账户参考1 `) z: |& K8 Q3 L
发行资产参考
; S) S9 d% d  c4 R例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
/ l2 _: H& _8 i! s####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)9 B, U3 W; Q+ i5 |& z
$ swap deployTradeoff -h, m  ~6 ^) M' I8 G' ?$ ^
deploy tradeoff contract/ E2 `8 \1 N$ J$ `; F5 K
Usage:1 c+ {6 j( o$ O
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
, X/ Q& N- ]& O" y  _- R2 C+ ^Flags:# h& K: a8 N& _
     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
0 P' u% |- n2 O/ U- S     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量) s1 j  e- H! _, h6 L5 f. @
     --assetLocked string      tradeoff contract locked value with assetID //资产ID
3 L$ Z  y1 d4 S. t     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
# [9 l; Y" v$ Y! {2 f5 s; b- G5 f     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey# p" A( Q6 o$ `; U6 P$ s
-h, --help                    help for deployTradeoff/ s5 g0 ]/ c- ]3 q- N- I4 z
     --ip string               network address (default "127.0.0.1")1 |% w+ ~) O! x4 h# m/ U  H3 J: g( S
     --port string             network port (default "9888")' G% _( E5 m; V( H3 P  ]5 b0 M
     --seller string           tradeoff contract paramenter with seller control-program% q& f3 C1 ]" O( i6 \
     --txFee uint              contract transaction fee (default 40000000)/ I' j" c0 x! U# y* s
下面是实例化部署合约的过程:% f  d& ^) r* N  F
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
, [  V5 `6 `! z- U# Y" n: [--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f* Y5 ]+ S( S- ]6 O
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
$ K* j+ p: Y( r4 G3 U2.2 调用tradeoff合约(下面是调用合约的命令)
: Y  i1 u" ~' u- I5 T% b$ X# i$ swap callTradeoff -h0 I3 X% E- x1 l5 `
call tradeoff contract for asset swapping
' B+ w$ P6 M/ ]4 l: R: t+ q0 EUsage:% K) y( ]3 F) \0 o8 ~" r# u1 Q
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]& ~+ N1 _, D7 F; \7 e$ {
Flags:
9 L- S; E0 V) E0 _4 }3 {-h, --help          help for callTradeoff9 r' I3 ^1 {7 I/ m7 D
  --ip string     network address (default "127.0.0.1")
5 m' s0 l! C+ n5 w. C  --port string   network port (default "9888")# q1 o2 G% _' p3 A/ Y
  --txFee uint    contract transaction fee (default 40000000)% w2 Z; V. |6 _) ~( f, q( o0 [
调用合约实例化参数如下:+ D2 |  b3 P& ]/ H2 x3 v4 i3 ^
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
' i+ {- {: c2 s, n" G4 |" O2 Y --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
9 v/ f6 [; j9 V, v调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:3 Q3 O4 w4 y- w# I  y

: G9 l2 R5 `& _  T2 F, |, `交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。
$ _2 G% o1 w1 e1 d, k( w, k5 ^2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
/ V- \& U6 C( U0 n% y- O如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:5 Q& K1 m% ]4 O- n" T. c6 C( \6 c
$ swap cancelTradeoff -h' Q! z  A# d0 h( ^. X* Z4 U& z" Z+ ?
cancel tradeoff contract for asset swapping
1 v  Q7 L; C8 Z3 M  K2 t5 _Usage:, o+ z' B+ R( j9 {
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]8 x) q# H: C, K# B2 m7 K9 M: R' `
Flags:+ O3 C3 y9 I" Y% p0 P% P0 e9 e
-h, --help          help for cancelTradeoff
0 e$ D, E! q% t$ I6 I1 \0 o   --ip string     network address (default "127.0.0.1")" I6 g, B# B5 `3 E- ?2 I
   --port string   network port (default "9888")
  m0 x( [/ Q- a7 ]! g0 e& r   --txFee uint    contract transaction fee (default 40000000)
, y. o3 `) U* ~/ Q9 }: i: M  x( b0 j取消tradeoff合约的实例化如下:# c) l+ e; C' K9 }$ F" _- C
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000: k" K4 d5 @: s6 _2 I% W8 H1 L
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
, o# ?& ]& ]# E3 Y1 B $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  
- A% a; c5 |6 z --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f
4 e% _8 s* L6 r, o! a6 d. A) j. I示例图如下:
: S7 _9 {/ S' m
2 L! G0 W/ {3 f! b上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
; @: \4 \! Q; h+ U$ T4 m第三步:不同链上资产进行交换: M% j: j3 ?' X9 i( t8 Z# p
你可以使用该工具在bytom和vapor上交换资产:) I2 A3 a! ^9 P" o0 l5 a" ~  u
* [' V; Q0 L9 B9 x
3.1 搭建并启动bytom和vapor节点
7 ^% B1 N7 r% b& G6 s" n# Y! X: f为了方便测试。你可以启动bytom和vapor的solonet节点
$ W, ^! x- l* I7 W启动bytom solonet 节点:
# N, ~  X6 i( u4 G$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
# P6 z3 x1 K% d0 C$ g" d& g% m& L$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
( F) R7 `9 y  Z  u' {启动vapor solonet 节点:
- T; T' }" W8 I3 M$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
5 ~: W" v( ^6 w( z$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining( D! @! J! K1 a& w
3.2 部署HTLC合约(合约的部署命令如下)
- w9 X" k6 S/ @) ^$ Z, } $ swap deployHTLC -h; Y5 v, o' B/ U  r
deploy HTLC contract) H+ F5 V! W3 e$ @- |
Usage:
+ i4 o$ V4 @) ^0 o swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]' u9 J; |' R7 B3 T
Flags:& a( [- K/ a7 D* T+ l2 R
  --amountLocked uint    HTLC contract locked value with amount
# D" \! O# E/ G% x  --assetLocked string   HTLC contract locked value with assetID( h7 f& J. J8 Q( Y1 s+ ^/ I+ Y
  --blockHeight uint     HTLC contract locked value with blockHeight
" I- W2 I0 t  V2 O  --hash string          HTLC contract locked value with hash; B6 U2 z0 F& R1 S( k/ X
-h, --help                 help for deployHTLC
2 X8 Y2 h% `# [. |  --ip string            network address (default "127.0.0.1")
) U3 o# j$ l2 J+ B) \% l  --port string          network port (default "9888"): |4 w( r5 R7 d$ [) n5 \
  --recipient string     HTLC contract paramenter with recipientPublicKey
: [5 k3 r0 ^/ r1 R  --sender string        HTLC contract paramenter with sender PublicKey# I8 Y0 r& `1 Y$ ^+ c! y
  --txFee uint           contract transaction fee (default 40000000)& t/ f9 d! v$ @+ h! A
部署HTLC合约的实例参数如下:( X% `0 R' p2 ^1 f
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 200000000005 H0 w4 L  x; B! E( z
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
! o1 B9 b# v$ Y, Y3.3 调用HTLC合约
! d6 b% A# n+ I8 ~$ swap callHTLC -h
! V3 y; x( V) m) o- A& i5 Z; ]call HTLC contract for asset swapping
0 h1 H3 f( \& X1 `% R4 s1 GUsage:
! ]  b3 I- a7 c5 H3 t; p: d, ~swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
) s2 k( x! N  S5 |Flags:, i& D* }, J' C( m! a/ C: m
-h, --help          help for callHTLC4 P$ u0 L) N% N' G( e7 [
   --ip string     network address (default "127.0.0.1")* H" {$ T, \& ?7 r. Y- h1 B0 g! L
   --port string   network port (default "9888")
: S! [6 Y6 z( B9 r: \: j   --txFee uint    contract transaction fee (default 40000000)
6 R8 ^6 b8 Q; Q+ A  Y3 ?调用HTLC合约的实力化参数如下:
1 C( H/ v# M3 v- _9 m) \$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
& R1 u4 q0 I( X--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
# r8 _# k0 p  M) x7 p  H" `实际的交换过程如下:
, w- O0 n$ Z7 F6 v: ]6 B- t5 q+ T+ l2 B
3.4 取消HTLC合约(命令参数如下)
  L* n7 M3 p& y0 f% p- k& ]3 u+ t0 I$ swap cancelHTLC -h
) R9 ?4 P4 m; y$ I/ R; \cancel HTLC contract for asset swapping6 L0 G+ L9 w7 u0 f' z
Usage:0 s  N1 k' o# r! O: O+ B
swap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]3 n; X8 k* d1 R! n2 C8 y! Q
Flags:
, V' C8 s1 U0 U; Y* I3 W  C( A-h, --help          help for cancelHTLC& T' @6 ]1 d6 K$ D! p& z
  --ip string     network address (default "127.0.0.1")/ y9 N* A- p9 @6 M8 o3 Y' \2 _
  --port string   network port (default "9888")
) `3 ]* T. |# S1 r7 _  --txFee uint    contract transaction fee (default 40000000)
' g) [7 q' X; J- I取消HTLC合约的实例化参数如下:
: L# ~2 E) G! |, m* f' @! N* w$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000! S8 x& F! `+ U' R
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
/ V! Y8 `2 @1 z! S) h* ~' h' v$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd+ I9 {( l2 K) J7 @
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 % T" I* g1 V3 P' Y: ^) ?
示例图如下:
+ K. H$ K  |) @) X
' B* q1 ?6 N' [. |4 T+ Z% T取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。8 I& H- ^1 r# _% ]
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1