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
)按行分隔,保存到文件中。
注:请确保机器的8250
,25500
端口没有被占用。
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/Admin@org1.example.com/msp/keystore/*_sk conf/accounts/fabric_admin/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem conf/accounts/fabric_admin/account.crt
# 配置fabric_admin_org1
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/*_sk conf/accounts/fabric_admin_org1/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem conf/accounts/fabric_admin_org1/account.crt
# 配置fabric_admin_org2
# 拷贝私钥
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/*_sk conf/accounts/fabric_admin_org2/account.key
# 拷贝证书
cp xxxxxx/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem 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
查看链账户
查看当前登录的跨链账户下的所有链账户,isDefault
为true
表示发交易的默认账户。
[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\" ]"]]