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