大数据区块链Hyperledger Fabric教程–Peer命令(超详细讲解)

Hyperledger Fabric是一个用于构建区块链应用程序的企业级框架。在Hyperledger Fabric中,Peer命令是一组用于区块链和去中心化网络(Distributed Ledger Technology,DLT)的命令行工具。这些工具通常用于与Peer节点进行交互,管理链码(Chaincode)、查询区块信息以及执行其他与区块链网络相关的任务。Peer(节点)是网络中的参与者,负责维护分类账(ledger)和执行智能合约。在这份超详细讲解中,我们将深入探讨Peer命令的各个方面,包括基本用法、参数解释以及常见应用场景。

  1. Peer命令基础
    1.1 peer channel create
    peer channel create命令用于创建一个新的通道。通道是在区块链网络中进行交易的隔离空间。以下是一个基本的peer channel create命令的例子:
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx

解释:

-o orderer.example.com:7050: 指定订购服务的地址和端口。
-c mychannel: 指定通道的名称为mychannel。
-f ./channel-artifacts/channel.tx: 指定包含通道配置的交易文件。
1.2 peer channel join

peer channel join命令用于让Peer节点加入一个通道。通常,创建通道后,需要使用该命令让其他Peer节点加入该通道:

peer channel join -b mychannel.block

解释:

-b mychannel.block: 指定要加入的通道配置块文件。

1.3 peer chaincode install
peer chaincode install命令用于安装链码。链码是在区块链网络上执行的智能合约。以下是一个peer chaincode install命令的例子:

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

解释:
-n mycc: 指定链码的名称为mycc。
-v 1.0: 指定链码的版本号。
-p github.com/chaincode/mycc/: 指定链码的路径。
1.4 peer chaincode instantiate

peer chaincode instantiate命令用于在通道上实例化链码。这将在通道上启动链码容器,并初始化链码的状态。以下是一个peer chaincode instantiate命令的例子:

peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' --tls true --cafile $ORDERER_CA

解释:
-o orderer.example.com:7050: 指定订购服务的地址和端口。
-C mychannel: 指定通道的名称。
-n mycc: 指定链码的名称。
-v 1.0: 指定链码的版本号。
-c ‘{“Args”:[“init”,“a”,“100”,“b”,“200”]}’: 指定链码实例化时的初始化参数。
–tls true --cafile $ORDERER_CA: 指定使用TLS连接,提供订购服务的CA证书。

  1. Peer命令进阶
    2.1 peer channel update
    peer channel update命令用于更新通道的配置。通常情况下,可能需要更新通道的配置以适应网络的变化。以下是一个peer channel update命令的例子:
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel_update_in_envelope.pb

解释:

-o orderer.example.com:7050: 指定订购服务的地址和端口。
-c mychannel: 指定通道的名称。
-f ./channel-artifacts/mychannel_update_in_envelope.pb: 指定包含通道配置更新的交易文件。
2.2 peer channel fetch
peer channel fetch命令用于从订购服务获取区块。这对于在Peer节点之间同步区块非常有用。以下是一个peer channel fetch命令的例子:

peer channel fetch newest -o orderer.example.com:7050 -c mychannel -b ./mychannel_newest.block

解释:

newest: 指定要获取的最新区块。
-o orderer.example.com:7050: 指定订购服务的地址和端口。
-c mychannel: 指定通道的名称。
-b ./mychannel_newest.block: 指定保存区块的文件。
2.3 peer chaincode invoke
peer chaincode invoke命令用于在链码上调用函数。这是执行链码逻辑的一种方式。以下是一个peer chaincode invoke命令的例子:

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA -c '{"Args":["invoke","a","b","10"]}'

解释:

-o orderer.example.com:7050: 指定订购服务的地址和端口。
–tls true --cafile $ORDERER_CA: 指定使用TLS连接,提供订购服务的CA证书。
-C mychannel: 指定通道的名称。
-n mycc: 指定链码的名称。
–peerAddresses peer0.org1.example.com:7051: 指定要调用的Peer节点的地址和端口。
–tlsRootCertFiles $PEER0_ORG1_CA: 指定要调用的Peer节点的TLS根证

Peer命令实战

在目录~/github.com/hyperledger/fabric-samples/test-network下,执行以下命令
export PATH= P W D / . . / b i n : {PWD}/../bin: PWD/../bin:PATH #将peer命令加入环境变量******
在这里插入图片描述

peer有不同的子命令,每个命令都可以让指定的 peer 节点执行特定的一组任务。

peer 命令的5个子命令如下:
(1)peer channel [option] [flags] #允许管理员在Peer上执行通道相关的操作,比如加入通道,或者列出当前Peer加入的通道

peer channel create
在这里插入图片描述

peer channel join
(在启动first-network中)
在这里插入图片描述

(2)peer chaincode [option] [flags] #允许管理员执行与一个节点上运行有关的链码,例如安装、实例化、调用、包装、查询和升级链码。

