接入 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			# 需要连接Org1的endorser的证书1,有则配
    ├── org2-tlsca.crt			# 需要连接Org2的endorser的证书2,有则配
    └── stub.toml				# stub配置文件

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

[common]
    name = 'fabric'
    type = 'Fabric1.4'

[fabricServices]
    channelName = 'mychannel'
    orgUserName = 'fabric_admin'
    orgUserAccountPath = 'classpath:accounts/fabric_admin'
    ordererTlsCaFile = 'orderer-tlsca.crt'
    ordererAddress = 'grpcs://localhost:7050'

[orgs]
    [orgs.Org1]
         tlsCaFile = 'org1-tlsca.crt'
         adminName = 'fabric_admin_org1'
         endorsers = ['grpcs://localhost:7051']

    [orgs.Org2]
         tlsCaFile = 'org2-tlsca.crt'
         adminName = 'fabric_admin_org2'
         endorsers = ['grpcs://localhost:9051']

配置步骤

生成配置文件

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
# 拷贝 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
# 拷贝 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'
    orgUserName = 'fabric_admin' # 指定一个机构的admin账户,用于与orderer通信
    ordererTlsCaFile = 'orderer-tlsca.crt' # orderer证书名字,指向与此配置文件相同目录下的证书
    ordererAddress = 'grpcs://localhost:7050' # orderer的url

[orgs] # 机构节点列表
    [orgs.Org1] # 机构1:Org1
         tlsCaFile = 'org1-tlsca.crt' # Org1的证书
         adminName = 'fabric_admin_org1' # Org1的admin账户,在下一步骤中配置
         endorsers = ['grpcs://localhost:7051'] # endorser的ip:port列表,可配置多个

    [orgs.Org2] # 机构2:Org2
         tlsCaFile = 'org2-tlsca.crt' # Org2的证书
         adminName = 'fabric_admin_org2' # Org2的admin账户,在下一步骤中配置
         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目录下执行命令,部署代理合约

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

部署成功

SUCCESS: WeCrossProxy has been deployed to chains/fabric

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

部署跨链资源

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