Hyperledger Fabric V1.0学习之一---在mac上配置hyperledger fabric

来源:互联网 发布:linux awk 编辑:程序博客网 时间:2024/05/21 18:49


这篇博客是基于 Hyperledger Fabric 1.0 alpha2 版本

具体步骤参考Hyperledger Fabric 官方文档的Getting start部分设置。

官方文档

http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#using-the-cryptogen-tool

一、前期准备


1、必备软件安装

Docker - v1.12 or higher
Docker Compose - v1.8 or higher
Go - 1.7 or higher
Git
cUrl
这些必备软件已经提前装好。安装过程请自行百度。


二、下载镜像


1、建立文件夹

mkdir fabric-samplecd fabric-sample


2、下载docker镜像

curl -sS https://raw.githubusercontent.com/hyperledger/fabric/master/examples/e2e_cli/bootstrap.sh | bash


下载好的镜像如下:


hyperledger/fabric-couchdb     latest                3d89ac4895f9        6 days ago          1.51 GB
hyperledger/fabric-couchdb     x86_64-1.0.0-alpha2   3d89ac4895f9        6 days ago          1.51 GB
hyperledger/fabric-ca          latest                86f4e4280690        6 days ago          241 MB
hyperledger/fabric-ca          x86_64-1.0.0-alpha2   86f4e4280690        6 days ago          241 MB
hyperledger/fabric-kafka       latest                b77440c116b3        6 days ago          1.3 GB
hyperledger/fabric-kafka       x86_64-1.0.0-alpha2   b77440c116b3        6 days ago          1.3 GB
hyperledger/fabric-zookeeper   latest                fb8ae6cea9bf        6 days ago          1.31 GB
hyperledger/fabric-zookeeper   x86_64-1.0.0-alpha2   fb8ae6cea9bf        6 days ago          1.31 GB
hyperledger/fabric-orderer     latest                9a63e8bac1f5        6 days ago          182 MB
hyperledger/fabric-orderer     x86_64-1.0.0-alpha2   9a63e8bac1f5        6 days ago          182 MB
hyperledger/fabric-peer        latest                23b4aedef57f        6 days ago          185 MB
hyperledger/fabric-peer        x86_64-1.0.0-alpha2   23b4aedef57f        6 days ago          185 MB
hyperledger/fabric-javaenv     latest                a9ca2c90a6bf        6 days ago          1.43 GB
hyperledger/fabric-javaenv     x86_64-1.0.0-alpha2   a9ca2c90a6bf        6 days ago          1.43 GB
hyperledger/fabric-ccenv       latest                c984ae2a1936        6 days ago          1.29 GB
hyperledger/fabric-ccenv       x86_64-1.0.0-alpha2   c984ae2a1936        6 days ago          1.29 GB


三、建立网络


1、进入文件夹

cd fabric-sample/release/darwin-amd64

2、生成证书

执行下面的命令通过 cyptogen命令生成证书

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

将会看到下面的告警,忽略它。

[bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP.


3、创建创世区块

首先设置环境变量,告诉configtxgen命令去哪里找configtxgen.yaml文件。
FABRIC_CFG_PATH=$PWD
查看设置
echo $FABRIC_CFG_PATH

/Users/alvin/fabric-sample/release/darwin-amd64


然后执行下面的命令创建创世区块

./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block


创建成功
alvin$ ls channel-artifacts/
genesis.block


4、创建channel.tx

./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
结果如下
alvin$ ls channel-artifacts/

channel.tx genesis.block


创建anchor 节点跟Org1的channel
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP


创建anchor 节点跟Org2的channel
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP


结果如下

alvin$ ls channel-artifacts/
Org1MSPanchors.tx channel.tx
Org2MSPanchors.tx genesis.block

至此,网络创建完毕。


你也可以通过执行脚本来进行上面的操作。
./generateArtifacts.sh <channel-ID>
channel-ID为你自己定义的channel name。


5、启动网络

打开文件docker-compose-cli.yaml,注释掉其中含有script.sh的那一行。


working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT' volumes

如果不注释的话,会自动执行script.sh中的命令。因为我们是要学习,所以以后通过命令行手动执行.



执行命令,启动网络
CHANNEL_NAME=mychannel TIMEOUT=300 docker-compose -f docker-compose-cli.yaml up -d
TIMEOUT是定义超时时间,默认为60s, -d为后台运行,如果想看实时log可以把它去掉。
运行效果如下:
Creating network "darwinamd64_default" with the default driver
Creating peer1.org2.example.com
Creating peer0.org1.example.com
Creating peer0.org2.example.com
Creating orderer.example.com
Creating peer1.org1.example.com
Creating cli


网络启动成功!

四、连接peer节点


1、设置PEER0的环境变量


编辑base/docker-compose-base.yaml文件。找到下面一段,


    peer0.org1.example.com:
      container_name: peer0.org1.example.com
      extends:
        file: peer-base.yaml
        service: peer-base
      environment:
        - CORE_PEER_ID=peer0.org1.example.com
        - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
        - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051

        - CORE_PEER_LOCALMSPID=Org1MSP


修改为下面所示:

     environment:        - CORE_PEER_ID=peer0.org1.example.com        - CORE_PEER_ADDRESS=peer0.org1.example.com:7051        - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051        - CORE_PEER_LOCALMSPID=Org1MSP          # Environment variables for PEER0        - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp        - 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

保存退出

2、进入cli 容器的命令行

docker exec -it cli bash
效果如下:
root@fb44fc4b99b8:/opt/gopath/src/github.com/hyperledger/fabric/peer# 


3、创建加入通道的创世区块。

执行命令

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


查看结果:
ls
channel-artifacts  crypto  mychannel.block  scripts


4、通过channel加入peer0.org1.example.com

peer channel join -b mychannel.block
结果如下:
2017-05-21 11:00:47.893 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: A0694F31AED880AF22C1B81F248B548ADEA3212E48B6508A4B9706411CE42830 
Peer joined the channel!
加入成功!


五、安装和执行链码

1、安装链码


peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
命令行打印安装log
2017-05-21 12:09:52.959 UTC [chaincodeCmd] install -> DEBU 00d Installed remotely response:<status:200 payload:"OK" > 
安装成功


2、初始化链码

peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C mychannel -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"


3、查询结果

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
结果如下:
2017-05-21 12:17:41.739 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: E07A6E90385D3B4015D9B5984C0D29ED581BFC3A244ED049E2A11267B8C55D2E 
Query Result: 100


4、执行链码

从a向b转移20个单位

peer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'




查询a的余额
peer chaincode query -C mychannel -n mycc -c '{"Args":["query", "a"]}'
结果如下:
2017-05-21 12:40:17.779 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: 50BC2178F71F2EC19B50FDB82C4D99F118F4BC6886FE6FC37EB5E5A2AFAA5D89 

Query Result: 80

执行成功。