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

最近基于比原链上的不同资产交换工具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合约可以实现资产的交换,整个交换流程图如下:

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)用来测试

创建账户参考

发行资产参考

例如:在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 详细咨询。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容