用peer chaincode install子命令选项在节点上安装一个链码,或者用peer chaincode query子命令选项为一节点上账本的当前值查询链码。

每个子命令都有一套专门对应各子命令的参数,以及一套涉及到所有peer chaincode子命令的全局参数。但并不是所有的子命令都会使用这些参数。比如,query子命令就不需要–orderer参数。

例1:
使用peer命令初始化资产

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":[]}'

–tls
当与orderer端点通信时用TLS

–cafile
是通往一文件的路径,该文件包含了用于排序节点的PEM编码受信任证书

–certfile
是通往一文件的路径,该文件包含了用于和orderer端点进行相互TLS通信的PEM编码X509公钥。

–ordererTLSHostnameOverride
验证与orderer的TLS连接时要用到的主机名

–peerAddresses
要连接到的peer节点的地址

–tlsRootCertFiles
如果启用了TLS,则指向要连接的peer节点的TLS根证书文件的路径。指定的证书的顺序和数量应与–peeradresses标志匹配

例2:
使用peer查询资产信息
peer chaincode query -C mychannel -n basic -c ‘{“Args”:[“GetAllAssets”]}’
使用peer调用链码实现资产转换

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":"TransferAsset","Args":["asset6","Christopher"]}'

(3)peer lifecycle chaincode [option] [flags]
peer lifecycle chaincode子命令允许管理员使用Fabric chaincode生命周期来打包链码,将其安装到peer节点上,组织批准链码定义(提议),然后将定义(提议)提交到通道。定义(提议)成功提交到通道后,链码即可使用。
注:Fabric2.0引入Fabric chaincode生命周期

Peer命令
一旦你的网络设置完成,你可以使用Peer节点执行各种操作。以下是一些常见的Peer命令:

查询Peer信息:

peer node status

安装链码:

peer lifecycle chaincode install <链码包路径>

查询已安装的链码:

peer lifecycle chaincode queryinstalled

批准链码定义:

bashpeer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --channelID mychannel --name mycc --version 1.0 --package-id <安装链码时生成的ID> --sequence 1

检查链码批准情况:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1.0 --sequence 1

提交链码定义:

peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID mychannel --name mycc --version 1.0 --sequence 1 --init-required --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:9051

查询已提交的链码:

peer lifecycle chaincode querycommitted --channelID mychannel --name mycc

peer lifecycle chaincode package 命令用于将智能合约链码打包成一个tarball(tar.gz)文件,该文件包含链码的源代码、元数据和其他必要的信息。这个打包的文件可以用于后续的链码安装、批准、提交等操作。
peer lifecycle chaincode package 命令的一般语法:

peer lifecycle chaincode package <输出tar包文件路径> --path <链码源代码路径> --lang <链码编程语言> --label <链码标签>

peer lifecycle chaincode package

在这里插入图片描述

peer lifecycle chaincode install 用于将链码安装到网络中的 Peer 节点上。在 Hyperledger Fabric 中,链码是智能合约的实现,它定义了区块链网络上的业务逻辑。安装链码是部署链码的第一步,安装链码后,可以进行后续的链码批准、提交等操作。

peer lifecycle chaincode install

在这里插入图片描述

peer lifecycle chaincode queryinstalled 用于查询在当前 Peer 节点上已安装的链码包的信息。在 Hyperledger Fabric 中,链码是智能合约的实现,它定义了区块链网络上的业务逻辑。通过查询已安装的链码,你可以获取有关链码包的详细信息,如标签、包 ID 等。

peer lifecycle chaincode queryinstalled

在这里插入图片描述
在 Hyperledger Fabric 中,peer lifecycle chaincode getinstalledpackage 命令用于获取已经安装的链码包的详细信息,包括链码的标签(label)、链码包的路径等。这个命令可以帮助你查询已经安装的链码包的信息,以便后续的链码升级和其他操作。

peer lifecycle chaincode getinstalledpackage

在这里插入图片描述

peer lifecycle chaincode approveformyorg 是 Hyperledger Fabric 中用于链码生命周期管理的命令之一。这个命令用于在通道上为指定的组织批准(approve)链码的定义,允许该组织将其作为通道中的一部分进行使用。

peer lifecycle chaincode approveformyorg 命令的一般语法:

peer lifecycle chaincode approveformyorg -o <Orderer 地址> --channelID <通道ID> --name <链码名称> 
--version <链码版本> --init-required --package-id <链码包ID> --sequence <序列号> 
--signature-policy <签名策略> --collections-config <集合配置文件路径> --waitForEvent

解释各个参数:

-o <Orderer 地址>: 指定要连接的排序服务(Orderer)的地址。
–channelID <通道ID>: 指定链码要加入的通道的ID。
–name <链码名称>: 指定链码的名称。
–version <链码版本>: 指定链码的版本号。
–init-required: 表示指定的链码在实例化时需要执行初始化(init)。
–package-id <链码包ID>: 指定用于安装的链码包ID,可以使用 peer lifecycle chaincode queryinstalled 获取。
–sequence <序列号>: 指定链码的序列号,用于唯一标识一个链码的更新。
–signature-policy <签名策略>: 指定链码的签名策略,即决定谁有权对链码进行操作。
–collections-config <集合配置文件路径>: 指定链码的私有数据集合配置文件的路径。
–waitForEvent: 表示等待链码事件,确保对应的操作在事件触发后才继续。

