Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
102 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
5 }! @% z$ b5 S+ d1 _: }; s该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。' a, k% R6 M. E! F  n5 z' a5 {; t3 z
下面我们来看一下操作的具体步骤:) ?3 M$ A2 b- @) a5 Z! e6 h" [0 _
第一步: 首先搭建节点环境, X, b2 q8 h# I+ t' p8 e
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
* ?* g: X9 F' U3 X/ M2 Z1.2 启动并配置好bytom节点,参考:bytom readme.md* E# Y+ Y5 e3 L' q5 D$ `( I! e$ o
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:3 [: N7 g1 w* J7 O, Z8 x: [
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle0 T; B4 t& M1 }8 P! f5 K7 [% N5 b
$ cd $GOPATH/src/github.com/shuttle2 p  k, w9 r0 U; i+ s; M# @6 Y
$ make install1 X2 {, v  A9 ?9 h) o) O) C1 q/ }
Shuttle help 相关命令如下:6 `, t5 O; m# q; u2 W. H/ q6 U
$ swap -h& p) C& I8 }; ~
swap is a commond line client for bytom contract
4 k4 C( O, o8 e% K Usage:+ V% \" l/ s! d# p- n
   swap [flags]* ^: H2 k8 |1 J+ f
   swap [command]" ^# B' _3 H+ u8 |% p8 b) ^
vailable Commands:
0 r2 w) X! s: U8 L5 j: m% Y( t  callHTLC       call HTLC contract for asset swapping7 o2 w: T/ i/ U( {* ~7 ]. w
  callTradeoff   call tradeoff contract for asset swapping
  R; _/ f9 M) `% m# L0 K$ n  cancelHTLC     cancel HTLC contract for asset swapping
- I$ _0 u; G: s( y6 C$ V  cancelTradeoff cancel tradeoff contract for asset swapping( j- G6 _/ Y5 i8 J
  deployHTLC     deploy HTLC contract
( ~; u* [$ J% Z0 l* k2 Y  deployTradeoff deploy tradeoff contract  c2 X2 c8 Y; d& B# H1 d$ g
  help           Help about any command
' P2 l% f' y. {Flags:  \0 l" F1 \; n5 {' ?; I% y
  -h, --help   help for swap# t3 W2 J/ B: S# e4 B* D
Use "swap [command] --help" for more information about a command.
" F! a8 C' t, i. _' u1 U8 @第二步:同一条链上进行跨链资产交换3 ]4 x" ~. j, f. I1 d3 M" v
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
5 k  G$ I% U" \) p5 C# o: P" h  }" s
首先我们启动bytom节点,为了测试,你可以启动solnet节点:+ _& c6 L% R% ^. q7 L
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
) r! c/ c3 K* M9 a1 M2 x9 C1 r$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
; \) S5 A, B8 d! j9 G4 _& S搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
) g3 }2 }/ j# d5 s$ N4 N$ E创建账户参考2 g7 d1 M# U3 u* x+ j
发行资产参考
+ x+ ~# C+ Z1 }$ o; D; M例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。6 C' A7 c" Q+ f) Q. M' r: x; t7 Z. B' t
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
5 c- n$ Z9 \+ }, {+ V' o3 m$ swap deployTradeoff -h6 f# X- t9 o6 p# q& `
deploy tradeoff contract2 }4 n, p9 g$ O
Usage:
( D5 t/ _; I+ W# ~swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
0 |& @8 _. U5 @. Y1 AFlags:
" _' g5 q& a6 {1 E4 |" Z6 _9 S5 G     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
- n7 o! [6 E  H; G5 ^     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量6 K+ k% S" _0 g
     --assetLocked string      tradeoff contract locked value with assetID //资产ID
/ z! C7 A* Z) `     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
8 N. t/ H" x# V% J$ O0 I+ r     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
8 G0 o1 A* d$ r! d -h, --help                    help for deployTradeoff4 u+ ]0 [) R5 F& _) A
     --ip string               network address (default "127.0.0.1"); a, h7 c# p9 p' t* H) _% u
     --port string             network port (default "9888")& _# m1 k  v5 g. b8 j
     --seller string           tradeoff contract paramenter with seller control-program" d& B" z# V7 ]" X& a9 ]+ b
     --txFee uint              contract transaction fee (default 40000000)
/ |' D* Y& |( A0 C7 I下面是实例化部署合约的过程:
. U/ b# j( u! e7 U) C& A$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
' [: L0 x' {$ \, l0 q8 R  V--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
+ T  y- v. s# x) ^合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
7 A. ^1 m( z6 r: W" L# M( q2.2 调用tradeoff合约(下面是调用合约的命令)
# ^( M, }* x) Y! z0 c8 m) K& U$ swap callTradeoff -h
! J! @* F$ S0 h' e- B  i9 C- K6 Ycall tradeoff contract for asset swapping
- T3 ~! {& i* Y( X' SUsage:
" F' h( h1 w* I" e# P( T% X: \swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]" M% E+ i9 D! U/ v; Z
Flags:
0 h8 ?5 J" `( g( e  V-h, --help          help for callTradeoff1 u2 t( O& g* E6 N8 X7 E
  --ip string     network address (default "127.0.0.1")
' y9 N/ X* Z: U  --port string   network port (default "9888")3 t3 g5 \2 g% F$ Q4 `! M9 m: g1 w; c  U
  --txFee uint    contract transaction fee (default 40000000)
* {# P2 v9 h3 ^$ {调用合约实例化参数如下:
! s6 K7 S2 c8 T( k4 x $ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
  L+ o& e& [# q- T+ U/ p8 o5 N2 m --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c% U) \8 {( ^* _# v% V
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
/ d5 t# F( t/ u! V! L, ^% h% k8 Q& m7 T
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。: n  u3 k3 p4 \+ \, V! L0 w, K
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)6 _3 V4 V/ p- P) O, T. \0 L
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
$ ~" q1 T0 ?0 ?. P5 N. M. x$ swap cancelTradeoff -h
6 U/ h3 n$ M' }/ e# Y5 c- L9 k( @! Rcancel tradeoff contract for asset swapping" G4 @* U' C& j+ W% t
Usage:* ^! U( s& u* \7 G& K6 x
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]. u: C% |/ S6 U% h0 s& G" b6 G
Flags:
- J" j/ R$ h* a/ u* \-h, --help          help for cancelTradeoff$ T, V, Q/ C1 s" M
   --ip string     network address (default "127.0.0.1"). d( \9 b2 Y3 ~) c% U1 C  }, H
   --port string   network port (default "9888")
% Q! R! n# Y+ M/ [, K   --txFee uint    contract transaction fee (default 40000000)# M* M, t8 d5 }+ |7 o
取消tradeoff合约的实例化如下:0 c9 o% w6 V8 `% X. f
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000% }+ D; Y. V5 q7 Q1 f5 A* K
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
# V4 |# W& g# ?9 A( q9 e1 A' P $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  
, v' T9 o. D1 t  s) E1 n9 U --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f2 o! _$ H6 a) T
示例图如下:
$ ?! X: w& g7 r) g" c
4 a4 g9 T- M; ?% s. Q上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
6 Y. U# i/ _0 T) _% P第三步:不同链上资产进行交换  t9 X. v& Y' i6 W  U/ C: ~
你可以使用该工具在bytom和vapor上交换资产:
* c- \/ e% A* @7 ?( k3 W
" m2 ?0 W& s; G) e3.1 搭建并启动bytom和vapor节点
" n7 X0 V  q! |1 B) S为了方便测试。你可以启动bytom和vapor的solonet节点
( d' R4 p' b2 t3 |' |' s9 x启动bytom solonet 节点:1 E9 {7 W' q  L' j* x6 W
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
2 y% R* ^7 o  j8 S' b! S$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining# V7 r& J6 E" `& B7 R- `2 B: `
启动vapor solonet 节点:
, I; X* {" N4 p& D! `  |, y) H$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
( I2 u( z# E8 ]; Q$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining; S- E, ]% F3 J4 Y
3.2 部署HTLC合约(合约的部署命令如下): c* p% ]% b- G/ C% [( _
$ swap deployHTLC -h
* @% k5 ]: z/ k: \; D8 y deploy HTLC contract
4 h! M8 f! l. V Usage:
) o* L6 P/ N5 ?2 c8 ]% H& P swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]: ^& J: l. H/ W! _. }; \
Flags:
; k) H2 ]* W, O, k+ w  --amountLocked uint    HTLC contract locked value with amount4 B0 u: `* q! V1 b1 b/ w
  --assetLocked string   HTLC contract locked value with assetID! ~( p" Z1 `6 ]+ W8 |, a
  --blockHeight uint     HTLC contract locked value with blockHeight
