在Fabric上部署BSN的链码

前言

最近要基于BSN(区块链服务网络)进行区块链开发,如果你还不知道什么是BSN的话,这是BSN官方的介绍:

区块链服务网络(Blockchain-based Service Network)(以下称为“服务网络”或“BSN”)是一个跨云服务、跨门户、跨底层框架,用于部署和运行区块链应用的全球性公共基础设施网络,由国家信息中心、中国移动通信集团公司、中国银联股份有限公司、北京红枣科技有限公司共同发起。互联网是通过TCP/IP协议将属于各方的云资源和数据中心连接而形成的,BSN则是通过一套区块链环境协议将属于各方的云资源和数据中心连接而组成。两者均不属于任何单一组织,都是公共基础设施。

由于BSN目前还没有提供开发环境,因此只能自己搭建开发和测试环境。

我们直接使用Fabricr提供的测试环境作为开发和测试的环境,至于怎么下载和运行Fabric测试网络,可以看我另一个教程:win10下Hyperledger Fabric入门教程

启动测试网络

打开git base工具,执行下面的命令启动了一个带mychannel名的通道的测试网络,并设置好的环境变量。

# 启动测试网络

cd $GOPATH/src/github.com/hyperledger/fabric-samples/test-network

./network.sh down

./network.sh up

./network.sh createChannel

#设置经常要使用的环境变量

export PATH=${PWD}/../bin:${PWD}:$PATH

export FABRIC_CFG_PATH=$PWD/../config/

export CORE_PEER_TLS_ENABLED=true

export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

export PEER0_ORG1_CA=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

export PEER0_ORG2_CA=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

# 使用默认的通道名称

export CHANNEL_NAME=mychannel

# 切换到组织1的peer节点上

export CORE_PEER_LOCALMSPID="Org1MSP"

export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

export CORE_PEER_ADDRESS=localhost:7051

部署BSN的链码

下载链码

直接下载代码包:http://www.bsnbase.com/static/base/BaseChainCode.zip

解压后


把bsnBaseCC-node.js目录复制到$GOPATH\src\chaincode下,方便我们后续操作


我们这次要使用的是javascript版本的链码

打包链码

在git base里执行

peer lifecycle chaincode package clockin.tar.gz --path $GOPATH/src/chaincode/bsnBaseCC-node.js/ --lang node --label clockin

注意,javascript版本的链码的--lang的参数是node而不是javascript

clockin 是我自己起的链码的名字,你们也可以自己随意定义,但下面的需要这个名字的地方都要换成你定义。

该方法只做两件事,一是把代码打包成code.tar.gz压缩包(包名字是固定的),二是在code.tar.gz同目录下创建一个metadata.json文件(文件名也是固定的),把命令里的三个参数保存起来,如

{"path":"E:\\go/src/chaincode/bsnBaseCC-node.js/","type":"node","label":"clockin"}

最后把code.tar.gz和metadata.json再次打包成clockin.tar.gz,放到目录执行命令的目录下($GOPATH/src/github.com/hyperledger/fabric-samples/test-network)

知道它的原理,我们其实也可以自己手工打包。


在peer节点上安装链码

先在组织1的peer安装,执行安装操作

peer lifecycle chaincode install clockin.tar.gz

执行成功将得到一个包ID,我们把它保存到环境变量

注:把下面的ID换成你自己的再执行命令

export CC_PACKAGE_ID=clockin:0d61c476742be4182cc817ea2b96380aab73f6725d2f4b129074c428a2aff24a

再切换到组织2的peer上执行相同的安装操作

export CORE_PEER_LOCALMSPID="Org2MSP"

export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

export CORE_PEER_ADDRESS=localhost:9051

peer lifecycle chaincode install clockin.tar.gz

由于得到的包ID与上面的一样的,因此都使用CC_PACKAGE_ID这个环境变量就行

可以使用下面的命令的查询已经安装到当前peer节点的链码

peer lifecycle chaincode queryinstalled


设置背书策略

先在当前组织2的peer节点上执行

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile $ORDERER_CA --channelID mychannel --name clockin --version 1 --init-required --package-id $CC_PACKAGE_ID --sequence 1

查询背书策略是否设置成功

peer lifecycle chaincode checkcommitreadiness -C mychannel -n clockin -v 1 --sequence 1 --output json --init-required

在官方手册等很多教程在执行checkcommitreadiness都没有提到或加上--init-required这个参数,导致查询出来的结果都是失败的,这个问题困扰了我两天,各种百度都没有答案,最后还是分析Fabric带的test-network的测试网络,跟踪deployCC的执行过程才发现加上它就一切正常了。我想可能是approveformyorg用了--init-required这个参数,那下面查询也一定要带上它吧,

再切换到组织1的peer节点上重复执行

export CORE_PEER_LOCALMSPID="Org1MSP"

export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

export CORE_PEER_ADDRESS=localhost:7051

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile $ORDERER_CA --channelID mychannel --name clockin --version 1 --init-required --package-id $CC_PACKAGE_ID --sequence 1

peer lifecycle chaincode checkcommitreadiness -C mychannel -n clockin -v 1 --sequence 1 --output json --init-required

把链码提交到通道上

通过上一步查询到两个组织都同意(值为true)后,就可以提交链码到通道上了

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile $ORDERER_CA -C $CHANNEL_NAME -n clockin -v 1 --sequence 1 --peerAddresses localhost:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses localhost:9051 --tlsRootCertFiles $PEER0_ORG2_CA --init-required

由于需要两个组织的peer节点的背书,因此除了order节点的连接信息了,也加上了两个节点的连接参数。

查询安装状态

最后我们查询下链码是否安装成功

peer lifecycle chaincode querycommitted -C $CHANNEL_NAME -n clockin


本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/10/1845,否则追究其法律责任

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339