这个命令主要用于在通道上为指定的组织批准链码的安装。通过这个命令,指定组织的管理员可以批准链码的定义,使得链码能够被通道中的其他组织所使用。

peer lifecycle chaincode approveformyorg

在这里插入图片描述

在 Hyperledger Fabric 中,peer lifecycle chaincode queryapproved 命令用于查询通道上已经被批准的链码定义。这个命令可以帮助你确认在通道上哪些组织已经批准了特定版本的链码,从而了解链码的安装状态和在通道上的可用性。

peer lifecycle chaincode queryapproved 命令的一般语法:

peer lifecycle chaincode queryapproved --channelID <通道ID> --name <链码名称> --sequence <链码版本序列号>

解释各个参数:

–channelID <通道ID>: 指定要查询的通道的ID。
–name <链码名称>: 指定要查询的链码的名称。
–sequence <链码版本序列号>: 指定要查询的链码的版本序列号。

peer lifecycle chaincode queryapproved

在这里插入图片描述
peer lifecycle chaincode checkcommitreadiness 命令是 Hyperledger Fabric 中用于链码生命周期管理的命令之一。这个命令用于检查指定通道上的链码是否已经准备好提交(commit)。提交是链码安装和实例化的最后一步,它意味着链码将会被正式启用并在通道上执行。

peer lifecycle chaincode checkcommitreadiness 命令的一般语法:

peer lifecycle chaincode checkcommitreadiness --channelID <通道ID> --name <链码名称> --version <链码版本> 
--sequence <链码版本序列号> --init-required --endorsement-policy <背书策略> --collections-config <集合配置文件路径>

解释各个参数:

–channelID <通道ID>: 指定要提交链码的通道的ID。
–name <链码名称>: 指定要提交的链码的名称。
–version <链码版本>: 指定要提交的链码的版本号。
–sequence <链码版本序列号>: 指定要提交的链码的版本序列号。
–init-required: 如果链码在实例化时需要执行初始化,则使用此标志。
–endorsement-policy <背书策略>: 指定链码的背书策略,即确定在实例化和调用时需要哪些组织的背书。
–collections-config <集合配置文件路径>: 指定链码的私有数据集合配置文件的路径。

peer lifecycle chaincode checkcommitreadiness

在这里插入图片描述

peer lifecycle chaincode commit 是 Hyperledger Fabric 中用于链码生命周期管理的命令之一。这个命令用于提交(commit)已经安装并已经获得足够批准的链码,使其正式生效并在通道上执行。

peer lifecycle chaincode commit 命令的一般语法:

peer lifecycle chaincode commit -o <Orderer 地址> --channelID <通道ID> --name <链码名称> --version <链码版本> --sequence <链码版本序列号> --init-required --peerAddresses <对等节点地址列表> --signature-policy <签名策略> --collections-config <集合配置文件路径> --waitForEvent

解释各个参数:

-o <Orderer 地址>: 指定要连接的排序服务(Orderer)的地址。
–channelID <通道ID>: 指定要提交链码的通道的ID。
–name <链码名称>: 指定要提交的链码的名称。
–version <链码版本>: 指定要提交的链码的版本号。
–sequence <链码版本序列号>: 指定要提交的链码的版本序列号。
–init-required: 如果链码在实例化时需要执行初始化,则使用此标志。
–peerAddresses <对等节点地址列表>: 指定参与背书和提交的对等节点的地址列表。
–signature-policy <签名策略>: 指定链码的签名策略,即决定谁有权对链码进行操作。
–collections-config <集合配置文件路径>: 指定链码的私有数据集合配置文件的路径。
–waitForEvent: 表示等待链码事件,确保对应的操作在事件触发后才继续。

peer lifecycle chaincode commit

在这里插入图片描述

peer lifecycle chaincode querycommitted 是 Hyperledger Fabric 中用于查询已经提交(committed)的链码定义的命令。这个命令可以用来检索已经成功提交到通道的链码的详细信息,包括链码的名称、版本、序列号等。

peer lifecycle chaincode querycommitted 命令的一般语法:

peer lifecycle chaincode querycommitted --channelID <通道ID> --name <链码名称>

解释各个参数:

–channelID <通道ID>: 指定要查询的通道的ID。
–name <链码名称>: 指定要查询的链码的名称。

peer lifecycle chaincode querycommitted
在这里插入图片描述

(4)peer node [option] [flags]
管理员可以通过peer node命令来启动Peer节点,将节点中的所有通道重置为创世区块,或者将某个通道回滚到给定区块号。
(5 )peer version [option] [flags]

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