接入 Fabric 1.4

WeCross Fabric Stub 是 WeCross Router的插件,让Router具备接入Fabric 1.4的链的能力。其要点包括:

  • 插件安装
  • 接入配置:用于接入相应的Fabric 1.4链
  • 账户配置:用于用相应账户发交易

插件安装

在生成router时,默认安装Fabric 1.4插件,安装目录为router下的plugin目录:

  1. cd ~/wecross/routers-payment/127.0.0.1-8251-25501/
  2. tree plugin/
  3. plugin/
  4. └── fabric1-stub-XXXXX.jar

用户如有特殊需求,可以自行编译,替换plugin目录下的插件。

手动安装

下载编译

  1. git clone https://github.com/WeBankFinTech/WeCross-Fabric1-Stub.git
  2. cd WeCross-Fabric1-Stub
  3. bash gradlew assemble # 在 dist/apps/下生成fabric1-stub-XXXXX.jar

安装插件

  1. cp dist/apps/fabric1-stub-XXXXX.jar ~/wecross/routers-payment/127.0.0.1-8250-25500/plugin/

注:若router中配置了两个相同的插件,插件冲突,会导致router启动失败。

账户配置

在router中配置Fabric账户,用户可在sdk中指定router用相应的账号发交易。

完整配置

配置完成的账户如下,在accounts目录中

  1. accounts/ # router的账户目录,所有账户的文件夹放在此目录下
  2. └── fabric_admin # 目录名即为此账户名,SDK发交易时,指定的即为处的账户名
  3. ├── account.toml # 账户配置文件
  4. ├── user.crt # Fabric的用户证书
  5. └── user.key # Fabric的用户私钥

其中 account.toml为账户配置文件

  1. [account]
  2. type = 'Fabric1.4' # 采用插件的名字
  3. mspid = 'Org1MSP' # 账户对应机构的MSP ID
  4. keystore = 'user.key' # 账户私钥文件名字,指向与此文件相同目录下的私钥文件
  5. signcert = 'user.crt' # 账户证书名字,指向与此文件相同目录下的证书文件

配置步骤

生成配置文件

为router生成某个账户的配置,在router目录下执行

  1. cd ~/wecross/routers-payment/127.0.0.1-8251-25501/
  2. # 举例1:生成名字为fabric_admin的账户配置 -t 指定使用Fabric1.4插件生成 -n 设置一个账户名
  3. bash add_account.sh -t Fabric1.4 -n fabric_admin
  4. # 举例2:生成名字为fabric_user1的账户配置 -t 指定使用Fabric1.4插件生成 -n 设置一个账户名
  5. bash add_account.sh -t Fabric1.4 -n fabric_user1

生成后,conf/accounts目录下出现对应名字的账户目录,接下来需将相关账户文件拷贝入目录中。

拷贝账户文件

