【小宅按】区块链本质上是一种团队活动,成功源自相互的开放与协作。真实业务驱动的区块链需要多方服务提供商的参与,而且客户拥有对区块链网络的最终选择权。华为不断探索多云区块链网络的互连和互操作,与合作伙伴共同提供区块链云化解决方案和服务。­­­­

一. 背景

为了验证华为云BCS区块链服务云上云下融合部署能力、支持跨云部署能力,以及华为云BCS服务与社区原生Fabric网络的融合部署能力,我们做了如下的部署验证,证明了方案的可行性,完成了部署并实测了invoke交易,过程中顺便验证了下Fabric1.2版本新增的discovery功能,以及已部署好的peer节点进行goleverdb数据库切换couchdb数据库操作。故有本文,欢迎各位华为云BCS服务使用者和关注者,以及Fabric爱好者参与交流。

  • 跨云部署
  • discovery服务
  • goleverdb数据库切换couchdb
  • 云上云下融合部署(华为云BCS服务与社区原生Fabric网络的融合部署)

二. 跨云部署

1、背景与步骤

A云上已经创建好fabric服务,并且已创建好组织org1.huawei及通道silk-road-chain 按照以下步骤,验证Fabric的从A云到华为云的打通部署

•用A云上Fabric已生成的证书,开源1.2镜像,模拟新peer0加入通道silk-road-chain

•加入通道后,实例化链码并进行invoke操作

•更新anchor peer及discovery

•用新生成的证书,华为1.1镜像,模拟新peer1加入通道silk-road-chain

2、用A云上Fabric已生成的证书,开源1.2镜像,模拟新peer0加入通道silk-road-chain

由于A云上已经创建好了组织及通道,只需要直接验证加入通道即可

• 在华为云上订购一个ECS,并安装docker,然后下载官方1.2peer和cli镜像

docker pull hyperledger/fabric-peer:1.2.0
docker pull hyperledger/fabric-tools:1.2.0

  • 修改华为云安全组 由于peer将会运行在7051端口,在ECS对应的安全组里增加7051配置

• 准备core.yaml配置文件 注意由于镜像是1.2版本,故需要用1.2版本的core.yaml来修改,否则会有问题 开源的core.yaml,修改

peer.id jdoe --> peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering
peer.chaincodeListenAddress # chaincodeListenAddress: 0.0.0.0:7052 --> chaincodeListenAddress: 0.0.0.0:7052
peer.address 0.0.0.0:7051 --> peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering:7051
peer.gossip.bootstrap 127.0.0.1:7051 --> 0.0.0.0:7051
peer.tls.enabled false --> true
peer.tls.clientAuthRequired false --> yes
peer.tls.cert file: tls/server.crt --> file: msp/tls/server.crt
peer.tls.key file: tls/server.key --> file: msp/tls/server.key
peer.tls.rootcert file: tls/ca.crt --> file: msp/tls/ca.crt
peer.tls.clientRootCAs file: - tls/ca.crt --> file: - msp/tls/ca.crt - /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem
peer.tls.clientKey file: "" --> file: msp/tls/server.key
peer.tls.clientCert file: "" --> file: msp/tls/server.crt
peer.localMspId SampleOrg --> huaweiMSP

  • 准备证书

A云侧已提供的证书见附件crypto-config.zip文件 core.yaml中peer.tls.clientRootCAs配置项需要的证书,order的tls证书/home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem来自crypto-config.zip中ordererOrganizations/icn.backbonetestnet.baas.dev.icn.engineering/tlsca/目录,peer的tls证书msp/tls/ca.crt来自crypto-config.zip中peerOrganizations/org1.huawei.backbonetestnet.baas.dev.icn.engineering/peers/peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering/tls/ peer节点和cli节点的/home/msp证书需要使用组织的Admin证书,来自crypto-config.zip中peerOrganizations/org1.huawei.backbonetestnet.baas.dev.icn.engineering/users/Admin@org1.huawei.backbonetestnet.baas.dev.icn.engineering/msp路径 peer节点和cli节点的/home/msp/tls证书都需要使用组织节点的tls证书,来自crypto-config.zip中peerOrganizations/org1.huawei.backbonetestnet.baas.dev.icn.engineering/peers/peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering/tls

  • 启动peer容器

docker run -p 7051:7051 -p 7052:7052 -p 7053:7053 -v /var/run:/host/var/run -e CORE_VM_ENDPOINT="unix:///host/var/run/docker.sock" -e CORE_PEER_ADDRESS="0.0.0.0:7052" -e CORE_PEER_GOSSIP_ORGLEADER=false -e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering:7051 -e CORE_PEER_GOSSIP_USELEADERELECTION=true -e CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering:7051 -it http://docker.io/hyperledger/fabric-peer:1.2.0 bash

