Fabric━━测试环境

根据官方教程,使用Hyperledger Fabric Samples搭建测试环境,记录可能出现的问题

下载

如下cURL 命令设置您的环境,以便运行 Fabric 测试网络。具体来说,它将执行以下步骤:

  • 克隆hyperledger/fabric-samples存储库

  • 下载最新的 Hyperledger Fabric Docker 镜像并将它们标记为 latest

  • 将以下特定于平台的 Hyperledger Fabric CLI 工具二进制文件和配置文件下载到fabric-samples/bin/config目录中,这些二进制文件将帮助您与测试网络进行交互

    • configtxgen

    • configtxlator

    • cryptogen

    • discover

    • idemixgen

    • orderer

    • osnadmin

    • peer

    • fabric-ca-client

    • fabric-ca-server

只需要执行:Install Fabric and Fabric Samples

curl -sSL https://bit.ly/2ysbOFE | bash -s

使用特定的版本:

curl -sSL https://bit.ly/2ysbOFE | bash -s -- <fabric_version> <fabric-ca_version>
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.3.3 1.5.2

目录介绍

如果使用了其他版本,测试可能出现问题。例如docker-compose版本可能导致配置问题 解决方法,以及命令行参数chainID不一致。使用2.3.3版本二进制工具和samples最新版本运行没有问题。
直接使用Fabric Samples的main分支即可,fabric-samples目录

目录 说明
bin 下载的工具二进制文件(加入环境变量)
config 下载的配置文件,关于orderer和peer配置信息
chaincode 示例的链码目录
asset-transfer-basic 示例使用的链码和应用程序
test-network 基于docker-compose的测试网络,两个组织peer和一个排序服务节点
test-network-k8s 使用k8s的示例
...

启动测试网络

测试网络包含:

  • 两个peer组织,每个只有一个peer节点;
  • 一个Raft排序节点;
  • 没有部署CA,所有证书使用root CA颁发;
  • 测试网络使用Docker Compose部署

进入./test-network目录:

./network.sh -h # 查看基本命令

启动peer节点和ordering节点

./network.sh up

默认创建两个peer节点和一个ordering节点,默认使用cryptogen;每个节点或者用户都必须属于某一个组织,才能和Fabric网络进行交互。

说明:

  • Peer节点是基本组件,负责存储区块链账本,在将交易提交账本前验证其合法性,执行包含业务逻辑的智能合约/链码;每个Peer节点都属于一个组织
  • Fabric网络包含一个排序服务,负责就交易的顺序达成共识以及生成区块;test-network使用单个节点的Raft ordering service,属于orderer organization. 实际环境可能使用多个组织的多个排序节点

创建通道

通道channel是特定的网络成员的通信私有层,每个通道具有单独的区块链账本。简单来说:如果某个组织加入通道,就是属于它的peer节点存储该通道的账本,并且验证该通道上的交易

./network.sh createChannel -c mychannel 
# Channel 'mychannel' joined

将org1和org2组织的节点加入了该通道

说明:遇到osnadmin: error: parsing arguments: unknown long flag '--channel-id'

修改:将./test-network/script/createChannel.sh第40行长标志改为osnadmin channel join --channelID

部署链码

Fabric的信任模型,为了保证交易的合法性,使用智能合约创建的交易需要被多个组织签名(背书)才能提交到通道账本。要求多重背书,防止单个组织篡改同行的账本或者使用未达成一致的业务逻辑。

流程:为了签名交易,每个组织的节点需要调用和执行智能合约/链码,并且对交易的结果进行签名(模拟执行),如果结果一致并且得到足够多组织的签名,该交易该能提交到账本。指定该通道特定组织的集合来对交易签名,称为背书策略;背书策略是链码定义的一部分

链码需要安装到组织中peer节点,然后部署到整个通道:

./network.sh deployCC -c mychannel -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

注意:链码部署channel之前,通道成员需要对链码的定义达成一致;当要求的组织数量同意后,Chaincode definition committed on channel 'mychannel'链码的定义会提交到通道账本,并且可以使用

与网络交互

peer二进制工具可以与网络交互,调用链码,更新通道,部署新的链码。

配置变量:

# 当前目录 ./test-network
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

设置环境变量,允许作为Org1节点操作:

# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
expor CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

初始化账本InitLedger

peer chaincode invoke -o localhost:7050 \
--ordererTLSHostnameOverride orderer.example.com --tls --cafile \
"${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" \
-C mychannel -n basic \
--peerAddresses localhost:7051 --tlsRootCertFiles \
"${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" \
--peerAddresses localhost:9051 --tlsRootCertFiles \
"${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" \
-c '{"function":"InitLedger","Args":[]}'

结果输出

[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

说明:遇到error starting container: API error (404): network _test not found"

docker-compose Version (+v1.28)导致读取.env文件失败导致创建默认的docker_test,修改:将182,253行加入明确参数:

docker-compose --env-file ./.env

查询账本

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

关闭网络

停止并且删除节点容器,删除 organization crypto material

./network.sh down

理解

说明./network.sh up的作用:

  1. 默认使用cryptogen和配置文件organizations/cryptogen为3个组织生产证书和key
  2. 使用docker/docker-compose-test-net.yaml文件启动peer和orderer节点
  3. 如果使用createChannel子命令,会运行scripts/createChannel.sh来创建指定名称的通道,它会使用configtxgen工具基于configtx/configtx.yaml中的TwoOrgsApplicationGenesis配置,生成通道的创世纪块。使用peer peer0.org1.example.com and peer0.org2.example.com 加入到通道,并且成为锚节点
  4. 如果使用deployCC子命令,会运行deployCC.sh安装默认的 asset-transfer (basic) 链码到peer节点,然后部署到通道上。

Next

开发链码

开发App

posted @ 2021-11-03 00:14  qxxiao  阅读(330)  评论(1)    收藏  举报