Hyperledger Fabric开发实战-02简单网络

本文是在阅读《区块链开发实战-Hyperledger Fabric关键技术与案例分析》一书的同时,在实践中记录的一些实践步骤与经验分享。

Hyperledger Fabric开发实战-03智能合约

上一节中,我们安装了基本的运行环境,现在,就开始运行第一个fabric网络,由于fabric涉及到很多配置,我们将配置放在某个目录

mkdir -p ~/fabricwksp/02-helloworld
cd ~/fabricwksp/02-helloworld
# 下面以HELLO_PATH代表上面的目录
export set HELLO_PATH=$PWD

1.预规划网络

在第一个例子中,我们规划Domain为cmbc.com,有两个组织org1org2,其中org1有两个peer节点和3个用户,org2有两个peer节点和2个用户

2.生成证书

在配置目录下创建fabricconfig文件夹,将生成证书的配置文件和生产的证书放在里面

mkdir -p $HELLO_PATH/fabricconfig
cd $HELLO_PATH/fabricconfig
# 将配置模板保存到文件中
cryptogen showtemplate >> crypto-config.yaml

接下来,就需要编辑配置文件了

# orderer配置
OrdererOrgs:
    - Name: Orderer
      Domain: cmbc.com
      Specs:
            - Hostname: orderer
# peer配置
PeerOrgs:
    - Name: Org1
      Domain: org1.cmbc.com
      Template:
            Count: 2
      Users:
            Count: 3
    - Name: Org2
      Domain: org2.cmbc.com
      Template:
          Count: 2
      Users:
          Count: 2

编辑完成后,使用命令生成证书

cd $HELLO_PATH/fabricconfig/
cryptogen generate --config=crypto-config.yaml --output ./crypto-config

cryptogen会将orderer和peer需要使用到的证书都保持到crypto-config文件夹下,在后面的配置中会设置这些证书的路径,使用tree命令,我们可以看到fabric为peer都分配了地址,我们需要将这些地址映射到本地ip

vim /etc/hosts

#加入下面的内容
127.0.0.1  orderer.cmbc.com
127.0.0.1 peer0.org1.cmbc.com
127.0.0.1 peer1.org1.cmbc.com

127.0.0.1 peer0.org2.cmbc.com
127.0.0.1 peer1.org2.cmbc.com

3.生成创世块

创建存放的文件夹,并将配置目标拷贝进去

mkdir -p $HELLO_PATH/orderer
cp -r $GOAPTH/src/github.com/hyperledger/fabric/sampleconfig/configtx.yaml $HELLO_PATH/orderer
cd $HELLO_PATH/orderer 

拷贝完成后,就需要修改配置文件了,主要是对orderer的配置(如设置排序策略)和对channel的配置,以及对org1和org2设置证书路径 由于配置较为复杂,具体的配置在

https://github.com/ssj234/fabric/blob/master/02-helloworld/orderer/configtx.yaml

编辑完成后,使用下面的命令生成创世块

cd $HELLO_PATH/orderer
configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer.genesis.block

顺便创建channel的tx文件

# $HELLO_PATH/orderer/channel.sh
cd $HELLO_PATH/orderer
configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./cmbcchannel666.tx -channelID cmbcchannel666

创建Org的锚文件,需要注意的是:在创建channel的时候,已经将AnchorPeer的配置保存到了Org的ConfigGroup的Values中的AnchorPeers字段,所以,如果没有修改,也就不需要生成AnchorPeersUpdate文件了,下面是生成的命令,会生成对组织Org1MSPOrg2MSP中针对AnchorPeers的配置进行更新的文件。

# $HELLO_PATH/orderer/anchor.sh
cd $HELLO_PATH/orderer
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPAnchors.tx -channelID cmbcchannel666 -asOrg Org1MSP
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPAnchors.tx -channelID cmbcchannel666 -asOrg Org2MSP

4.启动orderer

启动orderer节点时,需要制定其配置文件,我们还是先拷贝一个示例文件,修改其中相关的私钥,证书等

cd $HELLO_PATH/orderer
cp -r $GOAPTH/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml $HELLO_PATH/orderer

可以参照,需要注意的是要正确配置RootAs,否则在创建channel的时候会报错证书验证不通过

https://github.com/ssj234/fabric/blob/master/02-helloworld/orderer/orderer.yaml

orderer start启动orderer节点

5.启动peer

mkdir $HELLO_PATH/peer
cd $HELLO_PATH/peer
cp -r $GOAPTH/src/github.com/hyperledger/fabric/sampleconfig/core.yaml $HELLO_PATH/peer

参照下面的文件,修改配置文件

https://github.com/ssj234/fabric/blob/master/02-helloworld/peer/core.yaml

使用命令启动peer

export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
peer node start

6.创建通道

服务都启动了以后,我们需要使用之前生成的channel的tx文件在网络上创建channel

  • 创建通道
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

peer channel create -t 50 -o orderer.cmbc.com:7050 -c cmbcchannel666 -f /home/ssj234/fabricwksp/02-helloworld/orderer/cmbcchannel666.tx
  • 让peer加入channel
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

peer channel join -b /home/ssj234/fabricwksp/02-helloworld/cmbcchannel666.block
  • 更新锚节点
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp

peer channel update -o orderer.cmbc.com:7050 -c cmbcchannel666 -f /home/ssj234/fabricwksp/02-helloworld/orderer/Org1MSPAnchors.tx

7.Chaincode

网络运行后,我们创建了channel,并将peer加入了channel,这样一个简单的fabric网络就创建好了,之后我们可以在这个网络上运行智能合约,fabric的智能合约成为Chaincode,会在docker容器中运行。

Chaincode使用fabric源码中自带的示例,我们使用$GOPATH/fabric/examples/chaincode/go/chaincode_example02的例子

  • 设置环境变量
export set FABRIC_CFG_PATH=/home/ssj234/fabricwksp/02-helloworld/peer
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.cmbc.com:7051
export set CORE_PEER_MSPCONFIGPATH=/home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/Admin@org1.cmbc.com/msp
  • 部署chaincode
cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
go build
peer chaincode install -n r_test_cc6 -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

如果报出如下错

../../../../vendor/github.com/miekg/pkcs11/pkcs11.go:29:18: fatal error: ltdl.h: No such file or directory

需要安装相关依赖,执行下面的命令即可

sudo apt-get install libtool libltdl7 libltdl-dev
  • 实例化chaincode
peer chaincode instantiate -o orderer.cmbc.com:7050 -C cmbcchannel666 -n r_test_cc6 -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

  • chaincode写入数据
peer chaincode invoke -o orderer.cmbc.com:7050 -C cmbcchannel666 -n r_test_cc6 -c '{"Args":["invoke","a","b","1"]}'
  • chaincode查询数据
peer chaincode query -C cmbcchannel666 -n r_test_cc6 -c '{"Args":["query","a"]}'

返回的数据如下:

2018-11-28 10:35:45.891 CST [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2018-11-28 10:35:45.891 CST [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Query Result: 93
2018-11-28 10:35:45.905 CST [main] main -> INFO 003 Exiting.....

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

推荐阅读更多精彩内容