AntChainBridgePluginServer icon indicating copy to clipboard operation
AntChainBridgePluginServer copied to clipboard

AntChainBridge 链下插件服务框架

am logo

AntChain Bridge Plugin Server

pull requests welcome badge Language GitHub contributors License

介绍

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目录之下。

插件

将你的插件放在配置pluginserver.plugin.repo的路径之下,然后启动插件服务即可加载所有插件。

插件运行中使用BBCLogger打印的日志,比如这里,插件服务将会按照插件的product和BBCService对象的domain,打印到不同文件logs/bbc/${product}/${domain},比如下面productsimple-ethereum和域名为domainB的日志文件。

logs/
├── antchain-bridge-pluginserver
│   ├── application.log
│   └── error.log
└── bbc
    └── simple-ethereum
        └── domainB.log

3 directories, 3 files

运行测试

在运行测试之前,请使用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版本已经发布,相关教程请参考文档

社区治理

AntChain Bridge 欢迎您以任何形式参与社区建设。

您可以通过以下方式参与社区讨论

  • 钉钉

scan dingding

  • 邮件

发送邮件到[email protected]

License

详情参考LICENSE