区块链-End2End案例详解

华东师范大学数据科学与工程学院实验报告

课程名称: 区块链与分享型数据库 年级: 20级 上机实践成绩:
指导教师: 张召 姓名: 彭林航 学号: 10205501456
上机实践名称: End2End案例详解 上机实践日期: 2022.5.4
上机实验编号: 组号: 上机实践时间:

一、实验目的

​ 本实验在实验 8 的基础上,详细介绍了 End2End 实例的系统结构、End2End 实例的源文档目录结构和文件调用关系以及 End2End 实例启动逻辑。还介绍了 peer 命令常用参数的含义,帮助读者理解手动调用智能合约的指令含义。通过阅读 End2End 案例中的智能合约,读者将了解用户交易的逻辑以及用 Go 编写智能合约的方法。

​ 读者在完成本实验的基础上可以深入了解 End2End 实例的依赖包,如 Peer、Kafka、Zookeeper 等,也可以根据兴趣了解更多 Fabric 中的实例。

二、实验任务

​ (1) 理解 End2End 案例的启动逻辑

​ (2) 手动调用案例中的合约

​ (3) 理解 Fabric 中智能合约的逻辑

三、实验环境

  • JDK 17.0.2

  • git 2.25.1

  • docker 23.0.5

  • docker-compose 1.23.2

  • go 1.10.1

  • fabric 1.1.0

四、实验过程

运行 End2End 案例后进入 cli 客户端

查询账户 a 的资产,可以看到账户 a 的资产为 90

查询账户 b 的资产,可以看到账户 b 的资产为 210

进行转账操作,账户 a 给账户 b 转账 50,可以看到提示转账成功

此时再查询账户 a 的资产,可以看到账户 a 的资产为 40

再查询账户 b 的资产,可以看到账户 b 的资产为 260

五、习题

1. 解释下面命令中每个参数的含义

1
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

答:包含有以下的参数:

  • peer:代表 peer 节点的命令,可以向节点发送命令以执行链码查询操作
  • chaincode:执行的操作类型是链码操作
  • query:执行的操作是查询操作
  • -C mychannel:要查询的通道名称为 mychannel,这是包含了一组组织的区块链网络中的虚拟区域
  • -n mycc:要查询的链码的名称为 mycc,即智能合约的名称。
  • -c '{"Args":["query","a"]}':查询操作需要传递给链码的参数。包含 Args 键和两个元素的数组。这两个元素分别是智能合约中的查询函数名称 query 和传递给该函数的参数 a ,代表智能合约中所创建账户的 key 值。

2. 解释下面命令中每个参数的含义

1
2
3
4
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/exam
ple.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C
mychannel -n mycc -c '{"Args":["invoke","a","b","50"]}'

答:包含有以下的参数:

  • peer:代表 peer 节点的命令,可以向节点发送命令以执行链码查询操作
  • chaincode:执行的操作类型是链码操作
  • invoke:执行的操作是调用操作
  • -o orderer.example.com:7050:指定 orderer 节点的地址和端口,用于向区块链网络提交事务
  • --tls true:指定与 orderer 节点通信时启用 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:指定用于验证 orderer 节点的 TLS 证书的 CA 文件路径
  • -C mychannel:要查询的通道名称为 mychannel,这是包含了一组组织的区块链网络中的虚拟区域
  • -n mycc:指定要调用的链码的名称为 mycc,即智能合约的名称
  • -c '{"Args":["invoke","a","b","50"]}':调用操作需要传递给链码的参数。包含 Args 键和四个元素的数组。这三个元素分别是智能合约中的调用函数名称 invoke 和传递给该函数的参数: a (转出账户)、b (转入账户)和 50 (转账资产),即账户 a 将自己资产中50的资产转移到账户 b 的名下

六、实验总结

​ 通过本次上机实验,基于 e2e 案例,理解了其运行逻辑,通过手动调用案例中的智能合约 ChainCode ,学了到了其中指令的含义,理解了 Fabric 中智能合约的逻辑


区块链-End2End案例详解
http://example.com/2023/05/08/区块链-End2End案例详解/
作者
plh
发布于
2023年5月8日
许可协议