3 H- `- v, H+ `5 A' ?2 w$ l9 M  --hash string          HTLC contract locked value with hash0 ^  Q' F' i8 l) E9 F/ O* s( b9 y/ P* p
-h, --help                 help for deployHTLC9 N$ }+ C8 Q# h- ^+ t' j
  --ip string            network address (default "127.0.0.1")! ^) y# O' G1 t* M5 U: T
  --port string          network port (default "9888")8 ~/ L# |: F; i: E, E
  --recipient string     HTLC contract paramenter with recipientPublicKey
3 W+ q; N3 B  y7 `  --sender string        HTLC contract paramenter with sender PublicKey
) e3 d4 j% `% l& z, ~' m  --txFee uint           contract transaction fee (default 40000000)% G# a; I5 b% `# ?7 Z+ L+ r" {
部署HTLC合约的实例参数如下:
" p$ a  S% c' l8 ?5 \ $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
$ F( w+ m4 i3 `; P8 H --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e, w3 D$ ?3 r, w# {& N
3.3 调用HTLC合约5 \3 g. |3 u2 C  e, V0 s, Q
$ swap callHTLC -h* l: m- C. S! v2 i) x
call HTLC contract for asset swapping
0 W+ S& i% e: o; S3 eUsage:# D  d' o. K. S4 k* |. v
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]' H4 L3 I% V9 Z! t8 X3 \
Flags:
3 E6 p# Q( X1 n0 ], e. f3 z: w -h, --help          help for callHTLC- [' Z9 D% z  i4 R; p6 }
   --ip string     network address (default "127.0.0.1")& }5 Y6 r& J' e9 K# ~
   --port string   network port (default "9888")9 ?0 g% G* r# ?- w# \
   --txFee uint    contract transaction fee (default 40000000)
5 Q0 L6 F2 G# E! t( M调用HTLC合约的实力化参数如下:- ^" S6 N1 Z3 Q6 L
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
% n; b% `6 S4 m- }--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e" _! F/ T7 c; N; c) b$ w& n
实际的交换过程如下:
7 `0 _& j, z. }) M! j
, M" B8 B1 _8 n! U3.4 取消HTLC合约(命令参数如下)
: j" Q: A" V# o$ swap cancelHTLC -h
1 e0 L. N; Y4 P, }0 e7 R; Ycancel HTLC contract for asset swapping
7 k$ f) D$ L( `' m) \/ tUsage:+ R# D0 N4 v7 J( b. ?" p  e
swap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]
& e/ O* @6 K# Q! q" f8 u! j( z6 cFlags:4 F- [* c/ p* i) f' n
-h, --help          help for cancelHTLC+ g, p( |( |. h) H7 }) `( x) }% T
  --ip string     network address (default "127.0.0.1")  P3 `6 D% w# f# u
  --port string   network port (default "9888")) j+ z( ]/ d1 w6 @/ S+ j
  --txFee uint    contract transaction fee (default 40000000)
; J$ f3 h" e( Q: H9 b  M取消HTLC合约的实例化参数如下:% I1 S7 H) D# ?1 n0 J" r/ J# M
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 200000000009 A: Y, |* W$ d: I3 ^
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
$ a1 I( x! H% [$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd: Z* ^! G: D; Q3 y0 u; t$ X. ~; j, Y
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270   ]4 \* `: n! C0 U6 N6 G# `; l
示例图如下:& W+ q( n+ r. l. Y' x

' z5 n/ G1 _( k* }" o9 T! Y取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。" K( t5 `: s; u# O& j& a
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1