Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
6 D0 s! g: f4 T该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
/ F- h1 z/ C2 q# X下面我们来看一下操作的具体步骤:
( h! W. S6 M& X+ A: m第一步: 首先搭建节点环境
4 h9 Z' j4 G! F9 F1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
9 v4 C% Q5 v/ _. K9 Y# o% W1.2 启动并配置好bytom节点,参考:bytom readme.md6 \0 N" ]  f& e- U9 v% k
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
9 |9 T9 j  i  K) Q& S8 S5 ]; l $ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
; K2 T5 K7 `' w3 R2 B $ cd $GOPATH/src/github.com/shuttle% U# {+ ]6 T. h: B) a* ^/ K
$ make install: t! s  [2 ]+ q4 m
Shuttle help 相关命令如下:
3 ~  f7 Z- c( Q) K) M: t. R5 ? $ swap -h7 D7 c9 u- g  ?$ C. \, w- f# D9 ^
swap is a commond line client for bytom contract; [; b& l  U2 e8 z" V& M$ X9 {0 A
Usage:& R% N! P) n* f& w' v9 n1 D% r
   swap [flags]
' \# m. J' f1 x; v. _" w0 C! L( g   swap [command]% F4 A' i' X4 h1 s
vailable Commands:, [9 a4 K9 y7 y
  callHTLC       call HTLC contract for asset swapping
" D% o0 |8 o# q% P- T! o# w' h' D2 A  callTradeoff   call tradeoff contract for asset swapping
/ o" x3 i$ ?! w3 b- D; O  cancelHTLC     cancel HTLC contract for asset swapping
8 d! R0 C2 Q1 `+ Z1 P2 F) n  cancelTradeoff cancel tradeoff contract for asset swapping
" d; W4 h% Z8 i3 o. K  deployHTLC     deploy HTLC contract
& `0 t4 e: E0 L/ C; Z  deployTradeoff deploy tradeoff contract5 o" {( n0 U& Z! {' l
  help           Help about any command
6 i2 i* L( S4 z0 z% Z/ oFlags:# I7 l% P$ n7 m  a  Q
  -h, --help   help for swap7 B; q5 E+ O8 V  |3 ^. E
Use "swap [command] --help" for more information about a command.- X2 ]* o5 w# c! h- p# ~
第二步:同一条链上进行跨链资产交换, W$ w" |5 H, P$ c: C
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:+ D* h2 y0 u, l5 U5 n
/ f; p- D) z6 E# m
首先我们启动bytom节点,为了测试,你可以启动solnet节点:, a9 F4 W' \+ H7 E8 T( @/ H1 `# k
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node3 R( {9 s% a# }; |: D( X. K: b* g. R
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
9 V# T2 ?; s. u$ P搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
& [& N  e0 T  p0 Y6 R; y! O创建账户参考1 w: _1 S" n7 ^  f1 {& {
发行资产参考* W" h# @! U6 \3 k
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。3 U1 L8 E! J) U. a1 s( s
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)" ^) g8 O' g4 ]6 {& N2 e
$ swap deployTradeoff -h) T* E- w+ Z2 L+ z4 K
deploy tradeoff contract% {4 v% S  J+ K- ^4 I% T& T
Usage:8 I" Z! Z8 L% _2 ?$ p+ U( N# Z( W
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
  a4 S. S0 R! K) l$ I+ K! d% QFlags:
8 c4 E. ~  H' [" x5 C7 O     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
) ~2 d0 I8 @; G     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量
! O) ?1 Q) w' ^+ b# o     --assetLocked string      tradeoff contract locked value with assetID //资产ID! \$ I+ z) [) A
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID$ i: D9 T) p+ |3 x$ M
     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
8 K. ~5 W# d+ s. I% d) P1 A6 r- Z* a! I -h, --help                    help for deployTradeoff
* o' i4 m& Q% t7 ?7 u/ {     --ip string               network address (default "127.0.0.1")4 V2 }# J- n# ~7 W. K
     --port string             network port (default "9888")
