Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
, }. h2 |7 I1 }6 N该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
7 m. M8 U7 C) A- O3 L6 ^7 }0 p下面我们来看一下操作的具体步骤:
4 p6 |- k. o" j第一步: 首先搭建节点环境
1 w& t+ d! v, u1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录  c) s! ]. e& v+ Q5 \* Y0 A: h
1.2 启动并配置好bytom节点,参考:bytom readme.md+ M8 E; E$ P5 h! \; O- G
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
6 T; t2 N+ \+ s# w, v/ n, _ $ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
: I1 O7 N! C& f. ]" B $ cd $GOPATH/src/github.com/shuttle3 _. f7 ]0 P* o! N* o& c' }
$ make install
( w2 M- s/ P6 o' `9 QShuttle help 相关命令如下:+ C) ?' i+ c$ N2 R7 u) ?9 m
$ swap -h
7 o: W! b$ W. ?( t5 A swap is a commond line client for bytom contract
8 R, [: W' t5 z0 _0 w) E4 a  c Usage:( ]$ H8 t1 G+ `) h2 r
   swap [flags]" b. W4 w% e* D
   swap [command]
# I, [* W- v5 L2 d  Q/ tvailable Commands:
+ x+ a) z# I9 N7 d  callHTLC       call HTLC contract for asset swapping
5 q9 W8 o3 r6 ^$ @6 S3 o1 l  |: \  callTradeoff   call tradeoff contract for asset swapping, B. I2 H9 A7 k6 ]. O9 d
  cancelHTLC     cancel HTLC contract for asset swapping& ~0 v# ~  b# f2 ^9 H6 A8 z
  cancelTradeoff cancel tradeoff contract for asset swapping
7 ]9 g0 a7 h2 Q  deployHTLC     deploy HTLC contract" I% P; U3 V  `- U: K. w0 u. Y
  deployTradeoff deploy tradeoff contract
