Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蕙质兰心283
187 0 0
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
- u* e' a" Z% V3 U, m# x/ E9 `该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。% Z' \0 ~& `+ [5 H, ?6 P9 l4 `4 t
下面我们来看一下操作的具体步骤:% f- ]/ b) F$ C0 n/ ~
第一步: 首先搭建节点环境( r" K. w$ q) u2 K' i2 n8 a9 D
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
2 p* w! T2 E- n1.2 启动并配置好bytom节点,参考:bytom readme.md
, k* i# W  [' o9 j% |) K$ g( v1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
8 U1 }) T5 B: F& K! ]* @ $ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle& F7 ?- ?3 ?; d. ~! o7 B' t+ F
$ cd $GOPATH/src/github.com/shuttle" d8 o  ?6 A0 \9 {7 k: F
$ make install
5 {" S% W0 A4 S- J2 \Shuttle help 相关命令如下:) c6 S8 G- L! T' v/ a. |
$ swap -h
. P4 d+ d" G. n' B$ t6 s( } swap is a commond line client for bytom contract
- _1 R' n* J4 T  u Usage:
# S4 |3 R* m* `( }   swap [flags]. F. t( ^: h: P+ O, P
   swap [command]
7 Q2 }( o" u: ^' H: [# w% Fvailable Commands:
# |3 ?7 C# L1 O: V3 ^* U! o. {  callHTLC       call HTLC contract for asset swapping, r2 o, M2 ?# a7 A: {9 |
  callTradeoff   call tradeoff contract for asset swapping
5 `; E) N1 ]5 U# ]  cancelHTLC     cancel HTLC contract for asset swapping8 y: [3 B* U5 d4 y0 z; J& `8 d
  cancelTradeoff cancel tradeoff contract for asset swapping
' E' b) }) |% C. v$ }  deployHTLC     deploy HTLC contract
" M5 m$ k2 `( Y, b+ u( N8 a  deployTradeoff deploy tradeoff contract" b  E  C0 h2 Z6 p. ^: h& N
  help           Help about any command
+ n% R* O, |4 i* kFlags:# D& {' O/ b1 s
  -h, --help   help for swap
6 [; w0 x1 V% T! m8 \; C$ k* IUse "swap [command] --help" for more information about a command.% `' W" S+ N2 [) F& q+ W
第二步:同一条链上进行跨链资产交换
- F1 q+ X' x% }/ O如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
! i8 r- q9 Y, l& Q9 q  m+ u1 S) n" u* @  i3 K
首先我们启动bytom节点,为了测试,你可以启动solnet节点:
5 k. I- R8 {: @4 Q$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
! G. F# s4 c1 K9 q& o$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
. f% a, z4 z* y, v搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试& B& C) X5 d2 v7 }2 u) N8 ?
创建账户参考
+ @# u6 M% D0 w发行资产参考" O- N( V0 b' d2 i- K1 B2 K  J
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
" G; `/ l" S4 }# E# I3 q- S' u; q. s####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
1 ~/ r( O# H' c, L& Q# |! d5 _$ swap deployTradeoff -h3 A+ z/ D6 m- A0 R
deploy tradeoff contract. p: S7 s- d& u) x. {
Usage:2 S% Z- \2 r% E% h! Z
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]
1 @% s$ k3 @' C8 k& i8 l$ r) J- Z9 RFlags:
& ]5 |3 ?1 _/ v$ g' v/ w     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量# @! U$ N$ E+ Q7 Y5 N7 L) f1 L/ e
     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量  d* ]# B* @8 [7 m: Q- r0 J
     --assetLocked string      tradeoff contract locked value with assetID //资产ID# l  V& g1 }  g; R# G  A. R9 a
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
$ k8 Q7 b- A9 l' g. u     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey) Z8 h1 R) A) \% O6 V
-h, --help                    help for deployTradeoff. D) j/ x7 a2 S3 I: V* [5 z
     --ip string               network address (default "127.0.0.1")
4 ?/ g5 F1 @6 q     --port string             network port (default "9888")  W. O5 U: Z! T8 w
     --seller string           tradeoff contract paramenter with seller control-program* @# b$ F5 e, W  M/ @# O( B
     --txFee uint              contract transaction fee (default 40000000)
5 @$ }* j) ^" b; _1 E: |) @下面是实例化部署合约的过程:: r' p1 s. t1 `% l/ ^! r9 H, ?
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000007 t$ P6 |  \1 x9 a
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
& n/ F$ q. u" n3 P6 f+ j1 x/ z* v合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
. W1 x0 V" o! x, W& o, S2.2 调用tradeoff合约(下面是调用合约的命令)
  g6 h, r  W9 S. D  O" I$ swap callTradeoff -h+ m8 v$ w+ k  |3 w
