WeCross部署方案

WeCross部署方案

环境要求

硬件

WeCross负责管理多个Stub并与多条链通讯,同时作为Web Server提供RPC调用服务,为了能保证服务的稳定性,尽量使用推荐配置。

配置 最低配置 推荐配置
CPU 1.5GHz 2.4GHz
内存 4GB 8GB
核心 4核 8核
带宽 2Mb 10Mb

支持的平台

  • Ubuntu 16.04及以上
  • CentOS 7.2及以上
  • macOS 10.14及以上

软件依赖

WeCross作为Java项目,需要安装Java环境包括:

  • JDK1.8.0_251以上

目前已经覆盖测试的JDK版本:OracleJDK 1.8.0_251,OracleJDK 1.8.0_271,OracleJDK 14,OracleJDK 15,OpenJDK 1.8.0_282,OpenJDK 14,OpenJDK 15

  • Gradle 5.0及以上
  • MySQL 5.6及以上

WeCross提供了多种脚本帮助用户快速体验,这些脚本依赖openssl, curl, expect,使用下面的指令安装。

# Ubuntu
sudo apt-get install -y openssl curl expect tree fontconfig

# CentOS
sudo yum install -y openssl curl expect tree

# macOS
brew install openssl curl expect tree md5sha1sum

部署流程

手动组网教程以~/wecross-networks/目录下为例进行:

# 创建手动组网的操作目录
mkdir -p ~/wecross-networks && cd ~/wecross-networks

基础组件部署

—部署WeCross基础组件,包括跨链路由、账户服务、控制台、网页管理台

进入操作目录:

cd ~/wecross-networks

下载WeCross

下载WeCross,用WeCross中的工具生成跨链路由,并启动跨链路由。

WeCross中包含了生成跨链路由的工具,执行以下命令进行下载(提供三种下载方式,可根据网络环境选择合适的方式进行下载),程序下载至~/wecross-networks/WeCross/中。

方式1:命令下载

GitHub下载方式:

bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_wecross.sh)
Gitee下载方式:

bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_wecross.sh)

部署跨链路由

本例将构建两个跨链路由。首先创建一个ipfile配置文件,将需要构建的两个跨链路由信息(ip:rpc_port:p2p_port)按行分隔,保存到文件中。

:请确保机器的825025500端口没有被占用。

cd ~/wecross-networks
vim ipfile

# 在文件中键入以下内容
127.0.0.1:8250:25500

生成好ipfile文件后,使用脚本build_wecross.sh生成两个跨链路由。

bash ./WeCross/build_wecross.sh -n payment -o routers-payment -f ipfile
.. note::
    - -n 指定跨链分区标识符(zone id),跨链分区通过zone id进行区分,可以理解为业务名称。(调用链码时需要,建议双方提前沟通)
    - -o 指定输出的目录,并在该目录下生成一个跨链路由。
    - -f 指定需要生成的WeCross跨链路由的列表,包括ip地址,rpc端口,p2p端口,生成后的router已完成互联配置。
    
# 成功输出如下信息
[INFO] Create routers-payment/127.0.0.1-8250-25500 successfully
[INFO] All completed. WeCross routers are generated in: routers-payment/

在routers-payment目录下生成了两个跨链路由。

tree routers-payment/ -L 1
routers-payment/
├── 127.0.0.1-8250-25500
└── cert

生成的跨链路由目录内容如下,以127.0.0.1-8250-25500为例。

# 已屏蔽lib和pages目录,该目录存放所有依赖的jar包
tree routers-payment/127.0.0.1-8250-25500/
routers-payment/127.0.0.1-8250-25500/
├── add_chain.sh      # 区块链配置文件创建脚本
├── apps
│   └── WeCross.jar   # WeCross路由jar包
├── build_wecross.sh
├── conf              # 配置文件目录
│   ├── accounts      # 账户配置目录
│   ├── application.properties 
│   ├── chains        # 区块链配置目录,要接入不同的链,在此目录下进行配置
│   ├── log4j2.xml    
│   ├── ca.crt        # 根证书
│   ├── ssl.crt       # 跨链路由证书
│   ├── ssl.key       # 跨链路由私钥
│   ├── node.nodeid   # 跨链路由nodeid
│   └── wecross.toml  # WeCross Router主配置文件
├── create_cert.sh    # 证书生成脚本
├── download_wecross.sh
├── pages             # 网页管理平台页面文件
├── plugin            # 插件目录,接入相应类型链的插件
│   ├── bcos-stub-gm.jar
│   ├── bcos-stub.jar
│   └── fabric-stub.jar
├── start.sh          # 启动脚本
└── stop.sh           # 停止脚本

