Skip to content

4. AntChain Bridge跨链:插件服务

zouxyan edited this page Jan 11, 2024 · 1 revision

介绍

AntChain Bridge 插件服务(PluginServer, PS)用于管理异构链插件、完成与中继通信的工作。

  • 插件管理能力

    在开发者完成一个异构链插件开发之后,将该插件打包放到PS的指定路径之下,启动PS即可加载该插件,PS将完成插件和区块链桥接组件(Blockchain Bridge Component, BBC)对象的管理等工作,PS还提供了CLI工具完成诸如插件重新加载、停止等工作。

  • 与中继通信

    将PS注册到一个中继之后,PS会作为一个RPC Server为中继提供服务,PS和中继之间会建立双向认证的TLS连接,确保身份互认和安全性,中继会发送请求要求PS完成BBC对象初始化等工作,并调用BBC的接口,完成与异构链的交互。

架构

下面介绍了中继服务的整体架构。

*以下插件BCOS和插件ChainMaker均为展示用例,代表不同的异构插件实现

快速开始

构建

进入代码的根目录,运行mvn编译即可:

mvn clean package

产生的安装包在ps-bootstrap/target/plugin-server-x.x.x.tar.gz

配置

在获得安装包之后,执行解压缩操作,这里以plugin-server-x.x.x.tar.gz为例。

tar -zxf plugin-server-x.x.x.tar.gz

进入解压后的目录,可以看到:

cd plugin-server/
tree .
.
├── README.md
├── bin
│   ├── init_tls_certs.sh
│   ├── plugin-server.service
│   ├── print.sh
│   ├── start.sh
│   └── stop.sh
├── config
│   └── application.yml
└── lib
    └── ps-bootstrap-x.x.x.jar


3 directories, 8 files

首先,初始化PS的TLS秘钥和证书,该脚本将会在项目根目录下创建文件夹certs,下面存储了私钥server.key、证书server.crt、信任的证书trust.crt

./bin/init_tls_certs.sh

然后,在和中继建立连接之前,中继的运维人员应该将中继的证书发送给了您,比如relayer.crt,您需要将这个证书添加到trust.crt中。

cat relayer.crt >> trust.crt

最后修改您的配置文件,将证书目录配置进去。

vi config/application.yml

依次替换grpc.server.security.certificate-chaingrpc.server.security.private-keygrpc.server.security.trustCertCollection的配置项。
下面给出一个例子,示例中诸如/path/to/certs/server.crt的具体配置属性值请替换为您的实际路径,file:保留:

grpc:
  server:
    security:
      # server certificate
      certificate-chain: file:/path/to/certs/server.crt
      # server key
      private-key: file:/path/to/certs/server.key
      # Mutual Certificate Authentication
      trustCertCollection: file:/path/to/certs/trust.crt

然后修改插件库路径,PS将加载这个路径下的插件。修改配置项pluginserver.plugin.repo,比如:

pluginserver:
  plugin:
    # where to load the hetero-chain plugins
    repo: /path/to/plugins

将您的插件都放到这个路径下即可。

运行

作为系统服务运行

在解压包根目录之下,可以找到start.sh脚本。

如下可以打印帮助信息:

./bin/start.sh -h

 start.sh — Start the plugin server

 Usage:
   start.sh <params>

 Examples:
  1. start in system service mode:
   start.sh -s
  2. start in application mode:
   start.sh

 Options:
   -s         run in system service mode.
   -h         print help information.

运行如下命令,会自动将插件服务启动为系统服务:

./bin/start.sh -s

看到下面的输出即启动成功:

    ___            __   ______ __            _           ____         _      __
   /   |   ____   / /_ / ____// /_   ____ _ (_)____     / __ ) _____ (_)____/ /____ _ ___
  / /| |  / __ \ / __// /    / __ \ / __ `// // __ \   / __  |/ ___// // __  // __ `// _ \
 / ___ | / / / // /_ / /___ / / / // /_/ // // / / /  / /_/ // /   / // /_/ // /_/ //  __/
/_/  |_|/_/ /_/ \__/ \____//_/ /_/ \__,_//_//_/ /_/  /_____//_/   /_/ \__,_/ \__, / \___/
                                                                            /____/        

[ INFO ]_[ 2023-06-20 20:57:06.168 ] : running in system service mode
[ INFO ]_[ 2023-06-20 20:57:06.168 ] : plugin-server started successfully

可以通过下面命令查看系统服务状态:

systemctl status plugin-server.service

作为普通进程运行

在解压包根目录之下,运行一下命令即可:

./bin/start.sh

看到下面的输出即启动成功:

    ___            __   ______ __            _           ____         _      __
   /   |   ____   / /_ / ____// /_   ____ _ (_)____     / __ ) _____ (_)____/ /____ _ ___
  / /| |  / __ \ / __// /    / __ \ / __ `// // __ \   / __  |/ ___// // __  // __ `// _ \
 / ___ | / / / // /_ / /___ / / / // /_/ // // / / /  / /_/ // /   / // /_/ // /_/ //  __/
