hyperledger fabric first-network 手动启动方式逐步搭建教程(5)

提示:由于步骤较为复杂,容易出错,不建议逐步跟着操作,读一遍大致了解一下过程就好了

超级账本的官方实力中使用了自动化脚本的方式,并且使用了docker技术, 使得很多的操作细节被屏蔽,很多人在环境搭建完成以后还时一脸茫然,完全不知道发生了什么,经过我的多年研究,总结出超级账本逐步启动的方式,并且在每一步上会加上注释,让学习的朋友可以了解超级账本的启动,并且知道内部究竟发生了什么,对超级账本有一个更加直观的理解。在你看这篇文章前,请确保你已经能够成功启动搭建一套区块链网络。如果你还不会启动请参考https://blog.csdn.net/qq_27348837/article/details/86974035

环境依赖

超级账本:v1.4.0

系统:ubuntu16,

详细流程

1停掉之前的网络

你可能已经启动了一套正在运行的fabric网络,如果你不确定可以通过 docker ps 命令进行查看

在进行本教程之前我们需要先停掉这个网络。

移动到first-network文件夹下面有如下一些文件

执行命令

./byfn.sh down

在选项提示中输入y,

2生成证书文件

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

如果得到如下的提示结果说明执行成功了

如果提示无此命令之类的,可能你需要将fabric提供的bin文件配置到系统环境变量中。具体配置流程就不说了。在我的另一篇环境搭建博客中有说明。

3生成创世块

执行如下命令,方便fabric的configtxgen 工具找到配置文件的路径

export FABRIC_CFG_PATH=$PWD

 创世块生成命令

configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block

执行成功返回结果

 设置环境变量

export CHANNEL_NAME=mychannel

 生成channel.tx配置文件,

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

执行成功返回如下结果

 执行锚节点,并生成配置文件

org1执行

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

org2执行

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

 返回如下结果说明执行成功

启动节点

docker-compose -f docker-compose-cli.yaml up -d

 成功结果如下:

 

创建并加入通道,通过如下命令,可以让我们进入到cli容器里面,cli容器为我们提供了操作节点的命令工具和环境

docker exec -it cli bash

执行后你会发先你所处的目录发生如下变化:

root@4bbc68c16171:/opt/gopath/src/github.com/hyperledger/fabric/peer

说明我们现在正在处于docker容器当中

在cli容器中,我们通过一下四个环境变量来操作节点

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer0.org1是默认配置。如果需要操控其他节点, 我们需要修改这四个配置信息,到对应节点

我们先重新在设置一下环境变量

export CHANNEL_NAME=mychannel

 创建通道

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

成功后返回如下信息

2019-11-21 10:42:53.224 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-11-21 10:42:53.296 UTC [cli.common] readBlock -> INFO 002 Received block: 0

然后我们将节点加入到通道中, 执行命令

 peer channel join -b mychannel.block

返回

2019-11-21 10:44:27.794 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-11-21 10:44:27.903 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel

通过如上命令,我们让peer0.org1加入到了同道中,我们还需要将其与三个节点加入,

修改环境变,将其指到peer1.org1.example.com

在修改之前,你需要通过docker ps 命令列出你所启动的容器,查看其端口号信息,

我这里peer1.org1对应的是8051,根据版本的不同,你的可能对应7051, 要根据你自己的情况修改CORE_PEER_ADDRES变量


export CORE_PEER_ADDRESS=peer1.org1.example.com:8051

export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt

然后我们将org2的两个节点也加入到同道中,,我们也可以通过直接在命令中制定环境变量的方式来启动,这样我们就不用再一个个修改环境量,在执行此命令之前,你需要确定你的端口号是9051还是7051,确定方法同上。

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join -b mychannel.block

通过上面的命名我们将peer0.org2加入到了同道中,修改变量,在执行一次,将peer1.org2也加进去

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer1.org2.example.com:10051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt peer channel join -b mychannel.block

更新锚节点

修改四个环境变量,使其指定到peer0.org1, .也就是默认所指向的节点,环境变量值,就是最上面所提到的,

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

 执行此命令,

再次修改环境变量值,指向peer0.org2后,重复执行此命令,

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

你可能会觉得很繁琐,没错,我也是这样认为

安装智能合约

我们来安装一个系统内置的智能合约,由于刚刚环境变量指向的是peer0.org2,我们将在peer0.org2节点上安装智能合约

peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

修改为如下环境变量后

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

再一次执行,即可在peer0.org1上面安装智能合约

peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

我们已经在两个节点上安装了智能合约 ,如果你愿意, 也可以在另外两个节点上进行安装合约的操作,只需要修改环境变量到对应节点就可以了。不过即便是不安装也不会影响我们下面步骤的正常进行。

实例化智能合约

peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

OK,恭喜你,环境搭建的工作到此为止已经全部成功了, 下面我们引用智能合约作为测试

超级账本对智能合约的调用分为两种, 分别是invoke和query,query只能调用查询类的智能合约,invoke可以用来调用修改累的智能合约。

peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'

猜你喜欢

转载自blog.csdn.net/qq_27348837/article/details/103188297
今日推荐