配置CORE_VM_ENDPOINT给链码实例化时使用,必须加CORE_PEER_ADDRESS且必须为IP,给链码容器用,否则链码容器没有域名连不上peer GOSSIP相关的四个环境变量是给后面discovery使用的,不配置的话discovery会不正常

docker cp core.yaml ${peerCID}:/home

docker cp silk-road-chain.genesis.block ${peerCID}:/home
docker cp ordererOrganizations/icn.backbonetestnet.baas.dev.icn.engineering/tlsca/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem ${peerCID}:/home
docker cp peerOrganizations/org1.huawei.backbonetestnet.baas.dev.icn.engineering/users/Admin@org1.huawei.backbonetestnet.baas.dev.icn.engineering/msp ${peerCID}:/home
docker cp peerOrganizations/org1.huawei.backbonetestnet.baas.dev.icn.engineering/peers/peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering/tls ${peerCID}:/home/msp

  • 在容器中配置/etc/hosts

echo "35.158.219.246 orderer0.icn.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts
echo "49.4.14.175 peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts

•容器中启动peer命令

export FABRIC_CFG_PATH=/home
peer node start

•启动cli容器

docker run -it -v /var/run:/host/var/run -e CORE_VM_ENDPOINT="unix:///host/var/run/docker.sock" http://docker.io/hyperledger/fabric-tools:1.2.0 bash
echo "35.158.219.246 orderer0.icn.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts
echo "49.4.14.175 peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts
CORE_PEER_ADDRESS=peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering:7051
export FABRIC_CFG_PATH=/home

•加入通道 从A云侧部署的Fabric上取到通道的genesis block配置文件(silk-road-chain.genesis.block) 进入cli容器中执行

peer channel join -b /home/silk-road-chain.genesis.block --orderer orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem --tls true

•加入成功截图

•查看已加入通道

peer channel list --orderer orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem --tls

•其他 获取通道配置

peer channel fetch config silk-road.pb --orderer orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 -c silk-road-chain --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem --tls

3、加入通道中遇到的坑

•问题

Error: error getting chaincode code sacc: : failed with error: "exec: not started",>

不能再用peer做cli,需要用fabric-tools

•问题

peer channel join -b /home/silk-road-chain.protobuf --orderer orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem --tls true

2018-08-07 12:11:54.717 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Error: proposal failed (err: bad proposal response 500)

2018-08-07 12:11:54.723 UTC [ledgermgmt] CreateLedger -> INFO 02c Creating ledger [silk-road-chain] with genesis block
2018-08-07 12:11:54.728 UTC [endorser] ProcessProposal -> ERRO 02d [][9d432b23] simulateProposal() resulted in chaincode name:"cscc" response status 500 for txid: 9d432b23f3ad660af90e38bb6a4f6079dd60da9132f130b926556fdc29b3b79a

channel join时报此错,后发现-b参数应该用genesis.block而不是protobuf

4、加入通道后,实例化链码并进行invoke操作

•安装链码 进入cli容器中创建链码根目录

docker exec -it xx bash
cd $GOPATH/src
mkdir -p fabbank

将链码文件拷贝到容器中创建好的链码根目录下

docker cp fabbankid.go xxx:/opt/gopath/src/fabbank

放置好链码的目录如下 /opt/gopath/src/fabbank/fabbankio.go

容器中执行链码安装

peer chaincode install -n fabbank -v 1.0 -l golang -p fabbank

•链码实例化

peer chaincode instantiate -o orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --tls true --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem -C silk-road-chain -n fabbank -v 1.0 -c '{"Args":["init","a","200","b","300"]}' -P "OR ('huaweiMSP.member')"

•链码invoke

peer chaincode invoke -o orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --tls true --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem -C silk-road-chain -n fabbank -c '{"Args":["creditAccountInfo","bohai","zhangsan","211004197001010000","6225777788889999","15600000000"]}'

peer chaincode invoke -o orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --tls true --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem -C silk-road-chain -n fabbank -c '{"Args":["authAccount","bohai","211004197001010000"]}'

•链码query

peer chaincode query -C silk-road-chain -n fabbank -c '{"Args":["authAccount","bohai","234567"]}'

•查询已安装的链码

peer chaincode list -C silk-road-chain --installed
Get installed chaincodes on peer:
Name: sacc, Version: 0, Path: sacc, Id: b60426d87dcfbf436628f6b23371d9385e3d3a4f1fd1724031ca3e182d8e045f

•查询已实例化的链码

peer chaincode list -C silk-road-chain --instantiated
Get instantiated chaincodes on channel silk-road-chain:
Name: fabbank, Version: 1.0, Escc: escc, Vscc: vscc
Name: fabbank2, Version: 1.0, Escc: escc, Vscc: vscc
Name: mycc3, Version: 1.0, Escc: escc, Vscc: vscc

5、实例化链码及invoke时遇到的坑

•问题

Error: could not assemble transaction, err Proposal response was not successful, error code 500, msg failed to execute transaction 0a25ad459d622e1a8f35c6fa192c027dd5f74738acf76373c35f30d1e061e2d7: error starting container: error starting container: Post http://unix.sock/containers/create?name=dev-peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering-sacc-0: dial unix /var/run/docker.sock: connect: no such file or directory

在fabric-tools(cli)里配了docker run -v /var/run:/host/var/run -e CORE_VM_ENDPOINT还是不行,后来才想起来是要给peer配置的

•问题

Error: could not assemble transaction, err Proposal response was not successful, error code 500, msg failed to execute transaction a85d6d5c144677750ef70c8d0acc3d8b4e3bbb7220141d3526ebb33df3490077: error starting container: error starting container: API error (404): oci runtime error: container_linux.go:247: starting container process caused "exec: \"chaincode\": executable file not found in $PATH"

•问题

Error: could not assemble transaction, err Proposal response was not successful, error code 500, msg plugin with name escc could not be used: plugin with name escc wasn't found

由于是1.2的镜像,但是core.yaml用的是1.1的

•问题

Error: endorsement failure during invoke. chaincode result: status:500 message:

大多数invoke都没有报错,但查询发现没有生效,像未写入账本,原因是实例化的时候背书策略不能用MSP.peer,改成MSP.member则OK

6. 更新anchor peer及discovery

需要A云侧提供供cli使用的anchor peer的配置文件(huaweimsp_silk-road-chain_anchors_cli.tx) 将配置文件复制到cli容器里然后进行更新

docker cp huaweimsp_silk-road-chain_anchors_cli.tx xx:/home
docker exec -it xxx bash
export FABRIC_CFG_PATH=/home
root@c362aa2f5c93:/# CORE_PEER_ADDRESS=peer0.org1.huawei.backbonetestnet.baas.dev.icn.engineering:7051
root@c362aa2f5c93:/# peer channel update -o orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --tls true --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem -c silk-road-chain -f /home/huaweimsp_silk-road-chain_anchors_cli.tx

7. 更新anchor peer遇到的问题

•问题

Error: Invalid channel create transaction : bad payload

tx配置文件有问题,少了外层的payload结构

8.用新生成的证书,华为1.1镜像,模拟新peer1加入通道silk-road-chain

•生成peer1节点证书 peer1节点证书,通过cryptogen工具生成 先创建crypto-config.yaml证书生成配置文件,内容如下

PeerOrgs:
- Name: org1
Domain: org1.huawei.backbonetestnet.baas.dev.icn.engineering
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1

  • 生成命令

cryptogen generate --config=./crypto-config.yaml

在华为云上创建一个联盟链的服务,创建一个peer组织,节点个数为1。将其中的peer组织进行改造

docker run -it -v /var/run:/host/var/run -e CORE_VM_ENDPOINT="unix:///host/var/run/docker.sock" http://docker.io/hyperledger/fabric-tools:1.2.0 bash

echo "35.158.219.246 orderer0.icn.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts
echo "49.4.93.157 peer1.org1.huawei.backbonetestnet.baas.dev.icn.engineering" >> /etc/hosts

export FABRIC_CFG_PATH=/home
export CORE_PEER_ID=peer1.org1.huawei.backbonetestnet.baas.dev.icn.engineering
export CORE_PEER_ADDRESS=peer1.org1.huawei.backbonetestnet.baas.dev.icn.engineering:30605
export CORE_PEER_LOCALMSPID=huaweiMSP
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/peer/msp
export PAAS_CRYPTO_PATH=/var/paas/srv/kubernetes
export CORE_PEER_TLS_ENABLED=true

  • 加入命令

peer channel join -b /home/silk-road-chain.genesis.block --orderer orderer0.icn.backbonetestnet.baas.dev.icn.engineering:7050 --cafile /home/tlsca.icn.backbonetestnet.baas.dev.icn.engineering-cert.pem --tls true

最终验证出华为云fabric1.1版本无法和A云侧1.2版本打通,待升级到1.2版本再继续验证

更多精彩内容,请滑至顶部点击右上角关注小宅哦~


来源:华为云原创 作者:华为云技术

