WeCross跨链-异构链跨链-(三)WeCross安装和跨链接入
WeCross安装
万字跨链文档(三),接上文(二)
我们采用手动组网和手动接入的方式
这是一个新的虚拟机
安装基础环境
章节1的内容你自己看着弄,主要是网络环境问题很折磨人
剩下一些环境,使用我的脚本
在root根目录下使用
没有git的话,安装git
apt install git
git clone https://gitee.com/atanycosts/graduation-tool-library.git
我们使用里面的 env.sh
安装基础环境脚本
bash env.sh
然后将 deploy_webase.sh
脚本转换为 Unix 格式
dos2unix deploy_webase.sh
运行deploy_webase的目的是,确保mysql的环境以及下载2.0版本的webase
到了这一步就要去修改common.properties文件
cd script
ls
vim common.properties
改这两个位置的数据库账号和密码(下面的标注位置错了 ,改的是mysql.user和mysql.password)都为 root,root
改完后,按enter键继续。
至此基础环境搭建完毕!
手动组网
从gitee上下载WeCross
mkdir wecross-networks
cd wecross-networks
# 下载
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_wecross.sh)
图中使用的是github地址下载的
部署跨链路由
cd WeCross
vim ipfile# 在文件中键入以下内容
127.0.0.1:8250:25500
127.0.0.1:8251:25501
生成好ipfile
文件后,使用脚本build_wecross.sh生成两个跨链路由。
# -f 表示以文件为输入
bash build_wecross.sh -n payment -o routers-payment -f ipfile# 成功输出如下信息
[INFO] Create routers-payment/127.0.0.1-8250-25500 successfully
[INFO] Create routers-payment/127.0.0.1-8251-25501 successfully
[INFO] All completed. WeCross routers are generated in: routers-payment/
注解
- -n 指定跨链分区标识符(zone id),跨链分区通过zone id进行区分,可以理解为业务名称。
- -o 指定输出的目录,并在该目录下生成一个跨链路由。
- -f 指定需要生成的WeCross跨链路由的列表,包括ip地址,rpc端口,p2p端口,生成后的router已完成互联配置。
在routers-payment目录下生成了两个跨链路由。
tree routers-payment/ -L 1
routers-payment/
├── 127.0.0.1-8251-25501
├── 127.0.0.1-8252-25502
└── 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 # 停止脚本
部署账户服务
下载
目前所在的目录为WeCross
的根目录
执行过程中需输入相应数据库的配置。确保前面已经安装mysql
账号和密码都为root
cd ~/WeCross# 若出现长时间下载WeCross-Account-Manager包失败,请尝试以下命令重新下载:
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_account_manager.sh)
按照2.1的步骤来,不可能出错!脚本已经过多次测试,mysql的密码会正常进行修改为root
拷贝证书
cd WeCross-Account-Manager/
cp ../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 = 8340sslKey = '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 tokenname = 'org1'expires = 18000 # 5 hnoActiveExpires = 600 # 10 min[db]# for connect databaseurl = 'jdbc:mysql://localhost:3306/wecross_account_manager'username = 'root' # 配置数据库账户password = 'root' # 配置数据库密码,不支接受空密码
[ext]# for image auth code, allow image auth token emptyallowImageAuthCodeEmpty = true
编辑后保存
启动
bash start.sh
启动跨链路由
注:直接在routers-payment目录下启动 start_all 脚本就行
# 启动 router-8250
cd ../routers-payment/127.0.0.1-8250-25500/
bash start.sh# 启动 router-8251
cd ../127.0.0.1-8251-25501/
bash start.sh
启动成功,输出如下:
WeCross booting up .........
WeCross start successfully
如果启动失败,检查8250, 25500
端口是否被占用。
netstat -napl | grep 8250
netstat -napl | grep 25500
netstat -napl | grep 8251
netstat -napl | grep 25501
部署控制台(可选)
WeCross提供了控制台,方便用户进行跨链开发和调试。可通过脚本build_console.sh
搭建控制台。
下载
执行如下命令进行下载(提供三种下载方式,可根据网络环境选择合适的方式进行下载),下载完成后在当前目录下生成WeCross-Console
目录。
cd ~/wecross-networks/WeCross/
bash <(curl -sL https://github.com/WeBankBlockchain/WeCross/releases/download/resources/download_console.sh)
配置
cd WeCross-Console/# 拷贝连接router所需的TLS证书,从生成的routers-payment/cert/sdk目录下拷贝
cp ../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
更多控制台命令及含义详见控制台命令。
区块链接入
区块链接入的前提是先在跨链路由中接入对应的链
- 接入FISCO BCOS:接入至跨链路由
router-8250
:BCOS2和BCOS3 - 接入Hyperledger Fabric:接入至跨链路由
router-8251
:Fabric v2.5.1
跨链接入
前提提前说下,关于跨链插件的问题经过测试
fisco3:必须使用bcosv1.3.1版本的插件
fisco2: 使用bcosv1.3.0版本的插件
fabric2.5.1:使用fabric v1.3.0
我们不使用官方的方式
但在上述的搭建过程中,会在 ~/WeCross/routers-payment/127.0.0.1-8250-25500/plugin
目录下有4个插件,但是请删除国密的和不必要的fabric1-1.3.0
,保留fabric2
的插件
plugin/
|-- bcos3-stub-xxxx.jar # bcos3插件
|-- bcos2-stub-xxxx.jar # bcos2插件
|-- bcos2-stub-gm-xxxx.jar # bcos2国密插件
└-- fabric1-stub-xxxx.jar
127.0.0.1-8250的路由下
127.0.0.1-8251的路由下
生成配置框架
FISCO v3
进入跨链路由的主目录,用add_chain.sh
脚本在conf
目录下生成BCOS链的配置框架。
cd ~/WeCross/routers-payment/127.0.0.1-8250-25500# -t 链类型,-n 指定链名字,可根据-h查看使用说明
bash add_chain.sh -t BCOS3_ECDSA_EVM -n bcos3
执行成功,输出如下。如果执行出错,请查看屏幕打印提示。
Chain "bcos3" config framework has been generated to "conf/chains/bcos3"
这一步出错了的话,请看插件是否按上面的要求来,只要插件对了,就没问题!
tree conf/chains/bcos3/
生成的如下:
拷贝证书
[!WARNING]
最重要的拷贝证书
官方给的是
为了能够连接BCOS链的节点,需要拷贝节点SDK的证书,证书位于节点的nodes/127.0.0.1/sdk/
目录。
# 证书目录以实际情况为准
scp -r root@10.0.0.52:/root/fisco/webase-deploy/nodes/127.0.0.1/sdk/* conf/chains/bcos3/
而我们应该按照这样的方式去拷贝自己的证书
再确认一遍是否能连接到fisco3所在的虚拟机,我的是 10.0.0.128
通过你认为可以的导出的所有方式,将fisco3的证书导出
xshell、xftp、tabby、微信文件传输助手网页版
我已做压缩并导出到本机–>再转到WeCross所在的虚拟机中
如下所示:
然后解压
最后一步是修改bcos3目录下的 stub.toml
文件
修改里面的connectionStr地址:改为你的fisco3 所在的地址:我的是10.0.0.128
然后尝试启动~/WeCross/routers-payment/127.0.0.1-8250-25500
bash stop.sh
bash start.sh
部署合约
在 127.0.0.1-8250-25500
目录下
# 部署代理合约
bash deploy_system_contract.sh -t BCOS3_ECDSA_EVM -c chains/bcos3 -P# 部署桥接合约
bash deploy_system_contract.sh -t BCOS3_ECDSA_EVM -c chains/bcos3 -H
然后
这边先关闭了原来的,再去127.0.0.1:8250的路由下启动刚搭建的bcos3
没问题!!!
FISCO v2
fisco2同理:先生成配置框架 --> 再拷贝证书 --> 然后部署合约
cd ~/wecross-networks/routers-payment/127.0.0.1-8250-25500# -t 链类型,-n 指定链名字,可根据-h查看使用说明
bash add_chain.sh -t BCOS2.0 -n bcos
tree conf/chains/bcos/
conf/chains/bcos/
├── WeCrossHub
│ └── WeCrossHub.sol # 桥接合约
├── WeCrossProxy # 代理合约
│ └── WeCrossProxy.sol
├── admin # stub内部内置账户,部署代理合约和桥接合约的默认账户
│ ├── xxxxx_secp256k1.key
│ └── account.toml
└── stub.toml # 插件配置文件
为了能够连接BCOS链的节点,需要拷贝节点SDK的证书,证书位于你的链的节点nodes/127.0.0.1/sdk/
目录。
# 证书目录以实际情况为准
scp -r root@10.0.0.51:/root/fisco/webase-deploy/nodes/127.0.0.1/sdk/* conf/chains/bcos
配置
vim conf/chains/bcos/stub.toml
将127.0.0.1改成FISCO v2的IP地址
然后部署合约
# 部署代理合约
bash deploy_system_contract.sh -t BCOS2.0 -c chains/bcos -P# 部署桥接合约
bash deploy_system_contract.sh -t BCOS2.0 -c chains/bcos -H
部署成功后,就可以在127.0.0.1-8250-25500 目录下
bash stop.sh
bash start.sh
fabric v1.4
生成账户配置
# 切换至对应跨链路由的主目录
cd ~/wecross-networks/routers-payment/127.0.0.1-8251-25501/# 用脚本生成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' 更改为 'Org2MSP'
vim conf/accounts/fabric_admin_org2/account.toml
下面将演示fabric_admin证书的拷贝过程
进入
cd ~/root/WeCross/routers-payment/127.0.0.1-8250-25500/conf/accounts/fabric_admin
将刚在WeCross目录下构建的fabric里的证书导入
原证书目录在 /WeCross/fabric/wecross-demo/fabric/certs/accounts/fabric_admin
同理将org1和org2的账户配置导入
生成插件配置
cd ~/WeCross/routers-payment/127.0.0.1-8251-25501
bash add_chain.sh -t Fabric1.4 -n fabric
然后再去
cd ~/WeCross/fabric/wecross-demo/fabric/certs/chains
将里面的三个tls证书拷贝到路由插件配置文件夹里去
然后部署代理合约和桥接合约,最后启动该路由
# 部署代理合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -P# 部署桥接合约
bash deploy_system_contract.sh -t Fabric1.4 -c chains/fabric -H# 启动路由
bash start.sh
fabric v2.5.1
生成账户配置
注意 wecross与fabric不在一个虚拟机中的话,需要你跨虚拟机复制证书
操作还是一样的
# 切换至对应跨链路由的主目录
cd ~/WeCross/routers-payment/127.0.0.1-8251-25501/# 用脚本生成Fabric账户配置:账户类型(Fabric2.0),账户名(fabric_admin)
# 接入Fabric链,需要配置一个admin账户
bash add_account.sh -t Fabric2.0 -n fabric2_admin
# 为Fabric链的每个Org都配置一个admin账户,此处有两个org(Org1和Org2),分别配两个账户# 配Org1的admin
bash add_account.sh -t Fabric2.0 -n fabric2_admin_org1# 配Org2的admin
bash add_account.sh -t Fabric2.0 -n fabric2_admin_org2
修改账户配置
生成的账户配置,默认的mspid
为Org1MSP,需将Org2的账户的mspid
配置为Org2MSP的。此处只需修改fabric2_admin_org2账户的配置。
vim conf/accounts/fabric2_admin_org2/account.toml# 修改mspid,将 'Org1MSP' 更改为 'Org2MSP'
拷贝账户证书文件
Fabric链的证书位于organizations
目录,请参考以下命令并根据实际情况完成相关证书的拷贝。假定Fabric链的虚拟机IP是10.0.0.53
cd ~/WeCross/routers-payment/127.0.0.1-8251-25501# 配置fabric_admin
# 拷贝私钥
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk conf/accounts/fabric2_admin/account.key
# 拷贝证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem conf/accounts/fabric2_admin/account.crt# 配置fabric_admin_org1
# 拷贝私钥
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/*_sk conf/accounts/fabric2_admin_org1/account.key
# 拷贝证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem conf/accounts/fabric2_admin_org1/account.crt# 配置fabric_admin_org2
# 拷贝私钥
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/*_sk conf/accounts/fabric2_admin_org2/account.key
# 拷贝证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem conf/accounts/fabric2_admin_org2/account.crt
完成证书拷贝后,账户目录结构如下:
tree conf/accounts/
conf/accounts/
├── fabric2_admin
│ ├── account.crt
│ ├── account.key
│ └── account.toml
├── fabric2_admin_org1
│ ├── account.crt
│ ├── account.key
│ └── account.toml
└── fabric2_admin_org2├── account.crt├── account.key└── account.toml
生成插件配置框架
进入跨链路由的主目录,用add_chain.sh
脚本在conf
目录下生成Fabric链的配置框架。
cd ~/wecross-networks/routers-payment/127.0.0.1-8251-25501# -t 链类型,-n 指定链名字,可根据-h查看使用说明
bash add_chain.sh -t Fabric2.0 -n fabric2
官方这块没毛病,注意文件的拷贝正确就没毛病
tree conf/chains/fabric2/ -L 2
conf/chains/fabric2/
├── chaincode
│ ├── WeCrossHub # 桥接合约代码目录
│ └── WeCrossProxy # 代理合约代码目录
└── stub.toml # 插件配置文件
拷贝证书
相关证书同样位于organizations
目录,请参考以下命令并根据实际情况完成相关证书的拷贝。
# 假设当前位于跨链路由的主目录
# 拷贝orderer证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem conf/chains/fabric2/orderer-tlsca.crt# 拷贝org1证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt conf/chains/fabric2/org1-tlsca.crt# 拷贝org2证书
scp root@10.0.0.53:/root/go/src/github.com/hyperledger/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt conf/chains/fabric2/org2-tlsca.crt
这块也没毛病!
然后修改插件配置文件stub.toml
vim conf/chains/fabric2/stub.toml
部署合约
# 部署代理合约
bash deploy_system_contract.sh -t Fabric2.0 -c chains/fabric2 -P# 部署桥接合约
bash deploy_system_contract.sh -t Fabric2.0 -c chains/fabric2 -H# 若后续有更新系统合约的需求,首先更新conf/chains/fabric下的系统合约代码,在上述命令添加-u参数,执行并重启跨链路由
部署过了,则提示这个
代理合约:
桥接合约:
没部署的,成功了提示:
[!NOTE]
如果报这个nullpointer
则说明fabric2刚才的证书没有配置好

- 哈希时间锁合约
前置准备
本节的目的:
- 找到所需合约
- 配置控制台直接使用 login 登录
合约源码路径: ~/wecross-networks/WeCross/WeCross-Console/conf/contracts/solidity/HelloWorld.sol
pragma solidity >=0.4.0 <0.6.0;contract HelloWorld {string name;constructor() public {name = "Hello, World!";}function get() public view returns (string memory) {return name;}function set(string memory n) public {name = n;}
}
控制台配置文件为 conf/application-toml
,启动控制台前需配置
cd ~/wecross/WeCross-Console
# 配置
vim conf/application.toml
直接在里面把用户名和密码改为 :org1-admin和123456(图中的我打错了)
[connection]server = '127.0.0.1:8250' # 对应router的ip和rpc端口sslKey = 'classpath:ssl.key'sslCert = 'classpath:ssl.crt'caCert = 'classpath:ca.crt'sslSwitch = 2 # disable ssl:2, SSL without client auth:1 , SSL with client and server auth: 0# urlPrefix = '/' # v1.1.1新增配置,使用该配置可访问已配置urlPrefix的router跨链路由
# 可配置全局账号密码,执行命令`login`时可不输入账号密码
[login]username = 'org1-admin'password = '123456'
然后把# 注释符号删掉(我改回来了:123456)
启动控制台
bash start.sh
登录
# 刚才设置账号和密码了 直接登录
login
bcosDeploy 合约部署命令,成功返回部署的合约地址,失败返回错误描述
参数:
- Path: 跨链资源标示,用于标记部署的合约资源
- Source file path: 部署的合约路径,支持绝对路径/相对路径
- Class Name: 部署的合约名
- Verseion: 部署合约版本号
注意: 同一合约版本号唯一,再次部署相同的版本号会失败
bcosDeploy payment.bcos.HelloWorld contracts/solidity/HelloWorld.sol HelloWorld 2.0
我的合约地址:0x2560570d640f90c50c16e9b4ff23317de2ceb14f
bcosRegister 注册合约为跨链合约,成功返回Success
,失败返回错误描述
参数:
- Path: 跨链资源标示,用于标记注册的合约资源
- Source file path: 合约的ABI文件路径或者合约源码路径
- Contract address: 注册的合约地址
地址已改
bcosRegister payment.bcos.HelloWorld contracts/solidity/HelloWorld.sol 0x47aba1d76d756821355607c6273a016549e02e9f HelloWorld 3.0
sendTransaction 调用智能合约的方法,会更改链上状态,需要发交易。
参数:
- path:跨链资源标识。
- method:合约方法名。
- args:参数列表。
sendTransaction payment.bcos.HelloWorld set "Hello, WeCross!"
call 调用智能合约的方法,不涉及状态的更改,不发交易。
参数:
- path:跨链资源标识。
- method:合约方法名。
- args:参数列表。
call payment.bcos.HelloWorld get
fabricInstall Install chaincode in fabric chain.
fabricInstantiate Instantiate chaincode in fabric chain.
fabricUpgrade Upgrade chaincode in fabric chain.
Fabric账户配置
在使用命令前先复制Fabric账户的公私钥
addChainAccount Fabric2.0 conf/accounts/fabric2_admin/account.crt conf/accounts/fabric2_admin/account.key Org1MSP true
在前文中我们已经给bcos和bcos3部署了对应的默认账户
现在生成了,默认一下 , 当然可以直接在浏览器中直接设置默认
# 查看已经部署的账户信息
listAccount
# 加上-d的话返回的信息更全一些
我们可以看到Fabric2.0的账户keyID为 4,所以使用如下的命令
参数:
- chainType:链类型,目前包括 [Fabric1.4, BCOS2.0, GM_BCOS2.0] 三种类型。
- keyID:指定账号的ID
setDefaultAccount Fabric2.0 4
# 在Org1中部署sacc合约
fabricInstall payment.fabric2.sacc org1 contracts/chaincode/sacc 2.0 GO_LANG
fabricInstall
Fabric 安装链码命令,安装后需fabricInstantiate来启动链码
参数:
- path:跨链资源标识。
- sourcePath:链码工程所在目录,支持绝对路径和WeCross-Console的conf目录内的相对路径
- version:指定一个版本,fabricInstantiate时与此版本对应
- language:指定一个链码语言,支持GO_LANG和JAVA
# 在Org1中部署sacc合约
[WeCross.org1-admin]> fabricInstall payment.fabric2.InterchainMedicalRecord org1 contracts/chaincode/InterchainMedicalRecord 2.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success# 将Fabric的默认账号切换至Org2-admin的账号,以便于我们部署合约到Org2中
# 注意:此示例中,Org2-admin账号的keyID为2,可通过listAccount命令查询
[WeCross.org1-admin]> setDefaultAccount Fabric1.4 2
Result: success
Universal Account info has been changed, now auto-login again.
Result: success
=============================================================================================
Universal Account:
username: org1-admin
pubKey : 3059301306...
uaID : 3059301306...# 在Org2中部署sacc合约
[WeCross.org1-admin]> fabricInstall payment.fabric.sacc Org2 contracts/chaincode/sacc 2.0 GO_LANG
path: classpath:contracts/chaincode/sacc
Result: Success
fabricInstantiate
Fabric 启动(实例化)已安装的链码。此步骤前需先用fabricInstall向指定机构安装链码。
参数:
- path:跨链资源标识。
- orgNames:链码被安装的的机构列表
- sourcePath:链码工程所在目录,支持绝对路径和WeCross-Console的conf目录内的相对路径
- version:指定一个版本,与fabricInstall时的版本对应
- language:指定一个链码语言,支持GO_LANG和JAVA
- policy:指定背书策略文件,设置default为所有endorser以OR相接
- initArgs:链码初始化参数
[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.
启动时间较长(1min左右),可用listResources查看是否已启动,若长时间未启动,可查看router的日志进行排查。
fabricUpgrade
Fabric 升级已启动的链码逻辑,不改变已上链的数据。此步骤前需先用fabricInstall
向指定机构安装另一个版本的链码。
参数:
- path:跨链资源标识。
- orgNames:链码被安装的的机构列表
- sourcePath:链码工程所在目录,支持绝对路径和WeCross-Console的conf目录内的相对路径
- version:指定一个版本,与fabricInstall时的版本对应
- language:指定一个链码语言,支持GO_LANG和JAVA
- policy:指定背书策略文件,设置default为OR所有endorser
- initArgs:链码初始化参数
[WeCross.org1-admin]> fabricUpgrade payment.fabric.sacc ["Org1","Org2"] contracts/chaincode/sacc 2.0 GO_LANG default ["a","10"]
Result: Upgrading... Please wait and use 'detail' to check the version. See router's log for more information.
升级时间较长(1min左右),可用detail payment.fabric.sacc
查看版本号,若长时间升级完成,可查看router的日志进行排查。
修改合约
fabric2.x把依赖的路径改了,请去修改所需的GO合约,改为如下的地址
# 你的 sacc.go 应该使用 Fabric 2.x+ 的导入方式:
package mainimport ("github.com/hyperledger/fabric-chaincode-go/shim""github.com/hyperledger/fabric-protos-go/peer"
)# // ... 你的链码逻辑 ...
# 而不是:import ("github.com/hyperledger/fabric/core/chaincode/shim" // ❌ 旧版 Fabric 1.x 的路径"github.com/hyperledger/fabric/protos/peer" // ❌ 旧版 Fabric 1.x 的路径
)
FISCO V2 跨 FISCO V3
我们使用两阶段事务的方式进行跨链
bcos
确保HelloWorld正常部署在bcos链中
FISCOBCOS v2链
bcos3
刚才没有部署,现在部署合约,然后set测试一下,是否成功
FISCOBCOS v3链
已确定bcos和bcos3已部署合约
然后开始跨链
# wecross 终端里,在事务里绑定两条需要数据跨链的链
startTransaction payment.bcos.HelloWorld payment.bcos3.HelloWorld
成功,有一个事务ID
# fisco2
execTransaction payment.bcos.HelloWorld set "bcos"
# fisco3
execTransaction payment.bcos3.HelloWorld set "bcos3"
分别执行得到如下结果
读取结果
call payment.bcos.HelloWorld getcall payment.bcos3.HelloWorld get
这两个可能其中有一个call失败,但是不影响,直接提交事务
commitTransaction payment.bcos.HelloWorld payment.bcos3.HelloWorld
结束!
当然可以直接输入
# 回滚事务
# 可以直接输入`rollbackTransaction`命令,输入y回滚这次事务,输入n则取消,也可以输入全资源路径
rollbackTransaction
FISCO v2跨Fabric
跟bcos跨bcos3一样的逻辑
先startTransaction开启事务 -->execTransaction发起事务交易 -->callTransaction查询事务中的交易 -->commitTransaction提交事务
用到的合约如下,注意每条链合约的大小写问题
startTransaction
写接口,开始两阶段事务。
参数:
- path_1 … path_n:参与事务的资源路径列表,路径列表中的资源会被本次事务锁定,锁定后仅限本事务相关的交易才能对这些资源发起写操作,非本次事务的所有写操作都会被拒绝。
startTransaction payment.bcos.interchainmedicalrecord payment.fabric2.interchainmedicalrecord
execTransaction
写接口,发起事务交易。
参数:
- path:资源路径。
- method:接口名,同sendTransaction。需要注意的是,该接口需要在合约中配套以
_revert
结尾的回滚接口。 - args:参数,同sendTransaction。
[Transaction running: 024f0ff81cda4b938a0b48805be9eb61]
[WeCross.org1-admin]> execTransaction payment.bcos.evidence newEvidence evidence1 Jerry
Txhash : 0xcb4ee8b1b83f6855e7583c75bec35c29004ee446c93a7bcfe92b5d7156572235
BlockNum: 28
Result : [true][Transaction running: 024f0ff81cda4b938a0b48805be9eb61]
[WeCross.org1-admin]> execTransaction payment.fabric.evidence newEvidence evidence2 Tom
Txhash : bb955ee814b12ebc19a068c8d3c10afbc7aadc6c62225dac51fc5c496049c36d
BlockNum: 14
Result : [Success]
callTransaction
读接口,查询事务中的数据。
参数:
- path:资源路径。
- method:接口名,同sendTransaction。
- args:参数,同sendTransaction。
[Transaction running: 024f0ff81cda4b938a0b48805be9eb61]
[WeCross.org1-admin]> call payment.bcos.evidence queryEvidence evidence1
Result: [Jerry]
commitTransaction
写接口,提交事务,确认事务执行过程中所有的变动。
参数:
- path_1 … path_n:(可选) 用于提交事务的路径列表。
[WeCross.org1-admin]> commitTransaction payment.bcos.evidence payment.fabric.evidence# 也可以直接输入`commitTransaction`命令,输入y提交这次事务,输入n则取消
[Transaction running: 024f0ff81cda4b938a0b48805be9eb61]
[WeCross.org1-admin]> commitTransaction
Transaction running now, transactionID is: 024f0ff81cda4b938a0b48805be9eb61
Are you sure commit it now?(y/n) y
Committing transaction: 024f0ff81cda4b938a0b48805be9eb61...Result: success!
# 结束事务后,Prompt不再显示事务标识
[WeCross.org1-admin]>
FISCO v3跨Fabric
与上述同理