快速体验

我们提供一个Demo帮助用户快速体验并理解WeCross的原理。Demo搭建了一个WeCross跨链网络,连接FISCO BCOS和Hyperledger Fabric区块链。用户可通过WeCross控制台,对不同的链上资源进行操作。

../../_images/demo.png

搭建 Demo

  • 下载

若下载较慢,可选择更多下载方式

  1. cd ~
  2. # 下载,生成demo文件夹
  3. bash <(curl -sL https://github.com/WeBankFinTech/WeCross/releases/download/resources/download_demo.sh)
  • 部署
  1. cd demo
  2. # 运行部署脚本,耗时10-30分钟左右
  3. bash build.sh # 若出错,可用 bash clear.sh 清理后重试

部署成功后会输出Demo的网络架构,FISCO BCOS和Fabric通过各自的WeCross Router相连。(输入Y,回车,进入WeCross控制台)

  1. [INFO] Success! WeCross demo network is running. Framework:
  2.  
  3. FISCO BCOS Fabric
  4. (4node pbft) (first-network)
  5. (HelloWeCross.sol) (abac.go)
  6. | |
  7. | |
  8. WeCross Router <----------> WeCross Router
  9. (127.0.0.1-8250-25500) (127.0.0.1-8251-25501)
  10. |
  11. |
  12. WeCross Console
  13.  
  14. Start console? [Y/n]

操作跨链资源

查看资源

进入控制台,用listResources命令查看WeCross跨连网络中的所有资源。可看到有两个资源:

  • payment.bcos.HelloWeCross
  • payment.fabric.abac
    • 对应于Fabric链上的abac.go合约
  1. [WeCross]> listResources
  2. path: payment.bcos.HelloWeCross, type: BCOS2.0, distance: 0
  3. path: payment.fabric.abac, type: Fabric1.4, distance: 1
  4. total: 2

查看账户

listAccounts命令查看WeCross Router上已存在的账户,操作资源时用相应账户进行操作。

  1. [WeCross]> listAccounts
  2. name: fabric_user1, type: Fabric1.4
  3. name: fabric_default_account, type: Fabric1.4
  4. name: bcos_user1, type: BCOS2.0
  5. name: bcos_default_account, type: BCOS2.0
  6. total: 4

操作资源:payment.bcos.HelloWeCross

  • 读资源
    • 命令:call path 账户名 接口名 [参数列表]
    • 示例:call payment.bcos.HelloWeCross bcos_user1 get
  1. # 调用HelloWeCross合约中的get接口
  2. [WeCross]> call payment.bcos.HelloWeCross bcos_user1 get
  3. Result: [Talk is cheap, Show me the code]
  • 写资源
    • 命令:sendTransaction path 账户名 接口名 [参数列表]
    • 示例:sendTransaction payment.bcos.HelloWeCross bcos_user1 set Tom
  1. # 调用HelloWeCross合约中的set接口
  2. [WeCross]> sendTransaction payment.bcos.HelloWeCross bcos_user1 set Tom
  3. Txhash : 0x21a412a1eb5239f2da9d40d09d11ce0107a5d82d113f1ecb315f2aa5bd3cc0cd
  4. BlockNum: 2
  5. Result : [Tom] // 将Tom给set进去
  6.  
  7. [WeCross]> call payment.bcos.HelloWeCross bcos_user1 get
  8. Result: [Tom] // 再次get,Tom已set

操作资源:payment.fabric.abac

跨链资源是对各个不同链上资源的统一和抽象,因此操作的命令是保持一致的。

  • 读资源
  1. # 调用abac合约中的query接口
  2. [WeCross]> call payment.fabric.abac fabric_user1 query a
  3. Result: [90] // 初次query,a的值为90
  • 写资源
  1. # 调用abac合约中的invoke接口
  2. [WeCross]> sendTransaction payment.fabric.abac fabric_user1 invoke a b 10
  3. Txhash : db44b064c54d4dc97f01cdcd013cae219f7849c329f38ee102853344d8f0004d
  4. BlockNum: 5
  5. Result : []
  6.  
  7. [WeCross]> call payment.fabric.abac fabric_user1 query a
  8. Result: [80] // 再次query,a的值变成80
  9.  
  10. # 退出WeCross控制台
  11. [WeCross]> quit

WeCross Console是基于WeCross Java SDK开发的跨链应用。搭建好跨链网络后,可基于WeCross Java SDK开发更多的跨链应用,通过统一的接口对各种链上的资源进行操作。

跨链转账

WeCross基于哈希时间锁合约实现了异构链之间资产的原子互换,如下图所示:

../../_images/htlc_sample.png

配置哈希时间锁合约

可通过脚本htlc_config.sh完成相关配置,并体验跨链转账。

  1. # 请确保demo已搭建完毕,并在demo根目录执行,耗时5分钟左右
  2. bash htlc_config.sh

跨链转账涉及两条链、两个用户、四个账户,两条链上的资产转出者各自通过WeCross控制台创建一个转账提案,之后router会自动完成跨链转账。

创建转账提案

跨链转账需在跨链的两端都提交转账提案,提交后,router自动实现跨链转账。

  • BCOS链资产转出者提交提案

BCOS链连的是router-8250,启动与该router连接的控制台。

  1. cd ~/demo/WeCross-Console
  2. bash start.sh
  3. # 先查看接收方余额
  4. [WeCross]> call payment.bcos.htlc bcos_sender balanceOf 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf
  5. Result: [0]
  6. # 创建转账提案
  7. [WeCross]> newHTLCTransferProposal payment.bcos.htlc bcos_sender bea2dfec011d830a86d0fbeeb383e622b576bb2c15287b1a86aacdba0a387e11 9dda9a5e175a919ee98ff0198927b0a765ef96cf917144b589bb8e510e04843c true 0x55f934bcbe1e9aef8337f5551142a442fdde781c 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf 700 2000010000 [email protected] [email protected] 500 2000000000
  8. # 输出
  9. Txhash: a0c48eb7d1ca3a01ddf3563aeb6a1829f23dd0d778e7de2ce22406d1e84ba00f
  10. BlockNum: 6
  11. Result: create a htlc transfer proposal successfully
  12. # 退出当前控制台
  13. [WeCross]> quit
  • Fabric链资产转出者提交提案

BCOS链连的是router-8251,启动与该router连接的控制台。

  1. cd ~/demo/WeCross-Console-8251
  2. bash start.sh
  3. # 先查看接收方余额
  4. [WeCross]> call payment.fabric.htlc fabric_admin balanceOf [email protected]
  5. Result: [0]
  6. # 创建转账提案
  7. [WeCross]> newHTLCTransferProposal payment.fabric.htlc fabric_admin bea2dfec011d830a86d0fbeeb383e622b576bb2c15287b1a86aacdba0a387e11 null false 0x55f934bcbe1e9aef8337f5551142a442fdde781c 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf 700 2000010000 [email protected] [email protected] 500 2000000000
  8. # 输出
  9. Txhash: 0x40ae8e2e284de813f8b071e0261e627ddc4d91e365e63f222638db9b1a70d05a
  10. BlockNum: 7
  11. Result: create a htlc transfer proposal successfully
  12. # 退出当前控制台
  13. [WeCross]> quit

跨链资产转移

当两个资产转出者都创建完提案后,router开始执行调度,并完成跨链转账。一次跨链转账存在5-25s的交易时延,主要取决于两条链以及机器的性能。

查询转账结果

在各自的WeCross控制台查询资产是否到账。

  • 查询BCOS链上资产接收者余额
  1. cd ~/demo/WeCross-Console
  2. bash start.sh
  3.  
  4. [WeCross]> call payment.bcos.htlc bcos_sender balanceOf 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf
  5. Result: [700]
  6.  
  7. # 退出当前控制台
  8. [WeCross]> quit
  • 查询Fabric链上资产接收者余额
  1. cd ~/demo/WeCross-Console-8251
  2. bash start.sh
  3.  
  4. [WeCross]> call payment.fabric.htlc fabric_admin balanceOf [email protected]
  5. Result: [500]
  6.  
  7. # 退出当前控制台
  8. [WeCross]> quit

清理 Demo

为了不影响手动组网章节的体验,可将搭建的Demo清理掉。

  1. cd ~/demo/
  2. bash clear.sh

至此,恭喜你,快速体验完成!可进入手动组网章节深入了解更多细节。