配置文件

WeCross通过配置文件管理Stub以及每个Stub中的跨链资源,启动时首先加载配置文件,根据配置去初始化各个Stub以及相应的资源,如果配置出错,则启动失败。

注解

  • Toml是一种语义化配置文件格式,可以无二义性地转换为一个哈希表,支持多层级配置,无缩进和空格要求,配置容错率高。

配置结构

WeCross的配置分为跨链服务配置和链配置两级。

  • 跨链服务配置:P2P、RPC等和WeCross服务相关的必要信息。
  • 链配置:与区块链建连信息和链上资源信息。

如果链配置缺省,WeCross仍能启动成功,只是不能提供任何跨链服务。

WeCross跨链服务配置文件名为wecross.toml,链配置文件名为stub.toml,配置的目录结构如下:

# 这是conf目录下标准的配置结构,表示配置了两条链,分别叫bcos和fabric
.
├── log4j2.xml   // 日志配置文件,无需更改
├── stubs         
│   ├── bcos
│   │   └── stub.toml
│   └── fabric
│       └── stub.toml
└── wecross.toml

跨链服务配置

配置示例文件wecross-sample.toml位于conf目录,使用前需拷贝成指定文件名wecross.toml

配置示例如下:

[common]
    network = 'payment'
    visible = true

[stubs]
    path = 'classpath:stubs'

[server]
    address = '127.0.0.1'
    port = 8250

[p2p]
    listenIP = '0.0.0.0'
    listenPort = 25500
    caCert = 'classpath:p2p/ca.crt'
    sslCert = 'classpath:p2p/node.crt'
    sslKey = 'classpath:p2p/node.key'
    peers = ['127.0.0.1:25501','127.0.0.1:25502']

[test]
    enableTestResource = false

跨链服务配置有五个配置项,分别是[common][stubs][server][p2p]以及[test],各个配置项含义如下:

  • [common] 通用配置
    • network:字符串;跨链分区标识符;通常一种跨链业务/应用为一个跨链分区
    • visible:布尔;可见性;标明当前跨链分区下的资源是否对其他跨链分区可见
  • [stubs] Stub配置
    • path:字符串;Stub配置的根目录;WeCross从该目录下去加载各个Stub的配置
  • [server] RPC配置
    • address:字符串;本机IP地址;WeCross通过Spring Boot内置的Tomcat启动Web服务
    • port:整型;WeCross服务端口;需要未被占用
  • [p2p] 组网配置
    • listenIP:字符串;监听地址;一般为'0.0.0.0'
    • listenPort :整型;监听端口;WeCross节点之间的消息端口
    • caCert :字符串;根证书路径;拥有相同根证书的WeCross节点才能互相通讯
    • sslCert :字符串;节点证书路径;WeCross节点的证书
    • slKey :字符串;节点私钥路径;WeCross节点的私钥
    • peers:字符串数组;peer列表;需要互相连接的WeCross节点列表
  • [test] 测试配置
    • enableTestResource:布尔;测试资源开关;如果开启,那么即使没有配置Stub的资源信息,也可以根据测试资源体验WeCross的部分功能。

注:

  1. WeCross启动时会把conf目录指定为classpath,若配置项的路径中开头为classpath:,则以conf为相对目录。
  2. [p2p]配置项中的证书和私钥可以通过create_cert.sh脚本生成。
  3. 若通过build_wecross.sh脚本生成的项目,那么已自动帮忙配置好了wecross.toml,包括P2P的配置,其中Stub的根目录默认为stubs

链配置

链配置即每个Stub的配置,是WeCross跨链业务的核心,配置了Stub和区块链交互所需的信息,以及注册了各个链需要参与跨链的资源。

WeCross启动后会在wecross.toml中所指定的Stubs的根目录下去遍历所有的一级目录,目录名即为Stub的名字,不同的目录代表不同的链,然后尝试读取每个目录下的stub.toml文件。

目前WeCross支持的Stub类型包括:FISCO BCOSFabric

FISCO BCOS

配置示例如下:

[common]
    stub = 'bcos' # stub must be same with directory name
    type = 'BCOS'

[smCrypto]
    # boolean
    enable = false

[account]
    accountFile = 'classpath:/stubs/bcos/0xa1ca07c7ff567183c889e1ad5f4dcd37716831ca.pem'
    password = ''  # if you choose .p12, then password is required

[channelService]
    timeout = 60000  # millisecond
    caCert = 'classpath:/stubs/bcos/ca.crt'
    sslCert = 'classpath:/stubs/bcos/sdk.crt'
    sslKey = 'classpath:/stubs/bcos/sdk.key'
    groupId = 1
    connectionsStr = ['127.0.0.1:20200']

# resources is a list
[[resources]]
    # name cannot be repeated
    name = 'HelloWorldContract'
    type = 'BCOS_CONTRACT'
    contractAddress = '0x8827cca7f0f38b861b62dae6d711efe92a1e3602'
[[resources]]
    name = 'FirstTomlContract'
    type = 'BCOS_CONTRACT'
    contractAddress = '0x584ecb848dd84499639fbe2581bfb8a8774b485c'

配置方法详见FISCO BCOS Stub配置

Fabric

配置示例如下:

[common]
    stub = 'fabric'
    type = 'FABRIC'

# fabricServices is a list
[fabricServices]
    channelName = 'mychannel'
    orgName = 'Org1'
    mspId = 'Org1MSP'
    orgUserName = 'Admin'
    orgUserKeyFile = 'classpath:/stub/fabric/orgUserKeyFile'
    orgUserCertFile = 'classpath:/stub/fabric/orgUserCertFile'
    ordererTlsCaFile = 'classpath:/stub/fabric/ordererTlsCaFile'
    ordererAddress = 'grpcs://127.0.0.1:7050'

[peers]
    [peers.org1]
        peerTlsCaFile = 'classpath:/stub/fabric/peerOrg1CertFile'
        peerAddress = 'grpcs://127.0.0.1:7051'
    [peers.org2]
         peerTlsCaFile = 'classpath:/stub/fabric/peerOrg2CertFile'
         peerAddress = 'grpcs://127.0.0.1:9051'

# resources is a list
[[resources]]
    # name cannot be repeated
    name = 'HelloWeCross'
    type = 'FABRIC_CONTRACT'
    chainCodeName = 'mycc'
    chainLanguage = "go"
    peers=['org1','org2']
[[resources]]
    name = 'HelloWorld'
    type = 'FABRIC_CONTRACT'
    chainCodeName = 'mygg'
    chainLanguage = "go"
    peers=['org1','org2']

配置方法详见Fabric Stub配置