目录
1、首先保证网络已经处于启动状态
2、进入CLI容器
3、检查当前节点已经加入到哪些通道中(刚进来,默认是 peer0.example.com)
链码的安装
1、检查通道名称是否设置正确
2、使用install安装链码
3、实例化链码
4、查詢链码
发起交易
查询交易
问题
1.链码安装在一个节点中还是安装在多个节点中?有什么区别?
2.链码执行查询与执行事务的流程相同吗?
3.背书策略具体指的是什么?
4.如果在实例化链码时没有指定背书策略,那么会有节点进行背书吗?
1、首先保证网络已经处于启动状态
使用docker ps 查看有6个节点在Up状态
具体参考我的另一篇博文:Hyperledger Fabric网络快速启动_FAFU_kyp的博客-CSDN博客
2、进入CLI容器
sudo docker exec -it cli bash
3、检查当前节点已经加入到哪些通道中(刚进来,默认是 peer0.example.com)
peer channel list
上面所示的输出内容,说明当前节点已成功加入一个名为mychannel的应用通道中。
Peer加入应用通道后,可以执行链码调用的相关操作,并进行测试。如果Peer节点没有加入通道中,则先将当前的Peer节点加人已创建的应用通道中。
链码的安装
调用链码处理交易之前必须将其部署到Peer节点上,实现步骤如下:
1)将其安装在指定的Peer节点上。
2)安装完成后对其进行实例化。
1、检查通道名称是否设置正确
echo CHANNEL_NAME
设置环境变量,指定应用通道名称为mychannel(因为我们创建的应用通道及当前的Peer节点加入的应用通道名称为mychannel):
没查到的话: export CHANNEL_NAME=mychannel
2、使用install安装链码
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
这个命令是用于安装链码(chaincode)到Hyperledger Fabric网络中的对等节点。
以下是命令中使用的参数及其含义:
-n, --name mycc
:指定链码的名称为mycc
。-v, --version 1.0
:指定链码的版本为1.0
。-p, --path github.com/chaincode/chaincode_example02/go/
:指定链码的路径,即链码源代码所在的路径。在这个示例中,链码位于github.com/chaincode/chaincode_example02/go/
路径下。该命令会将链码的源代码打包并安装到对等节点的链码环境中,使其准备好在网络中部署和执行。
注意:链码需要根据指定的背书策略(见实例化链码部分)安装在需要背书的所有Peer节点中。
3、实例化链码
peer chaincode instantiate -o orderer.example.com:7050 --tls --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.peer','Org2MSP.peer')"
这个命令用于在Hyperledger Fabric网络中实例化链码(chaincode)。
以下是命令中使用的参数及其含义:
-o orderer.example.com:7050
:指定要连接的Orderer节点的地址和端口。--tls
:使用TLS进行安全通信。--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
:指定TLS根证书的文件路径。-C $CHANNEL_NAME
:指定要在哪个通道(channel)上实例化链码。$CHANNEL_NAME
是一个环境变量,需要替换为你实际使用的通道名称。-n mycc
:指定要实例化的链码的名称为mycc
。-v 1.0
:指定要实例化的链码的版本为1.0
。-c '{"Args":["init","a","100","b","200"]}'
:指定要传递给链码的初始化参数,以JSON格式提供。在这个示例中,传递了["init","a","100","b","200"]
作为初始化参数。-P "OR ('Org1MSP.peer','Org2MSP.peer')"
:指定链码的背书策略(endorsement policy)。在这个示例中,使用了一个OR
条件,要求Org1MSP.peer
或Org2MSP.peer
中的任一节点进行背书。该命令将在指定的通道上实例化指定版本的链码,并将初始化参数传递给链码的
init
函数进行初始化。
4、查詢链码
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
5、调用链码
如果要发起交易,则需要开启TLS验证并指定对应的证书路径,且在调用相应链码函数时须根据不同的实际情况指定相应的所需参数。
使用invoke命令调用链码
-
发起交易
peer chaincode invoke -o orderer.example.com:7050 --tls --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"]}'
这个命令用于在Hyperledger Fabric网络中调用已实例化的链码(chaincode)。
以下是命令中使用的参数及其含义:
-o orderer.example.com:7050
:指定要连接的Orderer节点的地址和端口。--tls
:使用TLS进行安全通信。--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
:指定TLS根证书的文件路径。-C $CHANNEL_NAME
:指定要在哪个通道(channel)上调用链码。$CHANNEL_NAME
是一个环境变量,需要替换为你实际使用的通道名称。-n mycc
:指定要调用的链码的名称为mycc
。-c '{"Args":["invoke","a","b","10"]}'
:指定要传递给链码的调用参数,以JSON格式提供。在这个示例中,传递了["invoke","a","b","10"]
作为调用参数。该命令将在指定的通道上调用已实例化的链码,并将调用参数传递给链码的
invoke
函数执行相应的操作。
-
查询交易
交易执行完毕之后,为了验证交易是否被正确执行,可以再次执行查询命令,根据输出的查询结果判断交易是否正确。
执行查询a账户的命令,并查看输出结果:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
执行成功则输出结果,如90。
问题
1.链码安装在一个节点中还是安装在多个节点中?有什么区别?
在实际生产环境中,必须在应用通道上每一个要运行链码的背书节点上安装链码。
其他未安装链码的节,点不能执行链码,但仍可以验证交易并提交到账本中。
背书节点需要由联盟的成员共同指定,然后在实例化链码时指定背书策略,但链码的安装一定要在所有预先指定的背书Peer节,点中进行。
2.链码执行查询与执行事务的流程相同吗?
不相同,如果执行查询操作,则客户端接收到背书的交易提案响应后不会再将交易请求提交给Orderer节点。如果执行事务操作,则会执行完整的交易流程。
3.背书策略具体指的是什么?
背书策略是一种在实例化链码时指定由当前通道中的哪些成员节点进行背书签名的策略。
4.如果在实例化链码时没有指定背书策略,那么会有节点进行背书吗?
如果在实例化链码时没有明确指定背书策略,则默认的背书策略是MSP标识DEFAULT成员的签名。