fabric-sample/first-networkcrypto-config为例,配置其中一个账户即可

  • 若配置 Org1 的 Admin
  1. # 拷贝用户私钥,命名为 user.key
  2. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/*_sk accounts/fabric_admin/user.key
  3. # 拷贝用户证书,命名为 user.crt
  4. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/*.pem accounts/fabric_admin/user.crt
  • 若配置 Org1的 User1
  1. # 拷贝用户私钥,命名为 user.key
  2. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/*_sk accounts/fabric_user1/user.key
  3. # 拷贝用户证书,命名为 user.crt
  4. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/*.pem accounts/fabric_user1/user.crt

编辑配置文件

编辑 account.toml

  1. vim conf/accounts/<account_name>/account.toml

内容为

  1. [account]
  2. type = 'Fabric1.4' # 采用插件的名字
  3. mspid = 'Org1MSP' # 账户对应机构的MSP ID
  4. keystore = 'user.key' # 账户私钥文件名字,指向与此文件相同目录下的私钥文件
  5. signcert = 'user.crt' # 账户证书名字,指向与此文件相同目录下的证书文件

接入链配置

在router中配置需接入的链,访问链上资源。

完整配置

配置完成如下,在chains目录中

  1. chains # router的stub的配置目录,所有的stub都在此目录下配置
  2. └── fabric # 此链的名字,名字可任意指定,与链类型无关
  3. ├── orderer-tlsca.crt # orderer证书
  4. ├── org1-tlsca.crt # 需要连接Org1的endorser的证书1,有则配
  5. ├── org2-tlsca.crt # 需要连接Org2的endorser的证书2,有则配
  6. └── stub.toml # stub配置文件

其中,stub.toml 为接入的链的配置文件

  1. [common]
  2. name = 'fabric'
  3. type = 'Fabric1.4'
  4. [fabricServices]
  5. channelName = 'mychannel'
  6. orgUserName = 'fabric_admin'
  7. ordererTlsCaFile = 'orderer-tlsca.crt'
  8. ordererAddress = 'grpcs://localhost:7050'
  9. [orgs]
  10. [orgs.Org1]
  11. tlsCaFile = 'org1-tlsca.crt'
  12. adminName = 'fabric_admin_org1'
  13. endorsers = ['grpcs://localhost:7051']
  14. [orgs.Org2]
  15. tlsCaFile = 'org2-tlsca.crt'
  16. adminName = 'fabric_admin_org2'
  17. endorsers = ['grpcs://localhost:9051']

配置步骤

生成配置文件

  1. cd ~/wecross/routers-payment/127.0.0.1-8251-25501
  2. bash add_chain.sh -t Fabric1.4 -n fabric # -t 链类型,-n 指定链名字
  3. # 查看生成目录
  4. tree conf/chains/fabric

生成的目录结构如下:

  1. conf/chains/fabric
  2. └── stub.toml # chain配置文件

拷贝链证书

fabric-sample/first-networkcrypto-config为例

  1. # 拷贝 orderer证书
  2. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem conf/chains/fabric/orderer-tlsca.crt
  3. # 拷贝 Org1 证书
  4. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt conf/chains/fabric/org1-tlsca.crt
  5. # 拷贝 Org2 证书
  6. cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt conf/chains/fabric/org2-tlsca.crt

编辑配置文件

  1. vim conf/chains/fabric/stub.toml
  • 基础配置
  1. [common]
  2. name = 'fabric' # 指定的连接的链的名字,对应path中的{zone}/{chain}/{resource}的chain
  3. type = 'Fabric1.4' # 采用插件的名字
  • 配置链
  1. [fabricServices]
  2. channelName = 'mychannel'
  3. orgUserName = 'fabric_admin' # 指定一个机构的admin账户,用于与orderer通信
  4. ordererTlsCaFile = 'orderer-tlsca.crt' # orderer证书名字,指向与此配置文件相同目录下的证书
  5. ordererAddress = 'grpcs://localhost:7050' # orderer的url
  6. [orgs] # 机构节点列表
  7. [orgs.Org1] # 机构1:Org1
  8. tlsCaFile = 'org1-tlsca.crt' # Org1的证书
  9. adminName = 'fabric_admin_org1' # Org1的admin账户,在下一步骤中配置
  10. endorsers = ['grpcs://localhost:7051'] # endorser的ip:port列表,可配置多个
  11. [orgs.Org2] # 机构2:Org2
  12. tlsCaFile = 'org2-tlsca.crt' # Org2的证书
  13. adminName = 'fabric_admin_org2' # Org2的admin账户,在下一步骤中配置
  14. endorsers = ['grpcs://localhost:9051'] # endorser的ip:port列表,可配置多个

配相关账户

stub.toml中涉及三个账户,采用账户配置给出的步骤配置入conf/accounts目录即可:

  • fabric_admin:fabricServices的admin账户,用于与orderer通信,此处选择一个Org的admin账户作为此账户即可
  • fabric_admin_org1:与Org1的endorser通信的账户,需配置Org1的admin
  • fabric_admin_org2:与Org2的endorser通信的账户,需配置Org2的admin,注意生成账户后需手动将默认的mspid改为 Org2MSP

部署代理合约

配置完成后,在router目录下执行命令,部署代理合约

  1. java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment deploy chains/fabric # deploy conf下的链配置位置

部署成功

  1. SUCCESS: WeCrossProxy has been deployed to chains/fabric

代理合约部署完成后,即可启动router,接入链配置完成

部署跨链资源

用户可通过WeCross控制台部署和升级链码,相关操作见控制台说明部分: