启动网络并且创建通道
相关知识点
- 😊测试网络相关文件夹在test-network中
- 😊Docker是一个开源的应用容器引擎,它可以让开发者、运维人员和企业更方便地打包、分发、部署和运行应用。使用Docker,开发人员可以使用镜像快速构建一套标准的开发环境;开发完成后,测试和运维人员可以使用完全相同的环境部署代码,只要是开发测试过的代码就可以确保在生产环境无缝运行。
- 😊Fabric是一个开源的区块链平台,它支持智能合约和多种共识机制。network.sh是一个脚本文件,它位于fabric-samples代码库中的test-network目录下。network.sh可以用来部署和管理一个简单的测试网络,包括两个组织、四个节点和一个通道。
- 😊记得切换至管理员权限——su root
组织: 组织是Fabric网络中的参与者,它代表了一个法律实体或一个业务单位23。不同的组织可以共同构建一个联盟链,也可以加入或退出已有的联盟链
节点: 节点是Fabric网络中的服务器或主机,它运行着特定的软件服务
与 Fabric 网络交互的每个节点和用户都需要属于一个组织才能参与网络。测试网络包括两个对等组织,Org1 和 Org2。它还包括维护网络排序服务的单个排序者组织。
对等点是任何 Fabric 网络的基本组件。节点存储区块链分类帐并在交易提交到分类帐之前验证交易。节点运行智能合约,其中包含用于管理区块链分类账上资产的业务逻辑。
网络中的每个对等点都需要属于一个组织。在测试网络中,每个组织各运行一个对等节点,peer0.org1.example.com 并且peer0.org2.example.com.
我们可以使用脚本为 Org1 和 Org2 之间的交易创建 Fabric 通道。通道是特定网络成员之间的私有通信层。频道只能由受邀加入频道的组织使用,并且对网络的其他成员不可见。每个通道都有一个单独的区块链分类帐本。
cd fabric-samples/test-network
从test-network目录内部,运行以下命令以删除任何先前运行的任何容器或工件:
./network.sh down
启动测试网络,此命令创建一个由两个对等节点和一个排序节点组成的 Fabric 网络
./network.sh up
network.sh脚本在 Org1 和 Org2 之间创建一个通道,并将它们的对等体加入该通道
./network.sh createChannel
背书策略: 区块链中的背书策略是用来指示区块链节点如何验证交易的规则。背书策略是在链码(Chaincode)中实现的,所有的交易都必须依据背书策略进行交易,因为只有经过背书处理的交易才是合法、被认可的交易。
区块链中的背书是指承担背书任务的节点为区块链交易进行交易信息验证,对验证通过的交易声明此交易合法的过程和机制。背书节点是在区块链中承担背书任务的节点,它们需要运行与交易相关的智能合约,并对结果签名。背书策略是用于指示区块链节点交易验证的规则,它定义了要背书一项交易使其生效所需要的最小组织集合。背书签名是背书节点对验证通过的交易结果的签名,它证明了该节点对该交易的认可。
在 Fabric 中,智能合约以称为链代码的包的形式部署在网络上。Chaincode 安装在组织的对等点上,然后部署到通道中,然后可用于为交易背书并与区块链分类帐交互。在将链代码部署到通道之前,通道的成员需要就建立链代码治理的链代码定义达成一致。当所需数量的组织同意时,链码定义可以提交到通道,链码就可以使用了。
打包智能合约
- go.mod 是 go 的依赖配置文件
- 注意切换到root角色
- 如果命令成功,go 包将安装在一个vendor文件夹中。
安装go依赖
cd fabric-samples/asset-transfer-basic/chaincode-go
GO111MODULE=on go mod vendor # 安装依赖
cd ../../test-network
PeerCLI 环境配置
二进制文件peer位于存储库bin的文件夹中fabric-samples。使用以下命令将这些二进制文件添加到您的 CLI 路径:
export PATH=${PWD}/../bin:$PATH
设置FABRIC_CFG_PATH指向存储库core.yaml中的文件fabric-samples
export FABRIC_CFG_PATH=$PWD/../config/
peer version
创建链码包
创建一个名为的包basic.tar.gz。该–lang标志用于指定链代码语言,该–path标志提供您的智能合约代码的位置
peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label basic_1.0
安装链码包
在我们打包资产转移(基本)智能合约后,我们可以在我们的节点上安装链代码。链代码需要安装在每个将认可交易的节点上。
在Org1上安装
设置以下环境变量以peer作为 Org1 管理员用户操作 CLI。将CORE_PEER_ADDRESS被设置为指向 Org1 对等体
环境配置
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export 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
安装
peer lifecycle chaincode install basic.tar.gz
`
如果命令成功,对等方将生成并返回包标识符
在Org2上安装
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
peer lifecycle chaincode install basic.tar.gz
批准链码定义
批准Org2
安装链代码包后,需要为组织批准链代码定义。该定义包括链代码治理的重要参数,例如名称、版本和链代码背书策略。
查询链码id和设置变量
找链代码的包 ID,每个对等点都将生成相同的包 ID。
在批准链代码时使用包 ID,因此继续并将其保存为环境变量。将返回的包 ID 粘贴到下面的命令中。注意:所有用户的包 ID 都不相同,因此需要使用上一步从命令窗口返回的包 ID 完成此步骤
peer lifecycle chaincode queryinstalled
export CC_PACKAGE_ID=basic_1.0:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3
批准链码
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
批准Org1
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
将链码定义提交到通道
在足够数量的组织批准链代码定义后,一个组织可以将链代码定义提交到通道。如果大多数通道成员批准了定义,则提交交易将成功,并且链代码定义中约定的参数将在通道上实现。
检查通道成员是否批准了相同的链码定义
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --output json
提交给通道
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --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"`
使用peer lifecycle chaincode querycommitted命令来确认链代码定义已提交到通道
peer lifecycle chaincode querycommitted --channelID mychannel --name basic --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
调用链码
在将链代码定义提交到通道后,链代码将在加入安装链代码的通道的对等节点上启动。资产转移(基本)链代码现在已准备好供客户端应用程序调用。使用以下命令在分类账上创建一组初始资产。
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":[]}'
使用查询函数来读取由链代码创建的汽车集合
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'