资源部署与操作

整个跨链网络环境搭建完毕后,就可以基于WeCross控制台部署和操作跨链资源了。

部署FISCO BCOS跨链资源

WeCross支持通过控制台向BCOS链上部署合约,部署步骤如下:

  • 准备合约代码(以HelloWorld为例)

控制台的合约存放目录:conf/contracts/solidity/,目录下已有HelloWorld合约文件,若需部署其它合约,可将合约拷贝至相同位置。

tree conf/contracts/solidity/
conf/contracts/solidity/
└── HelloWorld.sol
  • 启动控制台

cd ~/wecross-networks/WeCross-Console/
bash start.sh
  • 部署合约

bcosDeploy命令进行部署。

参数:ipath,代码目录,合约名,设置一个版本号

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

# 部署
[WeCross.org1-admin]> bcosDeploy payment.bcos.HelloWorld contracts/solidity/HelloWorld.sol HelloWorld 1.0
Result: 0x953c8f97f9ea5930e6ca8d5eabbd9dfdcb142e6c

listResources可查看此资源(payment.bcos.HelloWorld)已部署

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

部署Hyperledger Fabric跨链资源

WeCross支持通过控制台向Hyperledger 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。

# 在登录态下,查看默认链账户,可看到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.bcos.HelloWorld

  • 读资源

    • 命令:call path 接口名 [参数列表]

    • 示例:call payment.bcos.HelloWorld get

# 调用HelloWorld合约中的get接口
[WeCross.org1-admin]> call payment.bcos.HelloWorld get
Result: [Hello, World!]
  • 写资源

    • 命令:sendTransaction path 接口名 [参数列表]

    • 示例:sendTransaction payment.bcos.HelloWeCross set Tom

# 调用HelloWeCross合约中的set接口
[WeCross.org1-admin]> sendTransaction payment.bcos.HelloWorld set Tom
Txhash  : 0xd9cefb8c3ba28084583ba340e1d73a37574e1661926c3116729b1ec029f59828
BlockNum: 6
Result  : []     // 将Tom给set进去

[WeCross.org1-admin]> call payment.bcos.HelloWorld get
Result: [Tom]    // 再次get,Tom已set

操作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即可

访问网页管理平台

除了控制台,还可以通过浏览器访问WeCross网页管理台,实现跨链管理和资源调用。

http://localhost:8250/s/index.html#/login

用demo已配置账户进行登录:org1-admin,密码:123456

管理台中包含如下内容,点击链接进入相关操作指导。

注解

  • 若需要远程访问,请在router的conf/wecross.toml中,修改[rpc]标签下的address为所需ip(如:0.0.0.0)。保存后,重启router即可。