Fabric 1.2单机部署

https://hyperledger-fabric.readthedocs.io/en/release-1.2/whatis.html

  • 创建目录
sudo mkdir -p $GOPATH/src/github.com/hyperledger/ && cd $GOPATH/src/github.com/hyperledger
  • 克隆代码
git clone https://github.com/hyperledger/fabric.git
查看分支及切换分支
cd fabric/
git branch -a  (此处若不是1.2 可 git checkout release-1.2)
  • 下载fabric-samples
cd ..
git clone https://github.com/hyperledger/fabric-samples.git
git branch -a
cd fabric-samples/
git branch -a
git checkout release-1.2
  • 下载镜像和要执行的二进制文件
// [ ***需要翻墙, 需要翻墙, 需要翻墙, 需要翻墙, 需要翻墙,*** ]
$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.1 1.2.1 0.4.10
    - http://bit.ly/2ysbOFE: 该地址必须翻墙才能访问
// ***不翻墙的方式***
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.2.1 1.2.1 0.4.10

note:设置普通用户可以使用docker
  • 脚本执行
./byfn.sh generate
./byfn.sh up
./byfn.sh down
  • 分步执行
  1. 为组织和实体生成证书
    运行cryptogen工具,生成的证书和密钥将被保存到名为crypto-config的文件夹中
cryptogen generate --config=./crypto-config.yaml
  1. 交易生成器 创世区块 通道及不同组织对应的锚节点配置文件
    configtxgen tool用于创建4个配置工作: order的genesis block, channel的channel configuration transaction, * 以及两个anchor peer transactions一个对应一个Peer组织。
    configtxgen命令允许用户创建和检查与通道配置相关的工件。生成的工件的内容由configtx.yaml的内容决定。
export FABRIC_CFG_PATH=$PWD
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
export CHANNEL_NAME=mychannel
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

3、启动网络

CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=120 docker-compose -f docker-compose-cli.yaml up -d

4、创建通道

docker exec -it cli bash
export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -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/tlscacerts/tlsca.example.com-cert.pem

5、加入通道

peer channel join -b <channel-ID.block>
需修改配置文件环境变量指向其他节点,在加入通道
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer1.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/peer1.org2.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer1.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/peer1.org1.example.com/tls/ca.crt

6、安装和实例化链码

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

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/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

7、查询链码

peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

8、调用链码

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/tlscacerts/tlsca.example.com-cert.pem  -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

最新文章

  1. HTML5- Canvas入门(五)
  2. python address already in use
  3. jQuery如何给body绑定事件?
  4. 转 Android Dalvik虚拟机初识
  5. 夺命雷公狗—angularjs—18—angularjs的事件
  6. java的servlet初步学习
  7. 计时器Chronometer和时钟(AnalogClock和DigitalClock)
  8. bzoj3140
  9. Smarty中一些标签的使用
  10. Linq 查询 与方法调用
  11. c#为了实现自己的线程池功能(一)
  12. c# delegate的invoke和bejinInvoke的区别
  13. Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
  14. linux下使用命令模式去编译Qt程序
  15. 算法提高 最小方差生成树(Kruskal)_模板
  16. main函数
  17. 《DSP using MATLAB》Problem 6.8
  18. 使用linux的shell脚本实现在当前行重复动态显示时间等字符串信息(不另起新行)
  19. 六:python 对象类型详解二:字符串(下)
  20. eclipse中增加多个Tomcat

热门文章

  1. C/C++字符串转换函数;
  2. jquery selected选择器 语法
  3. luogu 1593 因子和 约数+线性筛
  4. PCI-CAN卡驱动与数据通信调试小记
  5. Android学习_7/27
  6. (三)C语言之变量
  7. Selenium chromeDriver 下载地址
  8. FPGA实战操作(2) -- PCIe总线(例程设计分析)
  9. tensorflow神经网络与单层手写字识别
  10. win + T 快捷键