AntChainOpenLabs / AntChainBridgePluginSDK

AntChainBridge 插件SDK和插件池
Apache License 2.0
76 stars 19 forks source link
antchain antchainbridge blockchain cross-chain sdk
am logo

AntChain Bridge Plugin SDK

pull requests welcome badge Language GitHub contributors License

介绍

AntChain Bridge将跨链互操作解释为两个层次:通信和可信,即跨链的目标在于实现区块链实体之间的可信通信。

在AntChain Bridge的架构中,中继需要与区块链进行交互,而异构链的通信协议各式各样,无法统一适配,因此AntChain Bridge抽象出了区块链桥接组件(Blockchain Bridge Component, BBC),来解决区块链和跨链网络的通信问题。

每种异构链要接入AntChain Bridge跨链网络,都需要实现一套标准的区块链桥接组件,可以分为链上和链下两部分,包括链下插件系统合约。链下插件需要基于SDK完成开发,链上部分则通常是智能合约,要求实现特定的接口和逻辑,为降低开发难度,我们提供了Solidity版本的实现

AntChain Bridge为开发者提供了SDK、手册和系统合约模板,来帮助开发者完成插件和合约的开发。同时,AntChain Bridge提供了插件服务(PluginServer)来运行插件,插件服务是一个独立的服务,具备插件管理和响应中继请求的功能。

在当前的工程实现中,BBC链下部分是以插件的形式实现的。AntChain Bridge实现了一套SDK,通过实现SDK中规定的接口(SPI),经过简单的编译,即可生成插件包。插件服务(PluginServer, PS)可以加载BBC链下插件,详情可以参考插件服务的介绍文档

区块链域名服务(BlockChain Domain Name Service, BCDNS)为AntChain Bridge跨链网络提供身份、路由、信任管理等服务,在v0.2.0版本之后,加入了BCDNS模块以及其他数据结构,比如区块链域名证书等类型和工具,并在antchain-bridge-bcdns中增加了基于星火链网的BCDNS服务的客户端实现,该BCDNS服务由中国信息通信研究院开发支持,详情请

在SDK中抽象了BCDNS服务的接口IBlockChainDomainNameService,描述了BCDNS应该提供的功能,目前仅支持官方实现的BCDNS,支持的类型可

在v0.3.0之后,拆分出单独的BCDNS Factory模块,用于快速启动不同类型BCDNS的客户端,并剥离依赖。增加关于Embedded BCDNS的实现代码,并提供Spring Boot Starter方便快速启动Embedded BCDNS服务。

以下介绍了基于SDK的一个集成架构:

SDK共有六个部分,包括:

构建

*在开始之前,请您确保安装了maven和JDK,这里推荐使用jdk-1.8版本

本地安装

在项目根目录下,直接使用maven编译即可:

mvn install -Dmaven.test.skip=true

这样,SDK的Jar包就被安装在本地了。

然后,可以通过在maven的pom.xml配置依赖就可以了,比如下面一段配置,${antchain-bridge.sdk.version}为当前仓库的版本号,可以在项目目录的pom.xml看到。

<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-plugin-lib</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>
<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-plugin-manager</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>
<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-spi</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>
<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-commons</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>
<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-bcdns</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>
<dependency>
    <groupId>com.alipay.antchain.bridge</groupId>
    <artifactId>antchain-bridge-bcdns-factory</artifactId>
    <version>${antchain-bridge.sdk.version}</version>
</dependency>

快速开始

BBC插件

Testchain

Testchain是一个用于讲解如何开发BBC插件的demo工程,结合AntChain Bridge的文档,可以更好地理解BBC的开发过程。

详细的开发教程请参考本仓库的Wiki

以太坊

基于SDK,我们开发了一个打通以太坊的BBC插件

进入以太坊插件的路径下,可以看到以下文件:

# tree -L 4 .        
.
├── offchain-plugin
│   ├── README.md
│   ├── pom.xml
│   └── src
└── onchain-plugin
    ├── README.md
    └── solidity
        ├── scenarios
        │   └── nft_crosschain
        └── sys
            ├── AppContract.sol
            ├── AuthMsg.sol
            ├── SDPMsg.sol
            ├── interfaces
            └── lib

详细操作请

EOS

基于SDK,我们提供了一个打通EOS链的BBC插件

详细操作请

Mychain

基于SDK我们给出了打通蚂蚁链(Mychain)的BBC插件,目前内部依赖发布中,发布之后即可编译使用。

BCDNS

跨链身份

BCDNS为AntChain Bridge提供了身份服务,通过签发各类身份证书,实现区块链域名申请、域名验证、Relayer互认等流程。

BCDNS会为AntChain Bridge提供域名证书、域名空间证书、Relayer证书、PTC证书和信任根证书。

证书结构介绍

证书的类型枚举可以参考代码,证书的基本结构可以参考代码

整体类图如下:

classDiagram
direction LR
class CrossChainCertificateTypeEnum {
<<enumeration>>
  +  BCDNS_TRUST_ROOT_CERTIFICATE
  +  DOMAIN_NAME_CERTIFICATE
  +  RELAYER_CERTIFICATE
  +  PROOF_TRANSFORMATION_COMPONENT_CERTIFICATE
}

class AbstractCrossChainCertificate {
   CrossChainCertificateTypeEnum type
   String version
   String id
   ObjectIdentity issuer
   byte[] credentialSubject
   IssueProof proof
   long expirationDate
   long issuanceDate
}
class IssueProof {
   byte[] rawProof
   byte[] certHash
   String sigAlgo
   String hashAlgo
}