部署账户服务

  • 下载

~~执行过程中需输入相应数据库的配置

这一步填写的数据库配置需要与现存account_manager方沟通 !!!!!!!!~

cd ~/wecross-networks
bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_account_manager.sh)

# 若出现长时间下载WeCross-Account-Manager包失败,请尝试以下命令重新下载:
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_account_manager.sh)
  • 拷贝证书
cd ~/wecross-networks/WeCross-Account-Manager/
cp ~/wecross-networks/routers-payment/cert/sdk/* conf/
  • 生成私钥
bash create_rsa_keypair.sh -d conf/
  • 配置
cp conf/application-sample.toml conf/application.toml
vim conf/application.toml

需配置内容包括:

admin:配置admin账户,此处可默认,router中的admin账户需与此处对应,用于登录账户服务

db:配置自己的数据库账号密码

[service]
    address = '0.0.0.0'
    port = 8340
    sslKey = 'classpath:ssl.key'
    sslCert = 'classpath:ssl.crt'
    caCert = 'classpath:ca.crt'
    sslOn = true

[admin] 
    # admin账户配置,第一次启动时写入db,之后作为启动校验字段
    name = 'org1-admin' # admin账户名
    password = '123456' # 密码

[auth]
    # for issuring token
    name = 'org1'
    expires = 18000 # 5 h
    noActiveExpires = 600 # 10 min

[db]
    # for connect database
    url = 'jdbc:mysql://localhost:3306/wecross_account_manager'
    username = 'root' # 配置数据库账户
    password = '123456' # 配置数据库密码,不支接受空密码
[ext]
    # for image auth code, allow image auth token empty
    allowImageAuthCodeEmpty = true
  • 启动
bash start.sh

启动跨链路由

修改配置 修改跨链配置 wecross.toml

# 修改跨链配置
vi  /root/wecross-networks/routers-payment/127.0.0.1-8250-25500/conf/wecross.toml

需配置内容包括

peers:需要互相连接的WeCross Router列表的IP:Port

[common]
    zone = 'payment'    #字符串;跨链分区标识符;通常一种跨链业务/应用为一个跨链分区
    visible = true
    enableAccessControl = false

[chains]
    path = 'classpath:chains'

[rpc] # rpc ip & port
    address = '127.0.0.1'
    port = 8250
    caCert = 'classpath:ca.crt'
    sslCert = 'classpath:ssl.crt'
    sslKey = 'classpath:ssl.key'
    sslSwitch = 2  # disable ssl:2, SSL without client auth:1 , SSL with client and server auth: 0
    webRoot = 'classpath:pages'
    mimeTypesFile = 'classpath:conf/mime.types' # set the content-types of a file

[p2p]
    listenIP = '0.0.0.0'
    listenPort = 25500 
    caCert = 'classpath:ca.crt'
    sslCert = 'classpath:ssl.crt'
    sslKey = 'classpath:ssl.key'
    peers = ['127.0.0.1:25500']   #  peer列表;需要互相连接的WeCross Router列表

[account-manager]
    server =  '127.0.0.1:8340'      #
    admin = 'org1-admin'
    password = '123456'
    sslKey = 'classpath:ssl.key'
    sslCert = 'classpath:ssl.crt'
    caCert = 'classpath:ca.crt'

#[[htlc]]
#    selfPath = 'payment.bcos.htlc'
#    account1 = 'bcos_default_account'
#    counterpartyPath = 'payment.fabric.htlc'
#    account2 = 'fabric_default_account'

启动路由

# 启动 router-8250
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/
bash start.sh

启动成功,输出如下:

WeCross booting up .........
WeCross start successfully

如果启动失败,检查8250, 25500端口是否被占用。

netstat -napl | grep 8250
netstat -napl | grep 25500

部署控制台

WeCross提供了控制台,方便用户进行跨链开发和调试。可通过脚本build_console.sh搭建控制台。

  • 下载

执行如下命令进行下载(提供三种下载方式,可根据网络环境选择合适的方式进行下载),下载完成后在当前目录下生成WeCross-Console目录。

下载WeCross控制台
同样提供三种方式,根据网络环境选择合适的方式进行下载。

方式1:命令下载

GitHub下载方式:

bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_console.sh)
Gitee下载方式:

bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_console.sh)
  • 配置
cd ~/wecross-networks/WeCross-Console

# 拷贝连接router所需的TLS证书,从生成的routers-payment/cert/sdk目录下拷贝
cp ~/wecross-networks/routers-payment/cert/sdk/* conf/ 

# 拷贝配置文件,并配置跨链路由RPC服务地址以及端口。此处采用默认配置,默认连接至本地8250端口。
cp conf/application-sample.toml conf/application.toml
.. important::
    - 若搭建WeCross的IP和端口未使用默认配置,需自行更改WeCross-Console/conf/application.toml
  • 启动
bash start.sh

启动成功则输出如下信息,通过help可查看控制台帮助。

=================================================================================
Welcome to WeCross console(v1.1.0)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
=================================================================================
  • 测试功能
# 正常进入,可先退出控制台,等待后续配置
[WeCross]> quit

区块链接入与账户配置

----完成WeCross基础组件的部署后,接下来就是接入区块链,配置跨链账户,构建一个真实的跨链网络!

接入区块链

接入Hyperledger Fabric:接入至跨链路由router-8250

配置内置账户

在跨链路由中需配置用于与Fabric链进行交互的内置账户。内置账户需配置多个:

  • admin账户:必配,一个admin账户,用于接入此Fabric链
  • 机构admin账户:选配,每个Fabric的Org配置一个admin账户,用于在每个Org上部署系统合约

生成账户配置框架

# 切换至对应跨链路由的主目录
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/

# 用脚本生成Fabric账户配置:账户类型(Fabric1.4),账户名(fabric_admin)
# 接入Fabric链,需要配置一个admin账户
bash add_account.sh -t Fabric1.4 -n fabric_admin 

# 为Fabric链的每个Org都配置一个admin账户,此处有两个org(Org1和Org2),分别配两个账户

# 配Org1的admin
bash add_account.sh -t Fabric1.4 -n fabric_admin_org1

# 配Org2的admin
bash add_account.sh -t Fabric1.4 -n fabric_admin_org2

完成配置

修改账户配置

生成的账户配置,默认的mspid为Org1MSP,需将Org2的账户的mspid配置为Org2MSP的。此处只需修改fabric_admin_org2账户的配置。

vim conf/accounts/fabric_admin_org2/account.toml

# 修改mspid,将 'Org1MSP' 更改为 'Org2MSP'
拷贝证书文件

Fabric链的证书位于crypto-config目录,请参考以下命令并根据实际情况完成相关证书的拷贝。

cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500

# 配置fabric_admin 
# 拷贝私钥     
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin/account.crt

# 配置fabric_admin_org1 
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin_org1/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin_org1/account.crt

# 配置fabric_admin_org2 
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/keystore/*_sk   conf/accounts/fabric_admin_org2/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/signcerts/[email protected]   conf/accounts/fabric_admin_org2/account.crt

完成证书拷贝后,账户目录结构如下:

tree conf/accounts/
conf/accounts/
├── fabric_admin
│   ├── account.crt
│   ├── account.key
│   └── account.toml
├── fabric_admin_org1
│   ├── account.crt
│   ├── account.key
│   └── account.toml
└── fabric_admin_org2
    ├── account.crt
    ├── account.key
    └── account.toml

配置插件

生成插件配置框架

进入跨链路由的主目录,用add_chain.sh脚本在conf目录下生成Fabric链的配置框架。

cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500

 # -t 链类型,-n 指定链名字,可根据-h查看使用说明
bash add_chain.sh -t Fabric1.4 -n fabric

执行成功,输出如下。如果执行出错,请查看屏幕打印提示。

SUCCESS: Chain "fabric" config framework has been generated to "conf/chains/fabric"

生成的目录结构如下:

tree conf/chains/fabric/
conf/chains/fabric/
├── chaincode
│   ├── WeCrossHub
│   │   └── hub.go    # 桥接合约
│   └── WeCrossProxy
│       └── proxy.go  # 代理合约
└── stub.toml         # 插件配置文件

完成配置

拷贝证书

相关证书同样位于crypto-config目录,请参考以下命令并根据实际情况完成相关证书的拷贝。

# 假设当前位于跨链路由的主目录
# 拷贝orderer证书
cp xxxxxx/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem   conf/chains/fabric/orderer-tlsca.crt

# 拷贝org1证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt   conf/chains/fabric/org1-tlsca.crt

# 拷贝org2证书
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt   conf/chains/fabric/org2-tlsca.crt

编辑配置文件

插件配置文件conf/chains/fabric/stub.toml配置项包括:

  • 配置资源信息
  • 配置SDK连接信息,与链进行交互

根据实际情况编辑[fabricServices][orgs]的各个配置项。

[common]
    name = 'fabric'				# 指定的连接的链的名字,与该配置文件所在的目录名一致,对应path中的{zone}/{chain}/{resource}的chain
    type = 'Fabric1.4'			# 插件的类型

[fabricServices]
    channelName = 'mychannel'
    orgUserName = 'fabric_admin' # 指定一个机构的admin账户,用于与orderer通信
    ordererTlsCaFile = 'orderer-tlsca.crt' # orderer证书名字,指向与此配置文件相同目录下的证书
    ordererAddress = 'grpcs://localhost:7050' # orderer的url

[orgs] # 机构节点列表
    [orgs.Org1] # 机构1:Org1
         tlsCaFile = 'org1-tlsca.crt' # Org1的证书
         adminName = 'fabric_admin_org1' # Org1的admin账户,在下一步骤中配置
         endorsers = ['grpcs://localhost:7051'] # endorser的ip:port列表,可配置多个

    [orgs.Org2] # 机构2:Org2
         tlsCaFile = 'org2-tlsca.crt' # Org2的证书
         adminName = 'fabric_admin_org2' # Org2的admin账户,在下一步骤中配置
         endorsers = ['grpcs://localhost:9051'] # endorser的ip:port列表,可配置多个

部署系统合约

每个Stub需要部署两个系统合约,分别是代理合约和桥接合约,代理合约负责管理事务以及业务合约的调用,桥接合约用于记录合约跨链请求。在跨链路由主目录执行以下命令:

# 部署代理合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -P

# 部署桥接合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -H

# 若后续有更新系统合约的需求,首先更新conf/chains/fabric下的系统合约代码,在上述命令添加-u参数,执行并重启跨链路由

部署成功,则输出如下内容。若失败可查看提示信息和错误日志。

SUCCESS: WeCrossProxy has been deployed to chains/fabric
SUCCESS: WeCrossHub has been deployed to chains/fabric

完成区块链接入后,重启跨链路由加载已配置的跨链资源。

# 重启 router-8250
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/
bash stop.sh && bash start.sh 

检查日志,可看到刷出已加载的跨链资源,ctrl + c 退出。

tail -f logs/info.log |grep "active resources"

2020-12-05 21:07:30.925 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)
2020-12-05 21:07:40.940 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)
2020-12-05 21:07:50.956 [Thread-3] INFO  WeCrossHost() - Current active resources: payment.bcos.WeCrossProxy(local), payment.bcos.WeCrossHub(local)

配置跨链账户

区块链接入后,必须配置相应的账户才能完成资源的调用。

WeCross将各种类型的链账户进行了汇总,统一用跨链账户进行管理。在WeCross中,用户以跨链账户身份进行登陆,再操作各种资源。要往特定类型的链上发交易,只需要在跨链账户中添加相应类型的链账户即可。

添加Fabric链账户

注意: 在添加Fabric链账户之前,请确保已搭建Fabric链。

  • 拷贝公私钥

将fabric链的公私钥拷贝至控制台目录,为添加链账户做准备。

cp -r ~/wecross-networks/routers-payment/127.0.0.1-8250-25500/conf/accounts/* ~/wecross-networks/WeCross-Console/conf/accounts/
  • 启动控制台
cd ~/wecross-networks/WeCross-Console/
bash start.sh
  • 登录

用默认的跨链账户登录:org1-admin,密码:123456(默认账户在WeCross-Account-Manager/conf/application.toml配置)。

[WeCross]> login org1-admin 123456
Result: success
=============================================================================================
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
  • 添加链账户

为当前登录的跨链账户添加用于发交易的链账户。

# 参数: addChainAccount Fabric1.4 私钥位置 公钥位置 MSPID 是否设置为发交易的默认链账户

# 添加 fabric_admin_org1
[WeCross.org1-admin]> addChainAccount Fabric1.4 conf/accounts/fabric_admin_org1/account.crt conf/accounts/fabric_admin_org1/account.key Org1MSP true 

# 添加 fabric_admin_org2
[WeCross.org1-admin]> addChainAccount Fabric1.4 conf/accounts/fabric_admin_org2/account.crt conf/accounts/fabric_admin_org2/account.key Org2MSP true

查看链账户

查看当前登录的跨链账户下的所有链账户,isDefaulttrue表示发交易的默认账户。

[WeCross.org1-admin]> listAccount
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
chainAccounts: [
        BCOS2.0 Account:
        keyID    : 0
        type     : BCOS2.0
        address  : 0x4e89af80184147fcddc391c64ad673512236af67
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 2
        type     : Fabric1.4
        MembershipID : Org2MSP
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 1
        type     : Fabric1.4
        MembershipID : Org1MSP
        isDefault: false
        ----------
]

操作成功,退出控制台。

[WeCross.org1-admin]> quit

资源部署与初始化操作

部署Hyperledger Fabric跨链资源

WeCross支持通过控制台向Fabric链上部署chaincode,部署步骤如下:

  • 准备chaincode代码(以sacc为例)

控制台的chaincode存放目录:conf/contracts/chaincode/,其中sacc代码放入目录:conf/contracts/chaincode/sacc(目录名sacc为chaincode的名字),sacc目录中放置chaincode代码:sacc.go (代码名任意)。

tree conf/contracts/chaincode/sacc
conf/contracts/chaincode/sacc
├── policy.yaml
└── sacc.go
  • 部署chaincode

为不同的Org分别安装(install)相同的chaincode。

# 登录
[WeCross]> login org1-admin 123456
# 在登录态下,查看默认链账户,可看到Fabric1.4的默认账户是Org2MSP的
[WeCross.org1-admin]> listAccount
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
chainAccounts: [
        BCOS2.0 Account:
        keyID    : 0
        type     : BCOS2.0
        address  : 0x4e89af80184147fcddc391c64ad673512236af67
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 2
        type     : Fabric1.4
        MembershipID : Org2MSP
        isDefault: true
        ----------
        Fabric1.4 Account:
        keyID    : 1
        type     : Fabric1.4
        MembershipID : Org1MSP
        isDefault: false
        ----------
]

# 在向Org1进行install前,设置Fabric1.4的默认账户为Org1MSP,参数:setDefaultAccount Fabric1.4 keyID
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 1

# 给Org1安装sacc,参数:path Org 链码位置 版本号 链码语言
[WeCross.org1-admin]> fabricInstall payment.fabric.sacc Org1 contracts/chaincode/sacc 1.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success

# 在向Org2进行install前,设置Fabric1.4的默认账户为Org2MSP,参数:setDefaultAccount Fabric1.4 keyID
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 2

# 给Org2安装sacc,参数:path Org 链码位置 版本号 链码语言
[WeCross.org1-admin]> fabricInstall payment.fabric.sacc Org2 contracts/chaincode/sacc 1.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success

实例化(instantiate)指定chaincode。

参数:ipath,对应的几个Org,chaincode代码工程目录,指定的版本,chaincode语言,背书策略(此处用默认),初始化参数

# fabricInstantiate 时默认Org1MSP或Org2MSP的链账户都可,此处用的Org2MSP
[WeCross.org1-admin]> fabricInstantiate payment.fabric.sacc ["Org1","Org2"] contracts/chaincode/sacc 1.0 GO_LANG default ["a","10"]

Result: Instantiating... Please wait and use 'listResources' to check. See router's log for more information.

instantiate请求后,需等待1分钟左右。用listResources查看是否成功。若instantiate成功,可查询到资源payment.fabric.sacc

[WeCross.org1-admin]> listResources
path: payment.bcos.HelloWorld, type: BCOS2.0, distance: 0
path: payment.fabric.WeCrossHub, type: Fabric1.4, distance: 1
path: payment.bcos.WeCrossHub, type: BCOS2.0, distance: 0
path: payment.fabric.sacc, type: Fabric1.4, distance: 1
total: 4

[WeCross.org1-admin]> quit # 退出控制台

操作跨链资源

查看跨链资源

  • 登录

用默认的跨链账户登录:org1-admin,密码:123456。(默认账户在WeCross-Account-Manager/conf/application.toml配置)

[WeCross]> login org1-admin 123456
Result: success
=============================================================================================
Universal Account:
username: org1-admin
pubKey  : 3059301306...
uaID    : 3059301306...
  • 获取资源列表

listResources命令查看WeCross跨链网络中的所有资源。可看到有多个资源:

payment.bcos.HelloWorld:对应于FISCO BCOS链上的HelloWorld.sol合约。

payment.fabric.sacc:对应于Fabric链上的sacc.go合约。

payment.xxxx.WeCrossHub:每条链默认安装的Hub合约,用于接收链上合约发起的跨链调用。

[WeCross.org1-admin]> listResources
path: payment.bcos.HelloWorld, type: BCOS2.0, distance: 0
path: payment.fabric.WeCrossHub, type: Fabric1.4, distance: 1
path: payment.bcos.WeCrossHub, type: BCOS2.0, distance: 0
path: payment.fabric.sacc, type: Fabric1.4, distance: 1
total: 4

操作payment.fabric.sacc

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

  • 读资源
# 调用mycc合约中的query接口
[WeCross.org1-admin]> call payment.fabric.sacc get a
Result: [10] // 初次get,a的值为10
  • 写资源
# 调用sacc合约中的set接口
[WeCross.org1-admin]> sendTransaction payment.fabric.sacc set a 666
Txhash  : aa3a7cd62d4b4c56b486f11fae2d903b7f07c2a3fa315ee2b44d5f5c43f5a8dc
BlockNum: 8
Result  : [666]

[WeCross.org1-admin]> call payment.fabric.sacc get a
Result: [666] // 再次get,a的值变成666

# 退出WeCross控制台
[WeCross.org1-admin]> quit # 若想再次启动控制台,cd至WeCross-Console,执行start.sh即可

跨链调用测试—合约跨链调用(Interchain)

操作示例

WeCross控制台提供了两种语言版本的跨链调用示例合约,示例合约的接口包括:

init(): 传入本链的桥接合约地址进行初始化

interchain(): 跨链调用的发起接口,其内部调用了桥接合约的interchainInvoke接口

get(): 获取data

set(): 更新data

callback(): 使用跨链调用的结果更新data

两个示例合约联动过程:A链的示例合约发起一个跨链调用,调用B链的示例合约的set接口,更新B链的data,然后触发回调,调用A链的callback接口并更新A链的data。

通过上述方式,一次控制台调用就能完成两条链数据的更新。

部署跨链调用示例合约

完成环境搭建后,在WeCross控制台执行以下命令:

# 登录
[WeCross]> login org1-admin 123456

# 切换Fabric默认账户
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 2

# 安装链码
[WeCross.org1-admin]> fabricInstall payment.fabric.interchain Org2 contracts/chaincode/interchain 1.0 GO_LANG

path: classpath:contracts/chaincode/interchain
Result: Success

# 切换Fabric默认账户
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 1

# 安装链码
[WeCross.org1-admin]> fabricInstall payment.fabric.interchain Org1 contracts/chaincode/interchain 1.0 GO_LANG

path: classpath:contracts/chaincode/interchain
Result: Success

# 实例化链码
[WeCross.org1-admin]> fabricInstantiate payment.fabric.interchain ["Org1","Org2"] contracts/chaincode/interchain 1.0 GO_LANG default []

# 等待实例化完成

初始化示例合约

在WeCross控制台执行以下命令:

# 登录
[WeCross]> login org1-admin 123456

# 初始化Fabric示例合约,其中mychannel是channel名
[WeCross.org1-admin]> sendTransaction payment.fabric.interchain init mychannel WeCrossHub

发起跨链调用

在WeCross控制台执行以下命令:

# 登录
[WeCross]> login org1-admin 123456

# 查看示例合约原始状态
[WeCross.org1-admin]> call payment.fabric.interchain get

Result: [["Talk is cheap, show me the code."]]

[WeCross.org1-admin]> call payment.bcos.interchain get

Result: [["Talk is cheap, show me the code."]]

# Fabric发起跨链调用   (提前沟通好需调用的bcos链的资源名称及参数)
[WeCross.org1-admin]> sendTransaction payment.fabric.interchain interchain payment.bcos.interchain set "Hello WeCross" payment.fabric.interchain callback

Txhash  : cf7eda25f1c0515b68d702ed495fdbbefed6bdcfd4a3bc68aaab315631d3d102
BlockNum: 2386
Result  : [1]

# 查询示例合约
[WeCross.org1-admin]> call payment.bcos.interchain get

Result: [[ "Hello WeCross" ]]

[WeCross.org1-admin]> call payment.fabric.interchain get

Result: [[ "Hello WeCross" ]]

# 查询调用回调的结果
[WeCross.org1-admin]> call payment.fabric.WeCrossHub selectCallbackResult 1

Result: [["0","0","0","Success","[ \"Hello WeCross\" ]"]]

猜你喜欢

转载自blog.csdn.net/qq_42750537/article/details/120747386