接入 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-networkcrypto-config为例,配置其中一个账户即可

  • 若配置 Org1 的 Admin
# 拷贝用户私钥,命名为 user.key
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
# 拷贝用户证书,命名为 user.crt
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
# 拷贝用户私钥,命名为 user.key
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 
# 拷贝用户证书,命名为 user.crt
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

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-networkcrypto-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']