class ObjectIdentity {
  - byte[] rawId
  - ObjectIdentityType type
}
class ObjectIdentityType {
<<enumeration>>
  +  X509_PUBLIC_KEY_INFO
  +  BID
}

ObjectIdentity "1" *--> "type 1" ObjectIdentityType 
AbstractCrossChainCertificate "1" *--> "type 1" CrossChainCertificateTypeEnum 
AbstractCrossChainCertificate "1" *--> "proof 1" IssueProof 
AbstractCrossChainCertificate "1" *--> "issuer 1" ObjectIdentity 
AbstractCrossChainCertificate  -->  IssueProof 

从上图,可以看到证书的类型,域名和域名空间证书,都作为DOMAIN_NAME_CERTIFICATE类型。

AbstractCrossChainCertificate为证书的主要实现,包含下列字段:

主体结构介绍

上文中提到了主体ID类型ObjectIdentity,目前支持两种类型X509_PUBLIC_KEY_INFOBID

证书的credentialSubject字段可以按照证书类型反序列化为不同的类型:

序列化介绍

跨链证书的序列化使用了AntChain Bridge 提供的一个TLV序列化工具(使用介绍)。

跨链证书支持保存为PEM格式,证书对象可以通过CrossChainCertificateUtil转化至PEM格式,比如:

-----BEGIN BCDNS TRUST ROOT CERTIFICATE-----
AADZAQAAAAABAAAAMQEABAAAAHRlc3QCAAEAAAAAAwA7AAAAAAA1AAAAAAABAAAA
AQEAKAAAAGRpZDpiaWQ6ZWZiVGh5NXNiRzdQM21GVXAyRVdONW9RR1g2TFVHd2cE
AAgAAAChN2RlAAAAAAUACAAAACFrRWcAAAAABgDQAAAAAADKAAAAAAADAAAAYmlm
AQA7AAAAAAA1AAAAAAABAAAAAQEAKAAAAGRpZDpiaWQ6ZWZiVGh5NXNiRzdQM21G
VXAyRVdONW9RR1g2TFVHd2cCAHoAAAB7InB1YmxpY0tleSI6W3sidHlwZSI6IkVE
MjU1MTkiLCJwdWJsaWNLZXlIZXgiOiJiMDY1NjZhZjY2NWVlNTUwNjM1ZTk4Mzc1
YzdiMzg4NzZhMmNjMzFlM2E5ZDgxODk1N2U0NmEyNGEwZjI1YTc0YTQ0Y2NlIn1d
fQcAiAAAAAAAggAAAAAAAwAAAFNNMwEAIAAAALKKKxzUTalyw2vp96hOJ3TuDsNZ
/pjgltTL+ip2bsRNAgAHAAAARWQyNTUxOQMAQAAAAMsFd4D9Gf3hiIebiq5MFTpw
IV4AUtT9d+Y8gRK/kmNySzlJ32Shw3FNj8Uvy3yjBxjO6vKOWH5Jhu936zMWOgk=
-----END BCDNS TRUST ROOT CERTIFICATE-----

星火链网(BIF)BCDNS

目前SDK支持星火链网的BCDNS服务客户端,这里介绍其配置项和如何实例化该客户端。

首先介绍配置,代码可,主要分为两部分,一部分certificationServiceConfig是用于和颁证服务通信、鉴权,另一部分chainConfig用于和星火链网交互。

{
    "certificationServiceConfig":{
        "authorizedKeyPem":"-----BEGIN PRIVATE KEY-----\nMFECAQEwB...WnSkTM4=\n-----END PRIVATE KEY-----\n",
        "authorizedPublicKeyPem":"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2Vw...KDyWnSkTM4=\n-----END PUBLIC KEY-----\n",
        "authorizedSigAlgo":"Ed25519",
        "clientCrossChainCertPem":"-----BEGIN RELAYER CERTIFICATE-----\nAAAIA...DyLBh2ITiTQ4IVYlXkYjSBw==\n-----END RELAYER CERTIFICATE-----\n",
        "clientPrivateKeyPem":"-----BEGIN PRIVATE KEY-----\nMFECAQE...V+RqJKDyWnSkTM4=\n-----END PRIVATE KEY-----\n",
        "sigAlgo":"Ed25519",
        "url":"http://localhost:8112"
    },
    "chainConfig":{
        "bifAddress":"did:bid:efbThy5sb...5oQGX6LUGwg",
        "bifChainRpcUrl":"http://test.bifcore.bitfactory.cn",
        "bifPrivateKey":"priSPKgnr1a...JNaackZJUo",
        "domainGovernContract":"did:bid:efjQKy4HEshTueHGKzrJPATKoFeNgHKo",
        "ptcGovernContract":"did:bid:efgTq9DtP2zHAhmKp7M4BhN6AVYMVWV2",
        "relayerGovernContract":"did:bid:efSnvCFJSnpWiQiVhnh8Eimgyi4RoNpA"
    }
}

下面对各个配置项给出解释:

首先是颁证服务的配置:

然后是星火链网的配置:

准备完配置之后,可以根据这里创建一个BCDNS实例。

Embedded BCDNS

Embedded BCDNS是内嵌在服务内部的BCDNS,提供中心化的权威服务,会使用一把私钥为跨链网络提供认证、准入等功能,按照服务端要求可以通过简单配置接入BCDNS,具体内容可以参考这里

社区治理

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

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

scan dingding2024

发送邮件到antchainbridge@service.alipay.com

License

详情参考LICENSE