最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用!
该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。
下面我们来看一下操作的具体步骤:
第一步: 首先搭建节点环境
1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录
1.2 启动并配置好bytom节点,参考:bytom readme.md
1.3 源码构建:Shuttle仍处于测试阶段,因此存储库代码将经常更改。您可以直接从源代码构建工具。参考下面的命令:
$ git clone https://github.com/Bytom/shuttle.git $GOPATH/src/github.com/shuttle $ cd $GOPATH/src/github.com/shuttle $ make install
Shuttle help 相关命令如下:
$ 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)用来测试
例如:在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 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就可以被认证。
2.2 调用tradeoff合约(下面是调用合约的命令)
$ 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。
2.3 取消tradeoff合约(下面是取消tradeoff合约的相关命令)
如果有人想取消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上交换资产:
3.1 搭建并启动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
3.2 部署HTLC合约(合约的部署命令如下)
$ 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
3.3 调用HTLC合约
$ 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
实际的交换过程如下:
3.4 取消HTLC合约(命令参数如下)
$ 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 详细咨询。