首页 > 技术文章 > fabric2.x开发模式(dev模式)搭建

SilverhandFan 2021-01-06 17:16 原文

原文链接:

https://hyperledger-fabric.readthedocs.io/en/latest/peer-chaincode-devmode.html

搭建开发环境

1.从github里clone fabric文件夹到本地

2.cd到fabric文件夹,跑:

 make orderer peer configtxgen

3.添加路径:

export PATH=$(pwd)/build/bin:$PATH

4.为环境添加路径:

export FABRIC_CFG_PATH=$(pwd)/sampleconfig

5.为排序服务设定初始块,包括设定排序模式(solo)

configtxgen -profile SampleDevModeSolo -channelID syschannel -outputBlock genesisblock -configPath $FABRIC_CFG_PATH -outputBlock $(pwd)/sampleconfig/genesisblock

6.启动排序节点:

这一步如果报错,可能需要sudo

如果产生没有order.yaml的错误,需要先cd到sampleconfig文件夹下,因为order.yaml在sampleconfig里

ORDERER_GENERAL_GENESISPROFILE=SampleDevModeSolo orderer

这一步结束后command line会停在这里,需要新开一个窗口

7.配置peer路径:

export PATH=$(pwd)/build/bin:$PATH

export FABRIC_CFG_PATH=$(pwd)/sampleconfig

8.启动peer节点:

这一步可能也需要cd到sampleconfig文件夹下,使用sudo

FABRIC_LOGGING_SPEC=chaincode=debug CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 peer node start --peer-chaincodedev=true

可能会报出9443端口冲突的错误,打开sampleconfig文件夹下的core.yaml,找到9443, 全部改成10443即可

发生这个问题可能是因为没有启动docker,orderer和peer的环境没有隔离开,如果仅仅是使用dev模式来调试链码,把peer的9443端口按上面说的方法改掉就行了。

这时候peer的窗口也会卡在这里,大丈夫,我们再开一个新的窗口

9.创建channel,先在新窗口内配置路径

export PATH=$(pwd)/build/bin:$PATH
export FABRIC_CFG_PATH=$(pwd)/sampleconfig

10.配置channel,它的名字叫ch1

configtxgen -channelID ch1 -outputCreateChannelTx ch1.tx -profile SampleSingleMSPChannel -configPath $FABRIC_CFG_PATH

11.创建ch1,规定它使用的port,创建文件ch1.tx,ch1.tx里面记录的是二进制数据,不知道是什么

peer channel create -o 127.0.0.1:7050 -c ch1 -f ch1.tx

12.将之前start的peer加入到ch1:

peer channel join -b ch1.block

13.build chaincode,可以用fabric文件夹自带的chaincode先体验一下,如果需要debug自己的chaincode有一个很方便的方法就是直接把simple里的main.go和chaincode.go换掉:

go build -o simpleChaincode ./integration/chaincode/simple/cmd

14.启动chaincode:

CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=mycc:1.0 ./simpleChaincode -peer.address 127.0.0.1:7052

这时候chaincode的窗口就卡在这里了,让我们再重开一个窗口来让peer同意这个chaincode

15.peer来commitchaincode:

执行这一步之前,需要先在fabric文件夹下像以前一样配置一下路径:

export PATH=$(pwd)/build/bin:$PATH

export FABRIC_CFG_PATH=$(pwd)/sampleconfig

然后run:

peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --package-id mycc:1.0
peer lifecycle chaincode checkcommitreadiness -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')"
peer lifecycle chaincode commit -o 127.0.0.1:7050 --channelID ch1 --name mycc --version 1.0 --sequence 1 --init-required --signature-policy "OR ('SampleOrg.member')" --peerAddresses 127.0.0.1:7051

16.之后可以调用chaincode的函数来测试chaincode:

如果和fabric里给出的chaincode一样使用shim接口的话,调用的方式是这样的:

init函数:

CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["init","a","100","b","200"]}' --isInit

其他函数都从invoke走:

CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["invoke","a","b","10"]}
CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C ch1 -n mycc -c '{"Args":["query","a"]}'

括号里的第一个字段都是函数名,后面的字段是传入的参数。

 

根据我学习时的一点印象,contractapi需要另写文件来调用,shim可以直接用cli调用,初学者可以先尝试使用shim库构建chaincode

 

推荐阅读