V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Bytom
V2EX  ›  区块链

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

  •  
  •   Bytom · 2019-09-26 14:38:09 +08:00 · 1453 次点击
    这是一个创建于 1880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近基于比原链上的不同资产交换工具 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 详细咨询。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2694 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:29 · PVG 23:29 · LAX 07:29 · JFK 10:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.