fabric2.x开发模式(dev模式)搭建
原文链接:
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