% y0 d, J, m! V5 H9 _. n" C  help           Help about any command( {4 Z2 m5 |5 {, F3 x5 s
Flags:( F, u# }% z4 n4 i* G2 f8 K
  -h, --help   help for swap
# V% u1 K% L& ?$ W$ AUse "swap [command] --help" for more information about a command.
* I3 n& C3 {  H) v* G4 W, [1 m第二步:同一条链上进行跨链资产交换
' \7 A: o! s- v3 t. f; b2 |如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
3 y) s& e  B- g; F6 d; C+ k: Q$ a2 U! S8 X' W1 n7 b) k  d$ z% J; h1 J
首先我们启动bytom节点,为了测试,你可以启动solnet节点:' ?* a# C& }4 t4 {! V
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node
& ~7 t/ A, ]# a7 l" ~5 I9 r& A# q$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining% G6 ~* e. F! _7 o7 @1 }! I
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
. J& N8 M0 m5 i$ P$ j( ?6 ?创建账户参考
; `. W2 a/ ^, b# C$ f0 v8 R发行资产参考, |) \. x6 j# M+ W$ d
例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。% `( L6 D# ]( R9 T: K8 D5 g
####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数)
. L. d- B" B. n7 t% I. n7 p$ swap deployTradeoff -h5 X9 t( Y; ~; _! M' K6 n) ?
deploy tradeoff contract- F1 v" x) o4 H/ U5 E
Usage:
* A/ u9 H1 ], i' K% \- H6 iswap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]4 x& G9 L, i% J/ ?. H6 L# d
Flags:$ J0 t: E4 y3 z% M# @6 f9 K
     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
9 k9 |- U! Z* G5 r2 T     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量
! i  D, H" x* J) A% M1 ~     --assetLocked string      tradeoff contract locked value with assetID //资产ID& |/ [2 q# \- r, x
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
: e0 W, o6 h2 B* w     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
  Y& U5 {, ^( ^% c1 T -h, --help                    help for deployTradeoff
; H9 E; e# x# u+ m" K4 e5 Y- X     --ip string               network address (default "127.0.0.1")
4 z  d+ u5 m& i4 w3 `5 U/ G     --port string             network port (default "9888")9 _/ b1 f6 M: U& H2 f( ]
     --seller string           tradeoff contract paramenter with seller control-program) s8 \8 p9 Q: g" Y" \( r
     --txFee uint              contract transaction fee (default 40000000)# l% e$ k2 Z( N* g2 B* H3 G$ ?' L4 Q
下面是实例化部署合约的过程:
8 ~6 ]5 k6 K2 |3 R; w$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000009 ?2 l+ F5 w6 c9 X2 r- Z
--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
7 o3 r; D% N8 `* Q合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。7 G, S8 t! ]& k/ P
2.2 调用tradeoff合约(下面是调用合约的命令), h# J9 G) e1 N3 a! J7 T4 n
$ swap callTradeoff -h
8 Q) D7 T7 i9 j5 x$ D! d6 tcall tradeoff contract for asset swapping
8 }! W  }/ C9 x) V& c! @) E  H6 L! [' pUsage:3 u. f/ u  l- a5 a
swap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
! `( Z5 G+ p- U3 I3 d/ DFlags:! [. @1 Q8 S# z) a
-h, --help          help for callTradeoff! r$ @2 G8 X% I1 Y
  --ip string     network address (default "127.0.0.1")
  F1 q- {$ t" ~. A. g4 f2 M( U% V  --port string   network port (default "9888")
% E& l/ S# S6 f# N2 z  --txFee uint    contract transaction fee (default 40000000)' e) f4 A  m) p( V0 V" ], W; @
调用合约实例化参数如下:
  g, Z! d1 V1 K9 o& ~ $ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f5 S" k: A& U8 T% _
--> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
- w: b* `( G4 i. y9 I  }+ n" z4 }, m调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
# R6 k4 \1 O$ L: s' p( |) L% X7 |" c* D) x" b0 V& e8 Q
交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。
) B% O9 \/ F& K; x" A2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)& r2 N1 u& D) C. x
如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:8 ~8 b4 V& c: W- C$ _, O
$ swap cancelTradeoff -h. \  ~6 K8 y( h& f1 R! L  E) V* ]
cancel tradeoff contract for asset swapping
* ]% Z7 u0 j; |% n2 z" rUsage:
4 {- ^( V9 p( H  Oswap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
# m1 X" t- n0 T! IFlags:- M% W- e* w8 f) K) P. [
-h, --help          help for cancelTradeoff
1 v; P  J( m& z, q4 b   --ip string     network address (default "127.0.0.1")
+ t5 h" w0 F+ ]( U: X8 M$ Y6 |3 e0 ~   --port string   network port (default "9888")1 w4 m9 I0 u2 e7 ^% G% g% l% w5 o
   --txFee uint    contract transaction fee (default 40000000)
  }' K0 T3 Q* s$ w/ \1 u, N取消tradeoff合约的实例化如下:
  Z( |& k, a, X9 P; p- h $ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000# g; B1 M% m9 G0 ]# O* t
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
, Y0 Z/ W; S. f5 J) j" \5 Q* s $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  0 }3 ?8 A  Q7 ?6 E! P% _
--> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f
7 j3 s8 B  I: ?0 f2 i: K' S6 N示例图如下:
3 Y9 B+ \+ r, E% E( x/ Z. i( i
; e; `# ]+ i: @% }, t+ w3 F* m2 v上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。. J) t; J8 K" v$ u* ]; h# u& q% u
第三步:不同链上资产进行交换
) g  ~4 i# p2 j: u你可以使用该工具在bytom和vapor上交换资产:/ ~2 `1 i5 r6 b* \% c
3 X4 U! D# H; V( G
3.1 搭建并启动bytom和vapor节点
0 l( Z- H: p( b; }  j( k为了方便测试。你可以启动bytom和vapor的solonet节点% c3 O- X% r# Q! b
启动bytom solonet 节点:  c) L, k9 {3 F4 a$ O4 f5 L! z: t
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node/ I) E' S1 I4 a/ Y8 I% h' {
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining! t' e; P& U+ l1 F! j5 l4 n. c5 L0 W
启动vapor solonet 节点:7 e8 Z/ C0 v& Z' K
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node. O- q5 g! i6 H7 o* x) |7 V
$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining& A% P5 R2 y+ f/ S4 y; Q  R
3.2 部署HTLC合约(合约的部署命令如下)
( E5 a/ \; v$ k# q( q6 X$ B $ swap deployHTLC -h
9 ?5 e& h- S- A9 _ deploy HTLC contract
- F7 s4 e$ B# C; v# w% V Usage:
$ M( p9 U5 ~0 R; X swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags], v! b0 t  p% y3 C. G, y' F3 I
Flags:! _" e0 Z3 l3 t: N( M" A
  --amountLocked uint    HTLC contract locked value with amount9 ^. h8 y7 T9 ?0 u& h
  --assetLocked string   HTLC contract locked value with assetID
* g) l* X/ r/ V# s6 g0 w+ D# o  --blockHeight uint     HTLC contract locked value with blockHeight4 X; w+ V& g1 X! a9 S3 v
  --hash string          HTLC contract locked value with hash. b* N* W: b: m. O, C
-h, --help                 help for deployHTLC
! g6 P1 {5 y) x& Z9 v1 h  --ip string            network address (default "127.0.0.1")
9 n( Y5 D+ M/ D1 y3 `  --port string          network port (default "9888")! h0 h8 n! U. B% u6 o  z
  --recipient string     HTLC contract paramenter with recipientPublicKey# |+ i1 m4 ~+ [1 e$ I: U+ [" W; {7 S: E
  --sender string        HTLC contract paramenter with sender PublicKey
: j( n9 b* |2 E4 I+ q  --txFee uint           contract transaction fee (default 40000000)
* s$ ], v" ?) f' Q6 {" Z3 j& F; A部署HTLC合约的实例参数如下:, E3 t1 s% V+ P9 w
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000& t/ i9 z9 A, L
--> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e, q. r7 I2 J7 A" p; a
3.3 调用HTLC合约$ X- Q5 V' \: W1 x# T) U: O
$ swap callHTLC -h+ Y6 M7 Q% l1 g
call HTLC contract for asset swapping
( [- p1 K: n! e& [& U% t% zUsage:5 s; i$ e0 ~+ ]0 H
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]
  L2 O8 T% h9 b5 x' ?, pFlags:
- p3 u1 O# ^7 x% ^ -h, --help          help for callHTLC: X( O, [$ Y) z* ^" e# ~: R2 M
   --ip string     network address (default "127.0.0.1")3 V) _' N6 J0 }4 E% S2 t$ A% _
   --port string   network port (default "9888")
2 e3 F. A( d/ q- d   --txFee uint    contract transaction fee (default 40000000)
8 J1 |; T1 C" I8 ?( z# Z2 J调用HTLC合约的实力化参数如下:, g# O4 y: k( Q$ S
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
" m+ x9 b4 S; I& r: p, T--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e+ L) C- U7 w& U$ J4 u% `
实际的交换过程如下:) ~. z" r9 }6 T7 V7 j( E

4 T4 P+ \! H9 b& b3.4 取消HTLC合约(命令参数如下)7 \; S" ]3 N" p- l  I% p
$ swap cancelHTLC -h
# D- Q: ^- s6 C. gcancel HTLC contract for asset swapping
+ q7 w& M0 G1 MUsage:
. T! T. ]: Y1 N  T) J: U3 ~9 Rswap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]3 J: q. t/ A; h9 r" S
Flags:  `6 q3 O  ^; D5 y, W3 N6 @. H& h
-h, --help          help for cancelHTLC% _8 A# E. W6 o, G, H5 b) T3 n
  --ip string     network address (default "127.0.0.1")
- O7 @7 s6 i4 o  --port string   network port (default "9888")
9 L5 s# R& i; ?6 `6 C; [  --txFee uint    contract transaction fee (default 40000000)" P& I- J8 i9 Q7 E( A& T& s/ y% V
取消HTLC合约的实例化参数如下:
: r' P; j6 t; Q  Y0 O+ d$ M6 A$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000! q) G9 {5 N) u+ ~
--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd8 x4 a$ c( z; A* q0 H: u3 [7 R9 b
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd/ [0 P$ B4 v$ n4 v
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270
: W: A! F8 T( [0 C, l示例图如下:
; ~8 {$ P, @# v3 G  f- _  n2 Q% v2 N# X
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。0 v  ]$ n, R. l7 R0 W) X6 i& j
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1