3 K) _1 A4 C; W( T3 K     --seller string           tradeoff contract paramenter with seller control-program9 |! z9 L8 B( Q& u$ F1 f5 b; Y
     --txFee uint              contract transaction fee (default 40000000)
7 a  E4 E) {7 Y7 f+ l下面是实例化部署合约的过程:
. G1 O1 k8 E0 _$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
" {0 E5 d1 g. X- m- |, q--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f7 [' @7 B' O! M
合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
+ A8 T: o5 A' j4 J! p2.2 调用tradeoff合约(下面是调用合约的命令)- C# M( Y: ?( l$ m2 D
$ swap callTradeoff -h
, R! B8 E5 \, B$ m7 D; v- ~, ?call tradeoff contract for asset swapping
& H& Z& ]: b2 O/ C8 L3 u0 \Usage:7 ~  b) l8 ]! t; f9 d
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
+ z# x8 O; y& ?* ~( A% zFlags:# p( R* e% a3 a- U- a) p
-h, --help          help for callTradeoff) P0 j% \/ t! B' L# q, o4 t" e
  --ip string     network address (default "127.0.0.1")" ?; B, \- M% {. v, v& l: {
  --port string   network port (default "9888")- Q6 o# {' X" S8 i4 y/ V( H
  --txFee uint    contract transaction fee (default 40000000)
1 ]8 F& M" H7 ]2 W$ I调用合约实例化参数如下:
5 D7 M4 r; B3 n. ` $ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f  u1 V; V# E6 _2 H4 u# v
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c& a- s$ x3 _3 t; l" w7 |
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
; b* D  p4 M1 u5 Y+ Z! `9 o% |3 [2 ]9 }4 {
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。6 [& ^3 z6 c- A; [. o9 T* H6 f# U
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)5 L5 Z! I# M0 G9 q! v9 F
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:8 }- P5 u7 v0 f2 `% a
$ swap cancelTradeoff -h& z& E% e. x) d2 [
cancel tradeoff contract for asset swapping
$ m* E9 y1 H7 a9 n  a2 yUsage:
9 ?+ L* \2 D& gswap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
, D& Y0 @# }8 ^* J5 aFlags:# r  L# j4 G- Z+ P, f8 b9 R
-h, --help          help for cancelTradeoff
0 U8 V" p. r& o5 z6 ^   --ip string     network address (default "127.0.0.1")
7 J% X# r0 A1 J   --port string   network port (default "9888")8 x- x2 Y1 D3 Q2 ~4 _, `
   --txFee uint    contract transaction fee (default 40000000)4 U8 g7 U$ M, G1 g1 ]& T
