当前位置: 首页 > ai >正文

WeCross跨链-异构链跨链-(三)WeCross安装和跨链接入

WeCross安装

万字跨链文档(三),接上文(二)
我们采用手动组网和手动接入的方式

image-20250414095006360

这是一个新的虚拟机

image-20250413233244278

安装基础环境

章节1的内容你自己看着弄,主要是网络环境问题很折磨人

剩下一些环境,使用我的脚本

在root根目录下使用

没有git的话,安装git

apt install git
git clone https://gitee.com/atanycosts/graduation-tool-library.git

image-20250414101935373

我们使用里面的 env.sh 安装基础环境脚本

image-20250414102123784

bash env.sh

image-20250414102145410

image-20250414102223374

然后将 deploy_webase.sh 脚本转换为 Unix 格式

dos2unix deploy_webase.sh

运行deploy_webase的目的是,确保mysql的环境以及下载2.0版本的webase

image-20250414102504265

1744598447608

到了这一步就要去修改common.properties文件

image-20250414104309678

cd script
ls
vim common.properties

改这两个位置的数据库账号和密码(下面的标注位置错了 ,改的是mysql.user和mysql.password)都为 root,root

image-20250414104436815

改完后,按enter键继续。

至此基础环境搭建完毕!

手动组网

从gitee上下载WeCross

mkdir wecross-networks
cd wecross-networks
# 下载
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_wecross.sh)

图中使用的是github地址下载的

image-20250414095407905

image-20250414100602352

部署跨链路由
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/

image-20250414100830732

注解

  • -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

image-20250414100926609

生成的跨链路由目录内容如下,以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           # 停止脚本

image-20250414101010742

部署账户服务
下载

目前所在的目录为WeCross的根目录

image-20250414101327973

执行过程中需输入相应数据库的配置。确保前面已经安装mysql 账号和密码都为root

