当前位置: 首页 > news >正文

(三)Hyperledger Fabric 1.1安装部署-chaincode测试

环境搭建完毕,需要的工具和镜像安装完毕,就可以进行chaincode测试了,接下来参考官方教程运行first-network。

 进入first-netwok:

cd first-network

first-network的文件结构如下

在first-network目录下有两个自动化脚本byfn.sh和eyfn.sh,这两个脚本的启动顺序是先执行byfn.sh再执行eyfn.sh(eyfn.sh不是必须的,eyfn.sh的作用稍后再介绍)。
byfn.sh的执行格式为:./byfn.sh (up|down|restart|generate|upgrade)
执行参数说明:

up:启动
down:清除网络
restart:重新启动
generate:生成证书及创世块
upgrade:将网络从1.0升级到1.1

-c:用于指定channelName,默认值"mychannel"
-t:CLI timeout时间,默认值10
-d:延迟启动,默认值3
-f:使用指定的网络拓扑结构文件,默认使用docker-compose-cli.yaml
-s:指定使用的数据库,可选 goleveldb或couchdb
-l:指定chaincode使用的语言,可选golang 或node
-i:指定镜像tag,默认 "latest"
详细参数可通过./byfn.sh help查看。

 

启动first-network网络:
因为测试chaincode不需要其他辅助的功能,只要将网络启动即可。

./byfn.sh up

执行过程如下

遇到提示输入“y”。

最终看到输出上面的信息,证明启动成功。
first-network会生成1orderer+4peer+1CLI的网络结构,整个网络包括2个org。
输入命令

docker ps

列出所有已启动的容器。

整个网络的启动执行了以下操作:
1、生成创世区块、通道、每个组织的msp等信息,保存在channel-artifacts文件夹中,配置信息对应configtx.yaml文件。
2、生成orderer和peer使用的公私钥和证书等信息,保存在crypto-config文件夹中,配置信息对应crypto-config.yaml文件。
3、创建channel、加入channel、为通道的每个组织设置锚节点,安装chaincode,实例化chaincode,查询chaincode,调用chaincode等操作。

添加组织:
eyfn.sh脚本提供了增加组织的功能,启动./eyfn.sh up会安装jq,等待时间稍长一些。

执行成功后,使用docker ps查看已启动的容器,会发现已经添加了org3。

手动测试chaincode:
测试chaincode,需要先进入到cli容器,后续的操作都在容器内进行。

docker exec -it cli bash

按照官方给出的,有a和b两个账户,查看a账户的余额。

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

a账户的余额是80。
查看b账户的余额

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

b账户的余额是220
下面做以下转账测试,把b账户的钱转给a账户20。

peer chaincode invoke -o orderer.example.com:7050 --tls true --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 mychannel -n mycc -c '{"Args":["invoke","b","a","20"]}'

再分别查看a和b的账户,a的账户变为100,b的账户变为200。

整个网络测试完毕,使用exit退出容器。接下来就可以进行下一步的学习了。

【本文为原创文章,未经允许不得转载,个人网站app.codevillas.com 同步更新】

相关文章:

  • SSL证书过期替换之踩坑总结
  • mysql_config_editor使用简介
  • 2、Android-UI(常用控件)
  • 简述C和C++的学习历程
  • Python使用数据库的基本流程
  • Mybatis 级联查询时只查出了一条数据
  • DevOps GitLab CICD 实践3——CI文件编写
  • 各国脑计划概览
  • JavaWeb xss攻击
  • EditText(插入表情图片)
  • 局域网的优点
  • Mybatis传递多个参数
  • 帆软2017百城巡展启动在即,力掀数据化管理之风
  • SQL-25 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  • iOS Framework 单元测试(一)-- XCTests
  • Apache Pulsar 2.1 重磅发布
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • input实现文字超出省略号功能
  • Laravel 菜鸟晋级之路
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • tab.js分享及浏览器兼容性问题汇总
  • vue-loader 源码解析系列之 selector
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于webpack 的 vue 多页架构
  • 前端面试总结(at, md)
  • 小程序开发之路(一)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • PostgreSQL之连接数修改
  • 容器镜像
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​linux启动进程的方式
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (12)Hive调优——count distinct去重优化
  • (52)只出现一次的数字III
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (区间dp) (经典例题) 石子合并
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)socket Aio demo
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ***通过什么方式***网吧
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core使用ef 6
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • /3GB和/USERVA开关
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce