自定义一个Fabirc网络 步骤 参考:https://zhuanlan.zhihu.com/p/40627580
1、~/go/src/github.com/hyperledger/fabric 路径下 mkdir network001
2、在该路径下下载curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz | tar xz
或者是自己下载mv到该路径下解压
3、解压后出现bin 和config 连个文件夹
4、创建crypto-config.yaml 文件
依赖配置文件crypto-config.yaml 指定了网络的拓扑结构。该文件的主要作用是:
1、通过配置模板信息,来定义组织成员对应的结构。
2、cryptogen可以快速根据该配置文件自动批量生成所需要的密钥和证书文件。
通过该命令生成相关的证书文件:./bin/cryptogen generate --config=./crypto-config.yaml
5、创建configtx.yaml文件
configtx.yaml 包含网络的定义,并给出了网络组件的拓扑结构还指出每个网络实体的加密材料的存储位置。用来编写配置系统通道初始区块文件,新建应用通道配置文件,锚节点配置更新交易文件等。
通过该命令生成创世区块:./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
其中 TwoOrgsOrdererGenesis是在文件中定义的,channel-artifacts文件夹需要提前创建,成功后在channel-artifacts文件中会有genesis.block 文件生成
6、生成通道配置文件
通过该命令生成通道配置文件:./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
其中TwoOrgsChannel是configtx.yaml文件中定义的,mychannel是自定义的通道id,成功之后会在channel-artifacts文件夹中生成通道配置文件channel.tx
7、部署配置Orderer节点
创建docker-orderer.yaml文件,该配置文件中,设置了Orderer排序服务监听的端口号是7050,以及关于MSP配置信息的文件证书配置等等。
最后可以用docker-compose来启动
8、部署配置peer0.org1节点
创建docker-peer.yaml文件
在文件中,把两处地方的_sk修改成自己的(一处是FABRIC_CA_SERVER_TLS_KEYFILE另一处是:command最后一部分。)
我的是:9ab961e662fedb1b11a10149ae247a09d94d021e2f9121888beba380ae1486f3_sk
_sk其实就是./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com下的keystore内容(在该路径下tree一下即可看到)
9、在完成网络配置文件之后,就是启动网络了(参考https://zhuanlan.zhihu.com/p/41138980)
(1)启动排序节点的命令:docker-compose -f docker-orderer.yaml up -d
(2)启动Peer节点的命令:docker-compose -f docker-peer.yaml up -d
10、在第9步正常完成后,启动CLI客户端
docker exec -it cli bash
11、通道设置
peer channel create -o orderer.example.com:7050 -c mychannel -t 50 -f ./channel-artifacts/channel.tx
ls 会发现多了一个mychannel.block
12、Peer加入通道中
peer channel join -b mychannel.block
到此通道操作完毕!
13、智能合约操作
使用观望提供的案例example02
cd ~/go/src/github.com/hyperledger/fabric/examples
cp -r chaincode ~/go/src/github.com/hyperledger/fabric/network001
14、安装智能合约(1.0版本)
peer chaincode install -n mycc -p github.com/hyperledger/fabric/network001/chaincode/go/chaincode_example02 -v 1.0
15、实例化智能合约
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR('Org1MSP.member')"
在实例化的过程中,实际上是启动了一个运行ChainCode的容器。其中参数 -c '{"Args":["init","a","100","b","200"]}' 意思是初始化了两个账户,并分别赋值100、200,
16、智能合约测试
查询a的资产: peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
b转账给a账户50元: peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc -c '{"Args":["invoke","b","a","50"]}'
重新查询a的资产会发现多了50元
17、在原来的拓扑中部署Peer0.org2节点
在之前的步骤中只是部署了一个Orderer节点以及org1组织中的Peer0节点,新增一个节点步骤如下:
(1)配置peer0.org2的启动文件,docker-peer1.yaml (2)启动peer0.org2节点 (3)将peer0.org2节点加入到通道中 (4)将ChainCode安装在peer0.org2节点上
18、在network001文件夹中创建docker-peer1.yaml文件
启动peer1.org0:docker-compose -f docker-peer1.yaml up -d
启动CLI容器:docker exec -it cli bash
由于cli 容器之前主要是绑定的Peer0.org1.如果想要使用CLI命令窗口来操作peer0.org2,则需要将CLI容器中的环境变量设置成Peer0.org2的环境变量。直接将如下变量输入命令窗如下:
CORE_PEER_ID=peer0.org2.example.com
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
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
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
将peer0.org2节点加入通道中:peer channel join -b mychannel.block
对该节点安装ChainCode:peer chaincode install -n mycc -p github.com/hyperledger/fabric/network001/chaincode/go/chaincode_example02 -v 1.0
调用智能合约(查询a账户):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'