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


这篇博客是基于 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-sample
cd 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

执行成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hyperledger Fabric 1.0 从零开始系列的第十二篇文章中,我们将介绍如何使用 fabric-sdk-java 应用程序来与 Hyperledger Fabric 交互。 fabric-sdk-java 是一个 Java 版本的 Hyperledger Fabric SDK,它提供了一种方便的方式来与 Hyperledger Fabric 网络进行交互。它使用 Fabric 的 Java 操作系统链码(Java Chaincode)来运行链码,同时也支持 Go 语言链码。 以下是使用 fabric-sdk-java 的步骤: 1. 下载 fabric-sdk-java,并将其添加到您的 Java 项目中。 2. 创建一个 ConnectionProfile 对象,该对象定义了与 Fabric 网络的连接参数。 3. 创建一个 HFClient 对象,该对象表示一个 Fabric 用户的身份。 4. 通过调用 HFClient 对象的 setUserContext() 方法来设置用户身份。 5. 创建一个 Channel 对象,该对象表示与一个 Fabric 通道的连接。 6. 调用 Channel 对象的 initialize() 方法来初始化通道对象。 7. 创建一个 QueryByChaincodeRequest 对象,该对象用于查询链码。 8.调用 Channel 对象的 queryByChaincode() 方法,并传递 QueryByChaincodeRequest 对象作为参数,以执行查询。 9. 创建一个 TransactionProposalRequest 对象,它用于提交一个事务提议。 10. 调用 Channel 对象的 sendTransactionProposal() 方法,并传递 TransactionProposalRequest 对象作为参数,以向 Fabric 提交事务提议。 11. 创建一个 TransactionRequest 对象,该对象包含有关要提交的事务的详细信息。 12. 调用 Channel 对象的 sendTransaction() 方法,并传递 TransactionRequest 对象作为参数,以提交事务。 通过使用 fabric-sdk-java,您可以轻松地与 Hyperledger Fabric 网络进行交互,并执行各种操作,例如查询链码和提交事务。 希望这篇文章对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值