跨链组网

如果已完成接入区块链的体验,接下来将教您如何搭建一个WeCross跨链组网,实现不同的跨链路由之间的相互调用。请求发送至任意的跨链路由,都能够访问到正确的跨链资源。

重要

  • WeCross跨链路由之间采用TLS协议实现安全通讯,只有持有相同ca证书的跨链路由才能建立连接。

构建多个WeCross跨链路由

cd ~/wecross
vi ipfile

本举例中将构造两个跨链路由,构建一个ipfile文件,将需要构建的两个跨链路由信息内容保存到文件中(按行区分:ip地址:rpc端口:p2p端口):

127.0.0.1:8251:25501
127.0.0.1:8252:25502

生成跨链路由

# -f 表示以文件为输入
bash ./WeCross/build_wecross.sh -n bill -o routers-bill -f ipfile

# 成功输出如下信息
[INFO] Create routers/127.0.0.1-8251-25501 successfully
[INFO] Create routers/127.0.0.1-8252-25502 successfully
[INFO] All completed. WeCross routers are generated in: routers-bill/

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

tree routers-bill/ -L 1
routers-bill/
├── 127.0.0.1-8251-25501
├── 127.0.0.1-8252-25502
└── cert

跨链路由接入区块链

两个跨链路由配置同一条FISCO BCOS链的不同合约资源。

配置127.0.0.1-8251-25501

让此跨链路由操作HelloWorld合约。

  • 部署合约
cd ~/fisco/console && bash start.sh

# 部署HelloWorld合约,请将合约地址记录下来后续步骤使用
[group:1]> deploy HelloWorld
contract address: 0xe51eb006c96345f8f0d431f100f0bf619f6145d4

# 部署HelloWeCross合约,请将合约地址记录下来后续步骤使用
[group:1]> deploy HelloWeCross
contract address: 0x5854394d40e60b203e3807d6218b36d4bc0f3437

# 退出控制台
[group:1]> q
  • 配置stub.toml
cd ~/wecross/routers-bill/127.0.0.1-8251-25501 
bash create_bcos_stub_config.sh -n bcos1
vi conf/stubs/bcos1/stub.toml
# 配置通过哪些节点接入此链
connectionsStr = ['127.0.0.1:20200','127.0.0.1:20201','127.0.0.1:20202','127.0.0.1:20203']

# 配置资源:HelloWorld合约(同时删除其他资源示例)
[[resources]]
    # name must be unique
    name = 'HelloWorld'
    type = 'BCOS_CONTRACT'
    contractAddress = '0xe51eb006c96345f8f0d431f100f0bf619f6145d4'
  • 拷贝证书
cp ~/fisco/nodes/127.0.0.1/sdk/* ~/wecross/routers-bill/127.0.0.1-8251-25501/conf/stubs/bcos1

配置127.0.0.1-8252-25502

让此跨链路由操作HelloWeCross合约

  • 配置stub.toml
cd ~/wecross/routers-bill/127.0.0.1-8252-25502 
bash create_bcos_stub_config.sh -n bcos2
vi conf/stubs/bcos2/stub.toml
# 配置通过哪些节点接入此链
connectionsStr = ['127.0.0.1:20200','127.0.0.1:20201','127.0.0.1:20202','127.0.0.1:20203']

# 配置资源:HelloWeCross合约(同时删除其他资源示例)
[[resources]]
    # name must be unique
    name = 'HelloWeCross'
    type = 'BCOS_CONTRACT'
    contractAddress = '0x5854394d40e60b203e3807d6218b36d4bc0f3437'
  • 拷贝证书
cp ~/fisco/nodes/127.0.0.1/sdk/* ~/wecross/routers-bill/127.0.0.1-8252-25502/conf/stubs/bcos2

启动跨链路由

cd ~/wecross/routers-bill/127.0.0.1-8251-25501 
bash start.sh

cd ~/wecross/routers-bill/127.0.0.1-8252-25502 
bash start.sh

调用跨链资源

用控制台调用跨链资源,请求发到任意的跨链路由上,都可访问到跨链分区中的任意资源。

配置跨链控制台

在控制台配置文件中增加新的跨链路由的信息。

cd ~/wecross/WeCross-Console
vi conf/console.xml 
# 配置map信息
<map>
    <entry key="server1" value="127.0.0.1:8251"/>
    <entry key="server2" value="127.0.0.1:8252"/>
</map>

启动跨链控制台

cd ~/wecross/WeCross-Console
bash start.sh

测试请求路由功能

跨链路由能够进行请求转发,将调用请求正确地路由至相应的跨链资源。无论请求发至哪个跨链路由,都可正确路由至相应跨链路由配置的链上资源。

# 查看配置的所有跨链路由
[server1]> listServers 
{server1=127.0.0.1:8251, server2=127.0.0.1:8252}

# 查看server1的资源列表,可以看到server2所连接的跨链路由的资源(bill.bcos2.HelloWeCross)也在列表中
[server1]> listResources
Resources{
    errorCode=0,
    errorMessage='',
    resourceList=[
        WeCrossResource{
            checksum='0x7027331008fe69a87ec703a006461a14a652f5380071c8868cc08d3c7247d608',
            type='REMOTE_RESOURCE',
            distance=1,
            path='bill.bcos2.HelloWeCross'
        },
        WeCrossResource{
            checksum='0x3d58f2c92c9894abbcff5192c78f9ea823c39b089c44f976bb53e63d9285b0b0',
            type='BCOS_CONTRACT',
            distance=0,
            path='bill.bcos1.HelloWorld'
        }
    ]
}

# 在server1中调用server2连接的资源
[server1]> call bill.bcos2.HelloWeCross Int getNumber
Receipt{
    errorCode=0,
    errorMessage='success',
    hash='null',
    result=[
        2019
    ]
}

# 切换server2
[server1]> switch server2

# server2调用server1的资源
[server2]> call bill.bcos1.HelloWorld String get
Receipt{
    errorCode=0,
    errorMessage='success',
    hash='null',
    result=[
        Hello,
        World!
    ]
}

# 退出控制台
[server2]> q

停止跨链路由

cd ~/wecross/routers-bill/127.0.0.1-8251-25501
bash stop.sh
cd ~/wecross/routers-bill/127.0.0.1-8252-25502
bash stop.sh