最近基於比原鏈上的不一樣資產交換工具shuttle很是搶眼,由於該工具不只能夠實現同一條鏈上的不一樣資產進行交換,還能夠實現不一樣區塊鏈平臺上的多種資產進行交換。該工具奠基了資產在交易的過程當中徹底去中心化,無第三方介入,保證了資產在交換過程當中的安全性和原子性。那咱們來看一下這個工具到底如何使用!node
該工具主要的功能是實現不一樣資產在比原鏈上交換,首先是在比原鏈上不一樣資產進行交換。這個主要使用幣幣交換合約來進行資產的交換。若是是在比原的主側鏈上進行跨鏈資產交換,則使用的是哈希時間鎖合約來完成兩條不一樣鏈上的資產交換。git
下面咱們來看一下操做的具體步驟:github
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle $ cd $GOPATH/src/github.com/shuttle $ make install
Shuttle help 相關命令以下:golang
$ swap -h swap is a commond line client for bytom contract Usage: swap [flags] swap [command] vailable Commands: callHTLC call HTLC contract for asset swapping callTradeoff call tradeoff contract for asset swapping cancelHTLC cancel HTLC contract for asset swapping cancelTradeoff cancel tradeoff contract for asset swapping deployHTLC deploy HTLC contract deployTradeoff deploy tradeoff contract help Help about any command Flags: -h, --help help for swap Use "swap [command] --help" for more information about a command.
若是你想在單一一條鏈上交換比原資產,不管是bytom主鏈仍是vapor側鏈,都直接使用Tradeoff合約能夠實現資產的交換,整個交換流程圖以下:安全
首先咱們啓動bytom節點,爲了測試,你能夠啓動solnet節點:微信
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node $ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining
搭建完測試節點之後,能夠在區塊鏈上建立帳戶,發行資產(issue asset)用來測試app
建立帳戶參考工具
發行資產參考區塊鏈
例如:在bytom主鏈上,帳戶A有200BTC,帳戶B有10個BTM,他們就能夠是用shuttle工具進行交換。測試
####2.1 下面正式部署 tradeoff合約(下面是合約部署相關命令以及相關參數)
$ swap deployTradeoff -h deploy tradeoff contract Usage: swap deployTradeoff <accountID> <password> [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags] Flags: --amountLocked uint tradeoff contract locked value with amount //鎖定資產的數量 --amountRequested uint tradeoff contract paramenter with requested amount //鎖定須要兌換的資產數量 --assetLocked string tradeoff contract locked value with assetID //資產ID --assetRequested string tradeoff contract paramenter with requested assetID //兌換的資產ID --cancelKey string tradeoff contract paramenter with seller pubkey for cancelling the contract //解鎖合約須要用到的pubkey -h, --help help for deployTradeoff --ip string network address (default "127.0.0.1") --port string network port (default "9888") --seller string tradeoff contract paramenter with seller control-program --txFee uint contract transaction fee (default 40000000)
下面是實例化部署合約的過程:
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000 --> contractUTXOID: 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f
合約部署好了之後,2.5 分鐘後,比原鏈上的一個新的區塊被礦工打包後,部署的合約就能夠被認證。
$ swap callTradeoff -h call tradeoff contract for asset swapping Usage: swap callTradeoff <accountID> <password> <buyer-program> <contractUTXOID> [txFee flag] [URL flags(ip and port)] [flags] Flags: -h, --help help for callTradeoff --ip string network address (default "127.0.0.1") --port string network port (default "9888") --txFee uint contract transaction fee (default 40000000)
調用合約實例化參數以下:
$ swap callTradeoff 10CKAD3000A02 12345 00140fdee108543d305308097019ceb5aec3da60ec66 34996b0838108de8c614bc018e8fdbbfc08a47ffbe0fd6d7f41892b90de3999f --> txID: 55e43274d2d92504a903a13e3f6517d63434fc19a2fa0e1fc0a9a5c8c75e8f6c
調用完之後,當交易在新的區塊中被確認,整個資產交換過程就完成,以下圖:
交換完成後,如今帳戶帳戶A有200個BTC,帳戶B有10個BTM。
若是有人想取消tradeoff合約交易,能夠調用該命令取消,以下:
$ swap cancelTradeoff -h cancel tradeoff contract for asset swapping Usage: swap cancelTradeoff <accountID> <password> <redeem-program> <contractUTXOID> [txFee flag] [URL flags(ip and port)] [flags] Flags: -h, --help help for cancelTradeoff --ip string network address (default "127.0.0.1") --port string network port (default "9888") --txFee uint contract transaction fee (default 40000000)
取消tradeoff合約的實例化以下:
$ swap deployTradeoff 10CJPO1HG0A02 12345 --amountLocked 20000000000 --amountRequested 1000000000 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --assetRequested ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --cancelKey 3e5d7d52d334964eef173021ef6a04dc0807ac8c41700fe718f5a80c2109f79e --seller 00145dd7b82556226d563b6e7d573fe61d23bd461c1f --txFee 40000000 --> contractUTXOID: e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5 $ swap cancelTradeoff 10CJPO1HG0A02 12345 00145b0a81adc5c2d68a9967082a09c96e82d62aa058 e898ea907f8586b3211a46b69d0cddd363f8a850f559656570eb6afc6ac382c5 --> txID: 0f75db743196b8b2e514c49d6483dfba9bd5ab8e913a7559ecaea0324977313f
示例圖以下:
上面整個流程就是在同一條鏈上不一樣資產進行交換的整個過程,下面咱們來看一下不一樣鏈上的兩個資產進行交換,假設以bytom和vapor爲例。
你可使用該工具在bytom和vapor上交換資產:
爲了方便測試。你能夠啓動bytom和vapor的solonet節點
啓動bytom solonet 節點:
$ bytomd init --chain_id=solonet --home $HOME/bytom/solonet # init bytom solonet node $ bytomd node --home $HOME/bytom/solonet --mining # launch bytom solonet node and start mining
啓動vapor solonet 節點:
$ vapord init --chain_id=solonet --home $HOME/bytom/vapor-solonet # init vapor solonet node $ vapord node --home $HOME/bytom/vapor-solonet --mining # launch vapor solonet node and start mining
$ swap deployHTLC -h deploy HTLC contract Usage: swap deployHTLC <accountID> <password> [contract flags(paramenters and locked value)] [txFee flag] [URL flags(ip and port)] [flags] Flags: --amountLocked uint HTLC contract locked value with amount --assetLocked string HTLC contract locked value with assetID --blockHeight uint HTLC contract locked value with blockHeight --hash string HTLC contract locked value with hash -h, --help help for deployHTLC --ip string network address (default "127.0.0.1") --port string network port (default "9888") --recipient string HTLC contract paramenter with recipientPublicKey --sender string HTLC contract paramenter with sender PublicKey --txFee uint contract transaction fee (default 40000000)
部署HTLC合約的實例參數以下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000 --> contractUTXOID: e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e
$ swap callHTLC -h call HTLC contract for asset swapping Usage: swap callHTLC <accountID> <password> <buyer-program> <preimage> <contractUTXOID> [txFee flag] [URL flags(ip and port)] [flags] Flags: -h, --help help for callHTLC --ip string network address (default "127.0.0.1") --port string network port (default "9888") --txFee uint contract transaction fee (default 40000000)
調用HTLC合約的實力化參數以下:
$ swap callHTLC 11BB86V300A04 12345 0014230cb75fcfcc70c580ce7f1d21c1e374d27334a8 68656c6c6f e1b104a03f4135b45d1c4c5fabbdca4dd0555653a588b71d790d45c4ffb2c50e --> txID: df57b7906684e3d85adf59073ccbc0a3c5114b165626e9791f3269e9e57c319e
實際的交換過程以下:
$ swap cancelHTLC -h cancel HTLC contract for asset swapping Usage: swap cancelHTLC <accountID> <password> <redeem-program> <contractUTXOID> [txFee flag] [URL flags(ip and port)] [flags] Flags: -h, --help help for cancelHTLC --ip string network address (default "127.0.0.1") --port string network port (default "9888") --txFee uint contract transaction fee (default 40000000)
取消HTLC合約的實例化參數以下:
$ swap deployHTLC 11BB7TC8G0A02 12345 --sender 7262584844d4c14f512d1b6c9838e62c320e1d7887e7185bfea920c72a944e44 --recipient 562013c2f9082f1db52a2571034428921dd6eec8c010c2b2387f5b6125ff4aa7 --blockHeight 1200 --hash 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 --assetLocked bae7e17bb8f5d0cfbfd87a92f3204da082d388d4c9b10e8dcd36b3d0a18ceb3a --amountLocked 20000000000 --> contractUTXOID: 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd $ swap cancelHTLC 11BB7TC8G0A02 12345 001434fec270871c1f3420db85831f59511b2dd2a026 68ed6b948b93544ea135482f1acd93d6b10cdc88f52d44133d264a5ee86b1ebd --> txID: c70a467e94b287d29c6d91a2cb6f8ef3c7ef4dba315d99acf2dc9ff698996270
示例圖以下:
取消HTLC合約之後,a4發起HTLC合約兌換的資產自動返回帳戶。 這些都是a帳戶在bytom上的操做,a5帳戶同時在側鏈上實現相同的操做就能夠了。
到此使用shuttle進行資產交換的流程就已經徹底結束,歡迎你們體驗。若是你在使用過程當中遇到任何問題,加微信:youths_1994 詳細諮詢。