cd ~/WeCross# 若出现长时间下载WeCross-Account-Manager包失败,请尝试以下命令重新下载:
bash <(curl -sL https://gitee.com/WeBank/WeCross/raw/master/scripts/download_account_manager.sh)

image-20250414105057103

image-20250414105225485

按照2.1的步骤来,不可能出错!脚本已经过多次测试,mysql的密码会正常进行修改为root

拷贝证书
cd WeCross-Account-Manager/
cp ../routers-payment/cert/sdk/* conf/
生成私钥
bash create_rsa_keypair.sh -d conf/

image-20250414105311900

配置
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

image-20250414105406485
编辑后保存

启动
bash start.sh

image-20250414105455857

启动跨链路由

注:直接在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

image-20250414105623979

启动成功,输出如下:

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)

image-20250414144100668

配置
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.
================================================================================

image-20250414144157533

测试功能
# 正常进入,可先退出控制台,等待后续配置
[WeCross]> quit

更多控制台命令及含义详见控制台命令。

区块链接入

区块链接入的前提是先在跨链路由中接入对应的链

  • 接入FISCO BCOS:接入至跨链路由router-8250:BCOS2和BCOS3
  • 接入Hyperledger Fabric:接入至跨链路由router-8251:Fabric v2.5.1

image-20250414100307848

跨链接入

前提提前说下,关于跨链插件的问题经过测试

fisco3:必须使用bcosv1.3.1版本的插件

fisco2: 使用bcosv1.3.0版本的插件

fabric2.5.1:使用fabric v1.3.0

我们不使用官方的方式

image-20250414145119931

但在上述的搭建过程中,会在 ~/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的路由下

image-20250414150024758

127.0.0.1-8251的路由下

image-20250414145946655

生成配置框架
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"

image-20250414150344138

这一步出错了的话,请看插件是否按上面的要求来,只要插件对了,就没问题!

tree conf/chains/bcos3/

image-20250414150449532

生成的如下:

image-20250414151105159

拷贝证书

[!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

image-20250414151242430

通过你认为可以的导出的所有方式,将fisco3的证书导出

xshell、xftp、tabby、微信文件传输助手网页版

我已做压缩并导出到本机–>再转到WeCross所在的虚拟机中

image-20250414152305832

如下所示:

image-20250414152631803

然后解压

image-20250414152708436

最后一步是修改bcos3目录下的 stub.toml文件

image-20250414152947648

修改里面的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

image-20250414154539257

没问题!!!

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

image-20250418164953688

部署成功后,就可以在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

image-20250616215850657

image-20250616215801215

下面将演示fabric_admin证书的拷贝过程

进入

cd ~/root/WeCross/routers-payment/127.0.0.1-8250-25500/conf/accounts/fabric_admin

image-20250617131534918

将刚在WeCross目录下构建的fabric里的证书导入

原证书目录在 /WeCross/fabric/wecross-demo/fabric/certs/accounts/fabric_admin

image-20250617131701400

同理将org1和org2的账户配置导入

生成插件配置

cd ~/WeCross/routers-payment/127.0.0.1-8251-25501
bash add_chain.sh -t Fabric1.4 -n fabric

image-20250617132229332

然后再去

cd ~/WeCross/fabric/wecross-demo/fabric/certs/chains

将里面的三个tls证书拷贝到路由插件配置文件夹里去

image-20250617132240358

然后部署代理合约和桥接合约,最后启动该路由

# 部署代理合约
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

image-20250616220917698

image-20250616220856197

image-20250616221234639

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

image-20250414163013420

# 为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

image-20250414163353484

修改账户配置

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

vim conf/accounts/fabric2_admin_org2/account.toml# 修改mspid,将 'Org1MSP' 更改为 'Org2MSP'

image-20250414163516090

拷贝账户证书文件

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

官方这块没毛病,注意文件的拷贝正确就没毛病

image-20250414164805877

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

image-20250414165857969

image-20250414170608869

部署合约

# 部署代理合约
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参数,执行并重启跨链路由

部署过了,则提示这个

代理合约:

image-20250414170447127

桥接合约:

image-20250414171005097

没部署的,成功了提示:

image-20250418164205887

image-20250418164327636

image-20250418164409379

[!NOTE]

如果报这个nullpointer

image-20250414170040297

则说明fabric2刚才的证书没有配置好
![image-20250414170522516](https://img.atanycosts.cn/i/1/2025/04/14/170524-1.png

重启跨链路由

bash stop.sh
bash start.sh

image-20250414173332402

打开区块链浏览器

fisco  127.0.0.1:8250/s/index.html#/home
fabric 127.0.0.1:8251/s/index.html#/home
账号均为org1-admin,密码均为123456

image-20250414173619536

跨链交互

介绍

通过WeCross进行跨链分为两种方式,本文将使用第一种方式进行演示:两阶段事务

  • 两阶段事务
img
  • 哈希时间锁合约
前置准备

本节的目的:

  • 找到所需合约
  • 配置控制台直接使用 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'

image-20250418180254253

然后把# 注释符号删掉(我改回来了:123456)

image-20250418180633488

启动控制台

bash start.sh

登录

# 刚才设置账号和密码了 直接登录
login

image-20250418180748943

bcosDeploy 合约部署命令,成功返回部署的合约地址,失败返回错误描述

参数:

  • Path: 跨链资源标示,用于标记部署的合约资源
  • Source file path: 部署的合约路径,支持绝对路径/相对路径
  • Class Name: 部署的合约名
  • Verseion: 部署合约版本号

注意: 同一合约版本号唯一,再次部署相同的版本号会失败

bcosDeploy payment.bcos.HelloWorld contracts/solidity/HelloWorld.sol HelloWorld 2.0

image-20250418181417062

我的合约地址:0x2560570d640f90c50c16e9b4ff23317de2ceb14f

bcosRegister 注册合约为跨链合约,成功返回Success,失败返回错误描述

参数:

  • Path: 跨链资源标示,用于标记注册的合约资源
  • Source file path: 合约的ABI文件路径或者合约源码路径
  • Contract address: 注册的合约地址

地址已改

bcosRegister payment.bcos.HelloWorld contracts/solidity/HelloWorld.sol 0x47aba1d76d756821355607c6273a016549e02e9f HelloWorld 3.0

image-20250418181745703

sendTransaction 调用智能合约的方法,会更改链上状态,需要发交易。

参数:

  • path:跨链资源标识。
  • method:合约方法名。
  • args:参数列表。
sendTransaction payment.bcos.HelloWorld set "Hello, WeCross!"

image-20250418181234456

call 调用智能合约的方法,不涉及状态的更改,不发交易。

参数:

  • path:跨链资源标识。
  • method:合约方法名。
  • args:参数列表。
call payment.bcos.HelloWorld get

image-20250418181143783

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

image-20250429000024384在前文中我们已经给bcos和bcos3部署了对应的默认账户

现在生成了,默认一下 , 当然可以直接在浏览器中直接设置默认

# 查看已经部署的账户信息
listAccount
# 加上-d的话返回的信息更全一些

image-20250429000242184

我们可以看到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链

image-20250418183521156

bcos3

刚才没有部署,现在部署合约,然后set测试一下,是否成功

FISCOBCOS v3链

image-20250418183801932

已确定bcos和bcos3已部署合约

然后开始跨链

# wecross 终端里,在事务里绑定两条需要数据跨链的链
startTransaction payment.bcos.HelloWorld payment.bcos3.HelloWorld

成功,有一个事务ID

image-20250418190336626

# fisco2
execTransaction payment.bcos.HelloWorld set "bcos"
# fisco3
execTransaction payment.bcos3.HelloWorld set "bcos3"

分别执行得到如下结果

image-20250418190632650

image-20250418190848818

image-20250418190830697

读取结果

call payment.bcos.HelloWorld getcall payment.bcos3.HelloWorld get

image-20250418191050902

image-20250418191451552

这两个可能其中有一个call失败,但是不影响,直接提交事务

commitTransaction payment.bcos.HelloWorld payment.bcos3.HelloWorld

image-20250418191539379

结束!

当然可以直接输入

# 回滚事务
# 可以直接输入`rollbackTransaction`命令,输入y回滚这次事务,输入n则取消,也可以输入全资源路径
rollbackTransaction
FISCO v2跨Fabric

跟bcos跨bcos3一样的逻辑

先startTransaction开启事务 -->execTransaction发起事务交易 -->callTransaction查询事务中的交易 -->commitTransaction提交事务

用到的合约如下,注意每条链合约的大小写问题

image-20250504161755340

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

与上述同理

http://www.xdnf.cn/news/19756.html

相关文章:

  • 无人机散热模块技术要点分析
  • 什么是 etcd?
  • 当3D高斯泼溅遇见视频孪生:城市治理的“科幻“时代来了
  • R-4B: 通过双模退火与强化学习激励多模态大语言模型的通用自主思考能力
  • 一键 i18n 国际化神库!适配 Vue、React!
  • ElasticSearch倒排索引原理
  • 02、连接服务器的几种方式
  • 人工智能机器学习入门——线性回归
  • 高光谱成像在文物考古和字画检测中的应用
  • 普通人如何用 AI 提效?5 个低门槛工具 + 3 类场景案例,让 AI 成为日常助手
  • VMWare上搭建分布式Hadoop集群
  • 不只会修图!谷歌发布官方指南,教你用 Nano Banana 玩转文生图
  • pip的缓存
  • 【STL】C++ 开发者必学字符类详解析:std::string
  • [论文阅读] 人工智能 + 软件工程 | ReCode:解决LLM代码修复“贵又慢”!细粒度检索+真实基准让修复准确率飙升
  • 【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜
  • 彩笔运维勇闯机器学习--逻辑回归
  • JavaScript手录进阶01-跨域问题
  • Diamond基础3:在线逻辑分析仪Reveal的使用
  • 用AI做旅游攻略,真能比人肉整理靠谱?
  • iOS 上架 uni-app 流程全解析,从打包到发布的完整实践
  • LabVIEW软件全面解析:图形化编程的工业级应用指南
  • RL 大模型逆袭!搞定真实软件工程任务,成功率从 20% 飙到 39%,无需教师模型蒸馏
  • 如何将华为手机数据转移到OPPO手机
  • 2004-2023年各省生活垃圾无害化处理率数据(无缺失)
  • 07、上传jar包到 Linux 并启动项目
  • 9月3日星期三今日早报简报微语报早读
  • 深入解析Java Spliterator(Stream延迟、并行计算核心)
  • TensorFlow的Yes/No 关键词识别模型训练
  • LVGL9.3 vscode 模拟环境搭建