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

最近基于比原链上的不一样资产交换工具shuttle很是抢眼,由于该工具不只能够实现同一条链上的不一样资产进行交换,还能够实现不一样区块链平台上的多种资产进行交换。该工具奠基了资产在交易的过程当中彻底去中心化,无第三方介入,保证了资产在交换过程当中的安全性和原子性。那咱们来看一下这个工具到底如何使用!node

该工具主要的功能是实现不一样资产在比原链上交换,首先是在比原链上不一样资产进行交换。这个主要使用币币交换合约来进行资产的交换。若是是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不一样链上的资产交换。git

下面咱们来看一下操做的具体步骤:github

第一步: 首先搭建节点环境

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 相关命令以下: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合约能够实现资产的交换,整个交换流程图以下:安全

1.png

首先咱们启动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 分钟后,比原链上的一个新的区块被矿工打包后,部署的合约就能够被认证。

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

调用完之后,当交易在新的区块中被确认,整个资产交换过程就完成,以下图:

3.png

交换完成后,如今帐户帐户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

示例图以下:

tradeoff-cancel.png

上面整个流程就是在同一条链上不一样资产进行交换的整个过程,下面咱们来看一下不一样链上的两个资产进行交换,假设以bytom和vapor为例。

第三步:不一样链上资产进行交换

你可使用该工具在bytom和vapor上交换资产:

2.png

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

实际的交换过程以下: HTLC.png

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-cancel.png

取消HTLC合约之后,a4发起HTLC合约兑换的资产自动返回帐户。 这些都是a帐户在bytom上的操做,a5帐户同时在侧链上实现相同的操做就能够了。

到此使用shuttle进行资产交换的流程就已经彻底结束,欢迎你们体验。若是你在使用过程当中遇到任何问题,加微信:youths_1994 详细咨询。

相关文章
相关标签/搜索