/_/  |_|/_/ /_/ \__/ \____//_/ /_/ \__,_//_//_/ /_/  /_____//_/   /_/ \__,_/ \__, / \___/
                                                                            /____/        

[ INFO ]_[ 2023-03-30 15:11:27.1680160287 ] : start plugin-server now...
[ INFO ]_[ 2023-03-30 15:11:27.1680160287 ] : plugin-server started successfully

可以通过bin/stop.sh关闭服务。

日志文件存储在log目录之下。

运行测试

在运行测试之前,请使用ps-bootstrap/src/main/resources/scripts/init_tls_certs.sh生成证书,并将server.keyserver.crt 放到ps-bootstrap/src/test/resources之下,运行下述命令即可运行测试用例:

mvn test

CLI

CLI工具在v0.2.0版本已经发布,相关教程请参考文档

插件列表

以太坊

以太坊作为目前生态最繁荣的公链,AntChainBridge为其开发了插件。

处为插件仓库,可以通过下述步骤构建和使用以太坊插件。

首先,使用maven生成合约的ABI代码。

mvn web3j:generate-sources

然后,通过下面命令编译项目,可以在target目录下找到名为simple-ethereum-bbc-0.1-SNAPSHOT-plugin.jar的插件Jar包。

mvn clean package -Dmaven.test.skip=true

使用插件需要特定的配置文件,这里给出介绍:

{
  "gasLimit": 3000000,
  "gasPrice":4100000000,
  "privateKey":"0x6322353...39de23b637",
  "url":"http://ip:8545"
}
  • gasLimit:插件账户发送交易的gasLimit;
  • gasPrice:插件账户发送交易的gasPrice;
  • privateKey:插件账户的私钥,用于发送交易,来提交跨链消息;
  • url:以太坊节点的URL,确保插件服务可以访问到;

数文链

“数文链”定位文化产业数字化新型基础设施,AntChainBridge为其开发了跨链插件。

目前代码还未开源,开源之后,可以通过下述步骤构建和使用插件。

通过下面命令编译项目,可以在target目录下找到名为cita-cloud-bbc-0.1-SNAPSHOT-plugin.jar的插件Jar包。

mvn clean package -Dmaven.test.skip=true

使用插件需要特定的配置文件,这里给出介绍:

{
  "address":"0xa6b016c59...695bc5ef57",
  "app_id":"202306...5AkEd37",
  "app_secret":"53f0d1f...d08258",
  "chain_code":"chain-82...84",
  "gateway_host":"bcg.sh...er.xyz:18998",
  "node_host":"bcg...xyz",
  "private_key":"0x2e5dfb6...ec02696",
  "query_port":123,
  "tx_port":123
}
  • address:插件账户的地址;
  • app_id:数文链网关为插件服务分配的app id;
  • app_secret:数文链网关为插件服务分配的app secret;
  • chain_code:数文链的链代码;
  • gateway_host:数文链网关的地址;
  • node_host:数文链的区块链服务的地址;
  • private_key:插件账户的私钥,用于发送交易,来提交跨链消息;
  • query_port:数文链查询服务的端口;
  • tx_port:数文链交易服务的端口;

EOS

AntChain Bridge 实现了EOS链的异构链接入插件,链下插件的使用方法如下:

构建

在offchain-plugin下,通过mvn package编译插件Jar包,可以在target下找到eos-bbc-0.1-SNAPSHOT-plugin.jar

使用

参考插件服务(PluginServer, PS)的使用,将Jar包放到指定路径,通过PS加载即可。

配置

当在AntChainBridge的Relayer服务注册EOS链时,需要指定PS和链类型(eos),同时需要提交一个EOS链的配置,用来初始化EOS插件的BBCService实例。

配置采用Json格式,这里给出配置的模板和解释:

{
    "amContractAddressDeployed":"am",
    "maxIrreversibleWaitCount":30,
    "sdpContractAddressDeployed":"sdp",
    "url":"http://127.0.0.1:8888",
    "userName":"relayer1",
    "userPriKey":"5JzGkEmpSQWb92DASJi...aCWN4VZQc6uAxrQLAr",
    "waitTimeOnce":500,
    "waitUtilTxIrreversible":true
}

在注册链之前,需要提前部署AM和SDP合约,请参考链上合约一节。

  • url:EOS节点的URL;
  • amContractAddressDeployed:部署的AM合约的账户名字;
  • sdpContractAddressDeployed:部署的SDP合约的账户名字;
  • userName:BBCService实例使用的链账户名字,用于和EOS链交互;
  • userPriKey:BBCService实例使用的链账户对应的私钥;
  • waitUtilTxIrreversible:发送交易之后,是否等待交易不可逆,默认为false;
  • waitTimeOnce:插件发送交易后,轮询交易结果的间隔时间,单位为ms,默认为500ms;
  • maxIrreversibleWaitCount:最大轮询次数,默认为30次