取消tradeoff合约的实例化如下:9 w  P# y3 A6 h/ o* y% Y
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000002 ^2 i8 R$ N# }. I
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5$ A+ a: Z1 o' H( a8 x7 e
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  
$ [) k1 W3 E) b- _ --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f/ ]3 \( a8 s# W: o# V6 u, E4 |8 a
示例图如下:( X- [6 |1 M; x& J' Q
! N6 N4 z, D7 z) h8 C$ K6 b
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
- _/ k- N( Z, s- U5 X( a: m第三步:不同链上资产进行交换
, r( J6 `8 w, F4 [- a. \你可以使用该工具在bytom和vapor上交换资产:
; X) ]$ h8 T! g  E# I6 A
* t, P3 h* G$ T) w2 e) h% C3.1 搭建并启动bytom和vapor节点
7 ?5 I; H$ o) T, |" ~! Y为了方便测试。你可以启动bytom和vapor的solonet节点
! u' a) I/ u: A3 o/ l/ {启动bytom solonet 节点:" c. W- }) j8 {% m
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
4 Y$ u$ e( e  L6 a7 h; T( z$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
6 H4 F; o! R7 X# w% \7 o启动vapor solonet 节点:) I6 K+ R9 T, o/ X; z  P
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
% ]% c$ T0 X  c$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining
* v# p6 ~% q9 X( m3.2 部署HTLC合约(合约的部署命令如下)& w) e7 B& Y) n9 O) m
$ swap deployHTLC -h5 S6 Q# N- w6 t$ O5 L" Z; k+ [
deploy HTLC contract
' n6 e: c4 @& R Usage:
8 D$ |" J/ S/ P# e& o  t swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]; V2 |4 `6 m9 `4 \3 t8 A
Flags:% ?, y. e7 g9 F- _$ x+ u
  --amountLocked uint    HTLC contract locked value with amount
% N$ r5 [+ o1 M8 P, C  --assetLocked string   HTLC contract locked value with assetID
; A" D8 u& |$ t" w1 R6 ?$ p  --blockHeight uint     HTLC contract locked value with blockHeight3 [  a( `. [) V) u8 G6 A, l
  --hash string          HTLC contract locked value with hash
) X& w" W: _8 F5 L( f-h, --help                 help for deployHTLC, f' j& U3 ^1 F% T) r3 F8 x- Q
  --ip string            network address (default "127.0.0.1"), e. R& z% C# L, D/ R2 A
  --port string          network port (default "9888")% u" X) W6 a6 X$ U: y
  --recipient string     HTLC contract paramenter with recipientPublicKey* E! M. _' U2 u
  --sender string        HTLC contract paramenter with sender PublicKey7 n( D$ \" _) T; t: T! K
  --txFee uint           contract transaction fee (default 40000000)0 J% W2 h% H8 y7 T6 y
部署HTLC合约的实例参数如下:
! G4 K, W9 u7 ~! f9 ? $ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000, L# s' V- u, m, Y
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e+ f0 H5 S5 C/ j! n; Q- J3 z- _6 y
3.3 调用HTLC合约; o; v  y7 g" ~+ B
$ swap callHTLC -h9 F$ h2 O) n5 k3 N, h! g. X
call HTLC contract for asset swapping( `8 y; V5 M% g$ L  S* J2 {7 H
Usage:9 l( k9 h3 O. j& t0 H) p+ s$ M
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]7 }* |6 Q# h6 k
Flags:7 M# k, S+ K) ^4 M; J5 O
-h, --help          help for callHTLC" w( r) M5 d- H. O8 z
   --ip string     network address (default "127.0.0.1")
. a# R* n6 h6 d   --port string   network port (default "9888")
" o  \6 R/ y8 d: k& P   --txFee uint    contract transaction fee (default 40000000)) I( T5 t2 n/ F, G1 L
调用HTLC合约的实力化参数如下:
1 z1 G5 ?3 B+ j: q$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
0 v/ N- \5 y! D% C  \  `3 p--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
' ~2 l2 j- ]. x1 n9 g+ V- _实际的交换过程如下:
& H/ P! y0 @7 r! \" z9 r) o$ e, z* a9 l' f8 {) m; W
3.4 取消HTLC合约(命令参数如下)
+ X3 }1 n1 X& Q: V# \$ swap cancelHTLC -h" `8 l5 t  [, d! Q9 U
cancel HTLC contract for asset swapping$ o" w* @% F5 I7 i" V/ p
Usage:
8 u5 S4 R/ H, B$ t6 U; A. C- Mswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]
4 X+ ]% P/ \  g6 M' kFlags:
( g& a  e: @; T& K/ W-h, --help          help for cancelHTLC
2 t( z& x- e. ?$ I( A7 b  --ip string     network address (default "127.0.0.1")$ J4 u# L7 v) q. w& G
  --port string   network port (default "9888")
1 _3 w& H3 ?. L- x$ P4 z2 E& p  --txFee uint    contract transaction fee (default 40000000)) O* @' b& R. C' o, y  g
取消HTLC合约的实例化参数如下:
, W, C# l4 D  ?' o$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
1 C9 S4 Q5 e4 |/ T& F# A--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
; `0 u" l( I2 J: `( l, o( \$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd8 {% l2 _* x- N; f3 e
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270
/ }1 }0 G* Z8 T4 p) \1 s示例图如下:% b5 ^  Y* s  V7 {) _  [& y) B% h5 h

2 e6 F8 K" R: m( n$ @8 f取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。: L" m  H& n( c7 }
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1