接入 Fabric 1.4
WeCross Fabric Stub 是 WeCross Router的插件,让Router具备接入Fabric 1.4的链的能力。其要点包括:
- 插件安装
- 接入配置:用于接入相应的Fabric 1.4链
- 账户配置:用于用相应账户发交易
插件安装
在生成router时,默认安装Fabric 1.4插件,安装目录为router下的plugin
目录:
- cd ~/wecross/routers-payment/127.0.0.1-8251-25501/
- tree plugin/
- plugin/
- └── fabric1-stub-XXXXX.jar
用户如有特殊需求,可以自行编译,替换plugin
目录下的插件。
手动安装
下载编译
- git clone https://github.com/WeBankFinTech/WeCross-Fabric1-Stub.git
- cd WeCross-Fabric1-Stub
- bash gradlew assemble # 在 dist/apps/下生成fabric1-stub-XXXXX.jar
安装插件
- cp dist/apps/fabric1-stub-XXXXX.jar ~/wecross/routers-payment/127.0.0.1-8250-25500/plugin/
注:若router中配置了两个相同的插件,插件冲突,会导致router启动失败。
账户配置
在router中配置Fabric账户,用户可在sdk中指定router用相应的账号发交易。
完整配置
配置完成的账户如下,在accounts
目录中
- accounts/ # router的账户目录,所有账户的文件夹放在此目录下
- └── fabric_admin # 目录名即为此账户名,SDK发交易时,指定的即为处的账户名
- ├── account.toml # 账户配置文件
- ├── user.crt # Fabric的用户证书
- └── user.key # Fabric的用户私钥
其中 account.toml
为账户配置文件
- [account]
- type = 'Fabric1.4' # 采用插件的名字
- mspid = 'Org1MSP' # 账户对应机构的MSP ID
- keystore = 'user.key' # 账户私钥文件名字,指向与此文件相同目录下的私钥文件
- signcert = 'user.crt' # 账户证书名字,指向与此文件相同目录下的证书文件
配置步骤
生成配置文件
为router生成某个账户的配置,在router目录下执行
- cd ~/wecross/routers-payment/127.0.0.1-8251-25501/
- # 举例1:生成名字为fabric_admin的账户配置 -t 指定使用Fabric1.4插件生成 -n 设置一个账户名
- bash add_account.sh -t Fabric1.4 -n fabric_admin
- # 举例2:生成名字为fabric_user1的账户配置 -t 指定使用Fabric1.4插件生成 -n 设置一个账户名
- bash add_account.sh -t Fabric1.4 -n fabric_user1
生成后,conf/accounts
目录下出现对应名字的账户目录,接下来需将相关账户文件拷贝入目录中。
拷贝账户文件
以fabric-sample/first-network
的crypto-config
为例,配置其中一个账户即可
- 若配置 Org1 的 Admin
- # 拷贝用户私钥,命名为 user.key
- cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk accounts/fabric_admin/user.key
- # 拷贝用户证书,命名为 user.crt
- cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/*.pem accounts/fabric_admin/user.crt
- 若配置 Org1的 User1
- # 拷贝用户私钥,命名为 user.key
- cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/*_sk accounts/fabric_user1/user.key
- # 拷贝用户证书,命名为 user.crt
- cp ~/demo/fabric/fabric-sample/first-network/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/*.pem accounts/fabric_user1/user.crt
编辑配置文件
编辑 account.toml
- vim conf/accounts/<account_name>/account.toml
内容为
- [account]
- type = 'Fabric1.4' # 采用插件的名字
- mspid = 'Org1MSP' # 账户对应机构的MSP ID
- keystore = 'user.key' # 账户私钥文件名字,指向与此文件相同目录下的私钥文件
- signcert = 'user.crt' # 账户证书名字,指向与此文件相同目录下的证书文件
插件配置
在router中配置需接入的链,访问链上资源。
完整配置
配置完成如下,在chains
目录中
- chains # router的stub的配置目录,所有的stub都在此目录下配置
- └── fabric # 此链的名字,名字可任意指定,与链类型无关
- ├── orderer-tlsca.crt # orderer证书
- ├── org1-tlsca.crt # 需要连接的peer的证书1,有则配
- ├── org2-tlsca.crt # 需要连接的peer的证书2,有则配
- └── stub.toml # stub配置文件
其中,stub.toml
为接入的链的配置文件
- [common]
- name = 'fabric'
- type = 'Fabric1.4'
- [fabricServices]
- channelName = 'mychannel'
- orgName = 'Org1'
- mspId = 'Org1MSP'
- orgUserName = 'fabric_admin'
- orgUserAccountPath = 'classpath:accounts/fabric_admin'
- ordererTlsCaFile = 'orderer-tlsca.crt'
- ordererAddress = 'grpcs://localhost:7050'
- [peers]
- [peers.org1]
- peerTlsCaFile = 'org1-tlsca.crt'
- peerAddress = 'grpcs://localhost:7051'
- [peers.org2]
- peerTlsCaFile = 'org2-tlsca.crt'
- peerAddress = 'grpcs://localhost:9051'
- # resources is a list
- [[resources]]
- # name cannot be repeated
- name = 'abac'
- type = 'FABRIC_CONTRACT'
- chainCodeName = 'mycc'
- chainLanguage = "go"
- peers=['org1','org2']
配置步骤
生成配置文件
- cd ~/wecross/routers-payment/127.0.0.1-8251-25501
- bash add_chain.sh -t Fabric1.4 -n fabric # -t 链类型,-n 指定链名字
- # 查看生成目录
- tree conf/chains/fabric
生成的目录结构如下:
- conf/chains/fabric
- └── stub.toml # chain配置文件
拷贝链证书
以fabric-sample/first-network
的crypto-config
为例
- # 拷贝 orderer证书
- 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
- # 拷贝 peer.org1 证书
- 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
- # 拷贝 peer.org2 证书
- 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
编辑配置文件
- vim conf/chains/fabric/stub.toml
- 基础配置
- [common]
- name = 'fabric' # 指定的连接的链的名字,对应path中的{zone}/{chain}/{resource}的chain
- type = 'Fabric1.4' # 采用插件的名字
- 配置链
- [fabricServices]
- channelName = 'mychannel'
- orgName = 'Org1' # 指定一个机构机构名
- mspId = 'Org1MSP' # 相应的机构MSP ID
- orgUserName = 'fabric_admin' # 机构的 admin 账户名
- orgUserAccountPath = 'classpath:accounts/fabric_admin'# 账户配置步骤已配置好的admin账户目录
- ordererTlsCaFile = 'orderer-tlsca.crt' # orderer证书名字,指向与此配置文件相同目录下的证书
- ordererAddress = 'grpcs://localhost:7050' # orderer的url
- [peers] # peers列表
- [peers.org1]
- peerTlsCaFile = 'org1-tlsca.crt' # peer.org1证书名,指向与此配置文件相同目录下的证书
- peerAddress = 'grpcs://localhost:7051' # peer.org1的URL
- [peers.org2]
- peerTlsCaFile = 'org2-tlsca.crt' # peer.org2证书名,指向与此配置文件相同目录下的证书
- peerAddress = 'grpcs://localhost:9051' # peer.org2的URL
- 配置跨链资源
- # resources is a list
- [[resources]]
- # name cannot be repeated
- name = 'HelloWeCross' # 资源名,对应path中的{zone}/{chain}/{resource}中的resource
- type = 'FABRIC_CONTRACT' # 合约类型,默认即可
- chainCodeName = 'mycc' # chaincode名字
- chainLanguage = "go" # chaincode编程语言
- peers=['org1','org2'] # 此chaincode对应的peers列表,在[peers]中需
- [[resources]] # 另一个资源的配置
- name = 'HelloWorld'
- type = 'FABRIC_CONTRACT'
- chainCodeName = 'mygg'
- chainLanguage = "go"
- peers=['org1','org2']