Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!# l" r. y" [- `5 I3 |
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。( `" s' f* O" T8 S
下面我们来看一下操作的具体步骤:$ h' f: e2 g! Y
第一步: 首先搭建节点环境
* _& l0 z+ y: U  k1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
9 \/ f' x" j; s8 u+ P+ o7 m1.2 启动并配置好bytom节点,参考:bytom readme.md
% {; W: q7 ^3 h! u8 `) x1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:* V+ p; m' @/ W. S/ c* r$ ?
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle
5 B. e# F  A, g- J' O $ cd $GOPATH/src/github.com/shuttle
# Z2 N" F  h+ {/ V5 v0 h $ make install1 o, K! i4 Q! R* E* F
Shuttle help 相关命令如下:
/ g9 ^; _4 J8 c7 h: _$ m $ swap -h
+ y% i+ F" d, c- W- m swap is a commond line client for bytom contract
0 x  Q* T' Q, T9 z& g% ?6 t! l" G Usage:/ _1 A' w. C9 U& p8 R# f
   swap [flags]
! p& Z2 d6 o4 x0 J* S   swap [command]$ T# ^# J2 [  X! m: Z! E
vailable Commands:$ N' G$ [, r) ^" q: b8 u
  callHTLC       call HTLC contract for asset swapping3 R9 r, h1 s9 ]
  callTradeoff   call tradeoff contract for asset swapping  f$ _. M" Z1 U5 @' H8 z1 k  A
  cancelHTLC     cancel HTLC contract for asset swapping: E) U' R7 s+ W
  cancelTradeoff cancel tradeoff contract for asset swapping9 t8 W" t( s3 l! L# ~1 q- ^
  deployHTLC     deploy HTLC contract
8 |4 F9 {7 H# Q$ a  deployTradeoff deploy tradeoff contract
3 `% V! r% g# ~% z1 K  help           Help about any command
+ f: Q/ l; u( m: q/ aFlags:
: I# ?4 j. g. O, k& R5 \& [3 U  -h, --help   help for swap. v. r8 f8 K' O1 g! _! I$ I( @
Use "swap [command] --help" for more information about a command.: q! P0 k: c/ e5 F: s2 F
第二步:同一条链上进行跨链资产交换# \4 v$ o) Q- `! o7 o) u
如果你想在单一一条链上交换比原资产,不论是bytom主链还是vapor侧链,都直接使用Tradeoff合约可以实现资产的交换,整个交换流程图如下:
; H( Y& t. w3 I7 X: l
/ K$ \1 u" `. w* [/ D) i4 j首先我们启动bytom节点,为了测试,你可以启动solnet节点:  z4 H. g2 Q6 K# n! H  I; D
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node! L/ c- [, m5 w2 Q
$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining7 {# m. v; P  A( w' {; |
搭建完测试节点以后,可以在区块链上创建账户,发行资产(issue asset)用来测试
$ @+ ~7 Q% K' s) m' K% C创建账户参考9 V1 B$ o1 U4 L
发行资产参考
! f/ f6 _# N% z( {6 j3 r% O6 Z例如:在bytom主链上,账户A有200BTC,账户B有10个BTM,他们就可以是用shuttle工具进行交换。
' y2 Y1 V( {; Z' V) P. U- |####2.1 下面正式部署 tradeoff合约(下面是合约部署相关命令以及相关参数): ]6 w$ Q! L* Q- a
$ swap deployTradeoff -h
' @1 Q! ?! G5 a& ]! t; x1 Vdeploy tradeoff contract, F1 j9 Y& i; T' E7 |/ m/ u3 ^
Usage:4 f% n' G" p7 h. p+ ]9 s4 B
swap deployTradeoff   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]1 G+ D: V3 y; h/ Q( m5 Q, V( X
Flags:
% x# A9 {8 Z% G+ s     --amountLocked uint       tradeoff contract locked value with amount //锁定资产的数量
* f7 g( I: z* h8 [     --amountRequested uint    tradeoff contract paramenter with requested amount  //锁定需要兑换的资产数量6 V' `" S: _, V' o! F$ z
     --assetLocked string      tradeoff contract locked value with assetID //资产ID( J, J( X) _1 g5 Y5 M% v$ O
     --assetRequested string   tradeoff contract paramenter with requested assetID //兑换的资产ID
  t: N; \4 E; b, l8 X9 H% X     --cancelKey string        tradeoff contract paramenter with seller pubkey for cancelling the contract //解锁合约需要用到的pubkey
" n: W: a0 O- q$ z0 Y -h, --help                    help for deployTradeoff. c  O' C) X" c( \. w8 K
     --ip string               network address (default "127.0.0.1")4 I6 k4 ^' {/ U" |
     --port string             network port (default "9888")
0 |$ r( m& r5 @4 c6 G7 e     --seller string           tradeoff contract paramenter with seller control-program
) n, Q, E% ~# k2 {) x$ n     --txFee uint              contract transaction fee (default 40000000)
' y0 O! [% ~6 [# f: \8 c下面是实例化部署合约的过程:  [( c9 Y! g* w6 G0 G; j: F
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000
5 N# O/ {0 Q5 S3 `5 ^0 e) w--> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
5 |; I* k7 H* n% D合约部署好了以后,2.5 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。4 G  H! S6 x/ t% |* s( a! p5 S, S
2.2 调用tradeoff合约(下面是调用合约的命令)
, s- m& |" j1 x. w' l4 v$ swap callTradeoff -h
5 u/ k, E  D6 v: f# j2 H( fcall tradeoff contract for asset swapping7 A' Y$ v- \8 U8 v; }
Usage:
# t9 Q+ n0 ^2 Z/ h/ U7 U% K2 V. pswap callTradeoff     [txFee flag] [URL flags(ip and port)] [flags]
" P6 ]) V5 y# g4 W/ V" rFlags:
9 I) H6 ~0 u+ [  t+ _-h, --help          help for callTradeoff
  {6 f! q9 T. p2 F  --ip string     network address (default "127.0.0.1")
0 _! t# a* p0 z; a  --port string   network port (default "9888")
6 Z2 I. u& r$ D$ l1 @# I  --txFee uint    contract transaction fee (default 40000000)
4 [( @7 L- Y( W0 O/ _1 M调用合约实例化参数如下:, S5 F. l( z: L' e
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
' y3 a+ g  e- l! F! [. h --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
9 V8 A% K/ N) K: v调用完以后,当交易在新的区块中被确认,整个资产交换过程就完成,如下图:
* y( k( o% ?" n- H; o9 W8 O& n
7 D8 v* s% |' `交换完成后,现在账户账户A有200个BTC,账户B有10个BTM。/ h- Q9 ^% z) ~- M
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
7 S2 s, X2 G) v如果有人想取消tradeoff合约交易,可以调用该命令取消,如下:
/ ^3 q1 K8 I( w- ^% Z( i$ swap cancelTradeoff -h8 A$ _/ t4 x% w  Q1 Y
cancel tradeoff contract for asset swapping
( A4 l3 y8 H& p) o; s! }* N, DUsage:! {: Z7 L' V9 f" X( y" C
swap cancelTradeoff     [txFee flag] [URL flags(ip and port)] [flags]8 ~% `9 \2 m8 Y6 H0 x, }1 d
Flags:4 K1 B. @: }, k0 b
-h, --help          help for cancelTradeoff
5 Z4 S6 T3 t7 {   --ip string     network address (default "127.0.0.1")
2 a* N3 a! c! m# s9 o$ \# b   --port string   network port (default "9888")0 Q- m' m+ Z; Z+ B8 k
   --txFee uint    contract transaction fee (default 40000000)1 r$ t; d* e9 @
取消tradeoff合约的实例化如下:
, R. L1 I- M  f! c% c6 l5 k $ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 400000001 ?" \& O4 S9 _
  --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5
* Z  M  ]: ^# b $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058  e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5  
7 f/ \# A- _$ j --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f3 A* H* }2 t$ K( J. s  o
示例图如下:
& ]4 P# P# r3 s  ^4 h, ?# ^) _/ X1 R8 \  d% }2 N4 K2 U
上面整个流程就是在同一条链上不同资产进行交换的整个过程,下面我们来看一下不同链上的两个资产进行交换,假设以bytom和vapor为例。
6 o' W+ k( c7 {% j第三步:不同链上资产进行交换
# ^9 o3 r$ _  D你可以使用该工具在bytom和vapor上交换资产:  M1 A% y4 C) V+ N2 W
9 O( ^: M8 \+ Q" ]
3.1 搭建并启动bytom和vapor节点# A' _- q, t! o- s/ v( q
为了方便测试。你可以启动bytom和vapor的solonet节点
2 M. D9 {& O' A0 k1 m/ U% K, D: Z启动bytom solonet 节点:! E6 G4 \- l8 Z
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom   solonet node
9 ^2 X' e  c! E- c# |& h, U$ bytomd node --home $HOME/bytom/solonet --mining           # launch bytom solonet node and start mining7 e; E  K$ ^" E
启动vapor solonet 节点:
4 K( m; h- d* c; G' {$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node, B3 f: |1 |& _5 ~4 h4 G. P* L& H$ Q: O3 P
$ vapord node --home $HOME/bytom/vapor-solonet --mining           # launch vapor solonet node and start mining$ ~/ u$ L" ]0 F: ]) D! D( k
3.2 部署HTLC合约(合约的部署命令如下)
; \" P3 y7 z( S. o; U1 n $ swap deployHTLC -h
4 I1 K( ~- p: ]" w4 F deploy HTLC contract2 {5 B, Z3 N* e5 P' s
Usage:
& F# I3 a$ W9 u7 z swap deployHTLC   [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags]! E: v# K9 N' [0 ?' ], E+ b
Flags:
5 v  T( _: {  o  --amountLocked uint    HTLC contract locked value with amount
% V# R: ~$ f/ q, R& T- b  --assetLocked string   HTLC contract locked value with assetID, |/ v6 ]) U* Q& E) C- T% V5 }
  --blockHeight uint     HTLC contract locked value with blockHeight8 a2 x9 ~7 q* b9 k+ q! A
  --hash string          HTLC contract locked value with hash" E: ]  i/ N2 b- a, j$ j( f
-h, --help                 help for deployHTLC8 g, ^  R, h! ^* q1 H  A
  --ip string            network address (default "127.0.0.1")* y3 f# q; Q* I! Y
  --port string          network port (default "9888")
% R0 _# J, S) u  --recipient string     HTLC contract paramenter with recipientPublicKey( L5 R& U9 u; l7 H
  --sender string        HTLC contract paramenter with sender PublicKey
2 u4 w& s9 f' g4 N2 m! N  --txFee uint           contract transaction fee (default 40000000)
9 y+ c7 H  h4 L, Y# G9 p部署HTLC合约的实例参数如下:1 N3 c& f0 L: L, p
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
* V% |. s$ f1 X --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e( A6 C' |  ^7 v* X
3.3 调用HTLC合约
* E' E: W: N% Z% |# `+ A& \$ swap callHTLC -h
- o" u4 v; g$ U" z' g$ F% d4 _, kcall HTLC contract for asset swapping
/ c, l& ^  A5 ^7 XUsage:2 \0 h; h* l7 L( D3 F! E
swap callHTLC      [txFee flag] [URL flags(ip and port)] [flags]; d, U' H& q, a# q- R; f
Flags:
8 \" o& R0 ~7 t1 p -h, --help          help for callHTLC
& f4 s$ _* ^3 a/ N; f   --ip string     network address (default "127.0.0.1")3 s& p* K0 z) J/ [: o3 b
   --port string   network port (default "9888"). n; H& Q" O: S" y2 P% `) W
   --txFee uint    contract transaction fee (default 40000000)# w* w4 c  ^8 Y8 S( M1 D# I% R
调用HTLC合约的实力化参数如下:
) Q1 a- ~/ W& I- F  x2 a( b$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
/ v! w/ D8 d) q% e' Y# t$ J7 m--> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e2 o$ a, N  j3 k1 t
实际的交换过程如下:1 g8 J- g* S; [( ?+ _0 b/ ?' h' d

  h8 W) A4 U& s2 z* {6 @5 a) Z+ s3.4 取消HTLC合约(命令参数如下)7 W. i6 s& c" J3 E2 _* B% E
$ swap cancelHTLC -h
$ j9 @+ C( m, P+ _$ Vcancel HTLC contract for asset swapping
: L5 k# ?5 T7 ^0 E2 K5 S' qUsage:# ^  n* w- o$ W% e/ Y9 A
swap cancelHTLC     [txFee flag] [URL flags(ip and port)] [flags]1 O# @# }/ ~4 w$ R( S& y4 L$ Z
Flags:1 H2 ?( R9 Q; a. l, z9 C# M
-h, --help          help for cancelHTLC- W! l3 e. K! O! v5 f- {
  --ip string     network address (default "127.0.0.1")
3 t6 K3 q+ m; A% Q0 f& Z* x; [1 i  --port string   network port (default "9888")6 N0 R" P) R9 s; }" _
  --txFee uint    contract transaction fee (default 40000000); C3 z3 I4 q* o4 b3 S
取消HTLC合约的实例化参数如下:
1 n8 i+ ]- W. I' O8 s- m1 l6 X$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000
& p, a! \9 K5 Q/ {# n) I--> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd0 U# A2 G1 B( ^. b- P* V
$ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd! M- c1 A" k8 z( R2 U
--> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270 0 l$ m* ]$ [4 Q) z
示例图如下:
7 a: ~) D0 G% k! J% v' G2 m  |  n: V! R3 W
取消HTLC合约以后,a4发起HTLC合约兑换的资产自动返回账户。/ S# W  P+ Z) _: D
这些都是a账户在bytom上的操作,a5账户同时在侧链上实现相同的操作就可以了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蕙质兰心283 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1