call tradeoff contract for asset swapping! v0 `" r5 J4 F; h
Usage:; w7 S2 J. a( g& b/ D
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
/ Q1 `) E& t3 y2 _1 HFlags:
1 D3 `# U8 F& b- w8 ^: v! Z' Z# S-h, --help          help for callTradeoff4 L. {$ U- e6 |# Q
  --ip string     network address (default "127.0.0.1")( Y. K  G$ @% R2 J  D1 W
  --port string   network port (default "9888")/ Y1 k) P3 ^% I+ W% K8 f, {
  --txFee uint    contract transaction fee (default 40000000), b3 y  }& A$ k! @- `; e+ z! H. B
调用合约实例化参数如下:$ ?% z7 J' ?6 W
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f  s( L& k5 o# o( L3 q' b
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c7 B: w& b2 g8 r( I8 u
调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
2 l& c0 ?( Z) V9 L" {# q. `  Z; R" f0 j# G- ~
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。) i, Z# h" v6 Q8 D+ P
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)8 |  k, O& X! F' T- g3 r
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
/ {4 V' [6 f7 d+ J$ swap cancelTradeoff -h
8 h9 P' n$ @& O) Dcancel tradeoff contract for asset swapping
* C  C1 q; m; ?- _Usage:
9 U: F4 T9 S% O% w4 }swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]1 p. _2 Y" _8 o
Flags:* M/ ?) y' R7 u  O6 \
-h, --help          help for cancelTradeoff+ x0 e9 ?, q5 O, f* P( H
   --ip string     network address (default "127.0.0.1"): ?1 W& d* g1 |# g9 T+ T) k. G
   --port string   network port (default "9888")- {2 A6 Z- G9 r/ B3 `
   --txFee uint    contract transaction fee (default 40000000)& Q  L5 R/ G5 e
取消tradeoff合约的实例化如下:/ e5 Y4 f% A, }
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000& g9 o0 n! B- D
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c59 H* K7 v: R$ ]; t7 @- H0 z* |- P, h
$ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  2 w+ p& x! j9 ]' E9 a1 @
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f6 C! U* ~( g8 `: Y
示例图如下:
) A! j/ m- @' h+ m9 B# D! E0 ]
( k* f9 o' B/ E% Q$ {. y4 ^上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。" `/ N( S, ?# l  J0 \$ f- \
第三步:不同链上资产进行交换3 v3 P6 [9 t; C/ Y0 @: z% j
你可以使用该工具在bytom和vapor上交换资产:
! n- U* t& N* H- s
9 R: \7 P  L7 t! `3 S3.1 搭建并启动bytom和vapor节点/ ]1 p9 ]9 \8 b' f0 y3 j
为了方便测试。你可以启动bytom和vapor的solonet节点
+ a& h* s, M# T启动bytom solonet 节点:
) p& [' ^* I' b, [) p' s$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
6 T! v1 }8 K' T( t9 [5 g$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining
# s7 A% s3 b) Y9 c7 S启动vapor solonet 节点:
. E7 K: y- S. b7 x% A- q$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node
. v5 Q% O: \& D& d$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining
& g8 D- k+ @; Y0 i1 e9 B+ w3 m9 L  A3.2 部署HTLC合约(合约的部署命令如下)
" ^, J2 F5 {, x/ R $ swap deployHTLC -h# x3 D( b) O% W! H& X; K
deploy HTLC contract
- Z; k7 `/ `) Y! G+ p; b$ Q+ x% W Usage:
  h5 T' s9 O. t2 q. }1 |1 q swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]" Y0 t8 r+ p6 K) s, L
Flags:2 t! D0 I/ `9 A: _: {- b; \1 P
  --amountLocked uint    HTLC contract locked value with amount
1 o0 s, Y, f1 ^. ]4 t: R- e  --assetLocked string   HTLC contract locked value with assetID
6 U0 w. M! g. q- [% N) A0 U  --blockHeight uint     HTLC contract locked value with blockHeight+ |3 h( a/ g# K
  --hash string          HTLC contract locked value with hash8 S3 U  P9 I0 [
-h, --help                 help for deployHTLC  \3 S4 K0 C! \: |3 j
  --ip string            network address (default "127.0.0.1")
; ~/ U5 Y- y/ j3 m  N  --port string          network port (default "9888")" s5 q, h1 `- z+ e
  --recipient string     HTLC contract paramenter with recipientPublicKey
  A, s0 c7 `: x: k: P0 V" x  --sender string        HTLC contract paramenter with sender PublicKey7 x* k/ W* P$ U0 e  E& D  L3 Y6 f
  --txFee uint           contract transaction fee (default 40000000)
+ v2 }/ E- p8 U9 k, \% H部署HTLC合约的实例参数如下:: C4 R3 Q& v) P! }$ {
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000( V; j* o( i7 g3 l
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
6 O& v, v1 {! D3.3 调用HTLC合约0 A" _4 {3 n( \3 h( _* E
$ swap callHTLC -h. [8 N9 k* G# e' r5 P' y% C# i' C
call HTLC contract for asset swapping
, I7 `! |# Y% \- lUsage:9 M9 K7 L& ]5 s5 ~( H6 x% M( [
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]* ], a& H' W$ m
Flags:
* d5 x9 C9 k( x& ?! Q -h, --help          help for callHTLC8 Q3 o  d: T9 V6 k0 Q% _
   --ip string     network address (default "127.0.0.1")( k& ?3 s0 `  u4 f& S# B. o
   --port string   network port (default "9888")
  @3 F9 F- k3 _7 ^! z/ _& i   --txFee uint    contract transaction fee (default 40000000)
2 J6 c* c5 ~  E# r' @$ o% [4 s调用HTLC合约的实力化参数如下:
( g! s4 M: m3 `2 i$ O$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
) ^# Z/ [9 V* V8 S* R* x2 T--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e8 |" z, Q! H9 C3 \2 `9 e
实际的交换过程如下:
, D* g* ^2 Q1 q0 H3 u3 J- W* r/ C; w" E: j) f
3.4 取消HTLC合约(命令参数如下)
4 x& z5 d0 ?  v: |$ swap cancelHTLC -h
4 x, u5 h( X9 ^$ `cancel HTLC contract for asset swapping
$ a1 S# ~& a; nUsage:
7 [, N! T% }  h# Uswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]
2 x9 j# Q$ y3 f) ~7 y8 F: c8 h6 jFlags:
( w+ h; j7 f0 k+ ?-h, --help          help for cancelHTLC
) v) D2 L% |3 `; l' _- V5 {  --ip string     network address (default "127.0.0.1")
7 A3 t3 Y1 a. q) U; P  --port string   network port (default "9888")
1 W) V5 ~9 q6 V$ m4 T2 k0 T% m# ~( {8 s  --txFee uint    contract transaction fee (default 40000000)
% |, [$ Y2 n2 A* P* D* m9 ^. C取消HTLC合约的实例化参数如下:
' H3 {5 _" {7 R/ |2 k& R0 X; B$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000% N) d. y* Z, p# r/ S0 O
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
- t, m2 M, W% J; `$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd
8 }2 d; v- ?3 h1 K8 r( X5 Z--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 - [. N1 z7 W% E
示例图如下:
% O2 |) T# l/ b
" n( a; K# i4 d% l取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。
2 u. _0 P( s% R$ d这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1