华为云区块链的跨云联通能力构建相关推荐

  1. 华为云区块链三大核心技术国际标准立项通过

    近日,国际电信联盟第十六研究组(ITU-T SG16)召开全体会议,由华为云区块链团队牵头的三个区块链国际标准顺利通过立项,分别是: Framework for distributed ledger ...

  2. 华为云城市峰会深圳站 · 华为云区块链助力金融创新

    2019年6月5日,华为云城市峰会深圳站于深圳君悦酒店火热开启,1000多名来自全国各地的开发者和合作伙伴齐聚一堂,会场人声鼎沸,座无虚席,本次峰会聚焦数字经济赋能城市生活,共同探讨云计算在城市.政府 ...

  3. 华为云区块链服务技术决策和落地实践

    本文整理自BCCon全球区块链生态技术大会上的演讲. 大家好,非常感谢大家来和我一起探索一下区块链和BaaS相关的情况.我今天在这里来个抛砖引玉,希望大家有些收获.因为我看到大家都会讲很多的技术,我在 ...

  4. 《华为区块链白皮书》重磅发布 华为云区块链服务BCS专注4大类9小类应用场景

    导读:之前,董小姐试水做区块链手机,华为声称不做区块链手机.吃瓜群众们一定都在腹诽,技术领先的华为老大哥怎么这么沉得住气?其实,智者深沉,如古井静波,看似平静无波,实则内里激流翻涌,深不可测.2018 ...

  5. 基于华为云区块链服务快速部署和搭建链上应用

    华为云区块链服务的整体架构 华为云区块链服务BCS是面向企业及开发者的高性能.高可用和高安全的区块链技术平台服务,可以帮助企业和开发人员在华为云上快速.低成本的创建.部署和管理区块链应用. BCS基于 ...

  6. 2018华为云区块链全球开发者大赛——小链接 大未来

    金秋10月,由华为云和可信区块链推进计划联合主办的区块链全球开发者大赛于10月9日在北京盛大开幕!本次活动获得中国信息通信研究院和多家行业知名机构的大力支持,同时还邀请了国内外行业重量级专家嘉宾进行评 ...

  7. 云图说丨华为云区块链引擎服务:高安全的区块链技术服务平台,轻松部署,快速上链

    摘要:华为云区块链引擎服务以BCS自主研发区块链内核为底座,结合可信硬件,具有高安全.高性能.高可扩展.强隐私保护等特点,满足企业级和金融级的可信和协同要求. 本文分享自华为云社区<[云图说] ...

  8. 真假难辨?来看看华为云区块链怎么搞定

    怎么证明你是你? 你的合同是真合同? 被骗?防被骗? 怎么证明自己的证据是真实的? 跑路?人间蒸发? 怎么还原事实维护自己的合法产权? 云+5G的普遍应用与流量平面化,促使数字化资产内容爆发式增长,数 ...

  9. 区块链学习笔记:DAY05 如何使用公有云区块链服务

    这是最后一节课了,主要讲华为云在云区块链提供的服务,如何基于华为云BCS来构建应用 先来个简单的比喻: 1.有关BaaS的范围定义 包含物理主机.虚拟主机.容器服务.区块链.智能合约和服务 2.华为云 ...

最新文章

  1. 【转载】c#类的成员初始化顺序
  2. [转]网上收集的Html颜色代码全集
  3. 不使用加减乘除符号计算加法
  4. Python函数参数值传递
  5. android端与windows端通信中文乱码问题
  6. 电脑ip4和ip6的怎么选择?
  7. cpu核心 线程 进程_科个普:进程、线程、并发、并行
  8. 小学生把自己学校的网站搞了!
  9. Neo4j下载安装以及Neo4j浏览器详细说明
  10. 智能家居系统--KNX现场实施图片01
  11. 【ESP32】 esp32 输入输出文件系统、编码
  12. 计算机组成存储单元地址分配,主存中存储单元地址的分配
  13. 《神经科学:探索脑》学习笔记(第3章 静息态的神经元膜)
  14. 1.App Inventor开发环境构建
  15. 计算机可用内存分配失败,安装内存和实际可用内存不一样什么原因
  16. SyncNet:基于Latency-Aware 的V2V协同感知
  17. 简书个人文章备份,图片批量导出小工具
  18. Android知识大全
  19. 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)
  20. React是什么,为什么要使用它?

热门文章

  1. YouVideo在线视频平台
  2. Qt QScopeGuard学习
  3. 操作系统笔记(1.5w字耐心整理)
  4. 如何在win10中安装jdk
  5. java小游戏超级玛丽:07.第三关的设计
  6. 入门级,Hadoop详情教程(一)
  7. Java面试核心知识点(283页)Java面试题合集最新版(485页)
  8. 怎么看自己电脑的是几位的操作系统的
  9. 媒体AI配图的时代来临!巴比特今日起全面拥抱AIGC——头条图片,AI创作!
  10. 国内首部《数字货币词典》在新莫干山会议上启动,巴比特智库担任主编单位...