[转]Fabric2.3中使用test-network搭建测试网络
这个测试网络一方面可以用来学习Fabric,另一方面也可以让一些更有经验的开发者来测试他们的智能合约和应用,但是不建议用于生产环境,在2.0版本后,这个测试网络也取代了原来的"first-network"。
1.启动测试网络
首先进入clone好项目的目录,执行如下命令进入测试网络所在文件夹
cd fabric-samples/test-network
在这里可以看到一个network.sh文件,执行./network.sh -h可以看到它的使用说明
下面这条命令会移除先前所有运行中的容器
sudo ./network.sh down
然后执行如下的命令,会创建一个Fabric网络。
sudo ./network.sh up
有些人可能会在这一步过程中遇到问题,小编也遇到了,不要慌,点这看解决办法
Peer binary and configuration files not found..
Follow the instructions in the Fabric docs to install the Fabric Binaries:
https://hyperledger-fabric.readthedocs.io/en/latest/install.html
这个网络由两个peer节点,一个order节点组成,当使用这个命令的时候,不会有channel被建立,如果成功的话可以看到如下的输出。
可以通过如下命令查看当前运行的三个Docker容器,这三个容器就是由刚才的up命令创建的
sudo docker ps -a
每个与Fabric网络交互的节点需要属于一个作为网络成员的组织,这些组织所组成的组被称为consortium(联盟),这个测试网络有两个联盟成员Org1和Org2,还有一个为网络提供排序服务的排序组织。
Peers是Fabric网络的基础组件,它存储区块链的账本,并在交易提交到账本之前验证交易,Peers也运行包含着业务逻辑的智能合约,由此来管理账本上的资产。
网络中的每个Peer都属于联盟的一个成员,在测试网络中peer0.org1.example.com和peer0.org2.example.com各有一个peer。
每个Fabric网络也包含一个排序服务,用于将交易进行排序,这样可以让peer节点专注于验证交易和提交到账本。在order节点收到来自客户端的交易之后,会按照顺序添加到一个块中,然后分发到各个peer中,加入区块链账本。此外order节点还可以操作系统的channel,定义哪些组织是联盟成员。
测试网络中用了一个Raft排序节点来提供排序服务,这个节点所属组织为orderer.example.com,在测试网络中只有一个order节点,但是在真实的网络中,可能会有被多个组织操作的多个排序节点,不同的排序节点会利用Raft共识算法在网络中来达成交易的一致。
2.创建一个Channel
Channel是一个用于特定网络成员之间通信的私有层,只有被邀请加入Channel的成员才能够使用它,对网络中其他成员不可见,每个Channel都有一个单独的区块链账本,被邀请加入Channel的peer可以存储Channel的账本然后验证Channel的交易。
运行如下命令可以创建一个名为mychannel的Channel连接Org1和Org2。
./network.sh createChannel
只要最后打印出========= Channel successfully joined ===========
就说明创建成功了,也可以利用-c来自定义Channel的名称,通过指定不同的名称可以创建多个Channel。
如果想要在启动测试网络的同时创建Channel,可以同时使用up和createChannel两个参数。
3.在管道中使用chaincode(智能合约)
06在创建channel之后,可以使用智能合约来和channel的账本交互,运行在网络成员上的应用可以调用智能合约来改变账本上的资产,也可以查询智能合约来读取账本上的数据。
多重签名用于保证利用智能合约创建的交易的有效性,在提交到账本之前,智能合约会被多个组织签名,这样可以防止一个组织篡改账本,只有交易是连续的,而且被足够多的组织签名之后,才会提交到账本中。指明channel中组织的策略也是chaincode定义的部分。
在Fabric中,只能合约以chaincode的形式部署在网络中,一个智能合约会安装在一个组织的peers中,之后才能部署在Channel中,这样才可以用于和区块链账本交互和交易背书,Channel中的成员需要同意chaincode中的定义,这些定义建立了chaincode的治理,只有足够多的成员同意了定义,才能将这个定义提交到channel中,来进行使用。
这里运行如下命令可以启动一个用于刚刚创建好的channel的chaincode
./network.sh deployCC
这个命令会创建一个名为fabcar的chaincode到两个peer上,然后用在两个peer所属的channel上。
在fabcar chaincode的定义提交到channel之后,这个脚本会调用init函数来初始化这个chaincode,然后调用这个chaincode来防止初始化的车辆列表到账本中,然后会使用查询chaincode的方式来确认数据已经被添加了,这些数据将会用于之后的测试。
4.与网络交互
当测试网络成功启动之后,可以利用命令行的peer命令与网络交互,它允许用户调用部署好的智能合约,更新channel或者安装和部署新的智能合约。
首先确保自己位于test-network目录下,并且已经根据1.3节的内容配置好了peer的环境变量。或者用如下的方式来临时配置。
export PATH=${PWD}/../bin:$PATH
此外还需要配置一下config所在的目录。
export FABRIC_CFG_PATH=$PWD/../config/
这样准备工作就做好了。
设置如下的环境变量,可以使得你作为Org1来操作peer命令。
# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
CORE_PEER_TLS_ROOTCERT_FILE和CORE_PEER_MSPCONFIGPATH两行指明了Org1的加密所用的信息。
可以使用如下的命令来查看channel的账本中的汽车列表,这个列表是刚才使用deployCC参数时添加的。
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
当然chaincode也可以在网络中的某个成员想要转移或者更新资产的时候调用,利用如下的命令可以调用fabcar chaincode来修改账本中的某一辆车的拥有者。
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 fabcar --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":"changeCarOwner","Args":["CAR9","Dave"]}'
如果出现"Chaincode invoke successful. result: status:200 "的字样,说明更新成功。
由于背书策略要求交易被Org1和Org2都签名,所以chaincode在调用时需要用–peerAddresses参数来指明两个Org,因为TLS在这个网络中被使用到,所以需要使用到tlsRootCertFiles来指明TLS证书。
为了查看调用是否成功,可以使用另一个chaincode的查询,这里我们可以利用Org2来执行peer命令进行查询,首先需要设置如下环境变量。
# Environment variables for Org2
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
然后可以使用如下命令来查看CAR9在账本中的情况。
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar","CAR9"]}'
5.关闭网络
当使用完测试网络的时候,可以用如下命令来关闭测试网络。
./network.sh down
这条命令会停止并移走节点和chaincode的容器,删除加密所用的信息,并且移走channel和docker卷等之前运行产生的东西,不过如果需要的话,之后可以利用up参数再次让网络运行。
6.启动过程详解
- ./network.sh为两个peer节点和一个order节点创建了证书和密钥,默认情况下,脚本会利用在organizations/cryptogen文件夹下的加密工具。
- 脚本利用configtxgen工具创建了系统的创世块,它使用configtx/configtx.yaml文件来创建创世块,并存储在system-genesis-block文件夹中。
- 当上述两步完成之后,./network.sh会启动网络,脚本利用在docker文件夹下的docker-compose-test-net.yaml文件创建peer和orderer节点。
- 如果使用了createChannel子命令,脚本还会运行script文件夹下的createChannel.sh脚本来创建所需要的channel,脚本会用peer命令来创建channel,加入两个组织。
- 如果运行了deployCC命令,脚本会在所有peers上运行script下的deployCC.sh脚本来安装fabcar chaincode,在chaincode的定义被提交到channel之后,peer命令会调用init函数来初始化chaincode,并将所需的数据放入chaincode中。
转自:https://blog.csdn.net/zekdot/article/details/106977734
[转]Fabric2.3中使用test-network搭建测试网络的更多相关文章
- 【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
问题描述 如何把开启NFS协议的Azure Blob挂载到Linux虚拟机中呢? [答案]:可以使用 NFS 3.0 协议从基于 Linux 的 Azure 虚拟机 (VM) 或在本地运行的 Linu ...
- 在 ML2 中 enable local network - 每天5分钟玩转 OpenStack(79)
前面完成了一系列准备工作,本节开始将创建各种 Neutorn 网络,我们首先讨论 local network. local network 的特点是不会与宿主机的任何物理网卡相连,也不关联任何的 VL ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- 在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
原文:在WPF中使用Caliburn.Micro搭建MEF插件化开发框架 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/a ...
- Hyperledger Fabric手动生成CA证书搭建Fabric网络
之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...
- KVM——以桥接的方式搭建虚拟机网络配置
以桥接的方式搭建虚拟机网络,其优势是可以将网络中的虚拟机看作是与主机同等地位的服务器. 在原本的局域网中有两台主机,一台是win7(IP: 192.168.0.236),一台是CentOS7(IP: ...
- NFS - Network File System网络文件系统
NFS(Network File System/网络文件系统): 设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): NFS只是一种文件系统,本身没有传输功 ...
- MFC程序使用GTest搭建测试框架
一.起源 最近对单元测试比较感兴趣,之后就上网搜了一些测试的框架,C++项目使用的测试框架基本上都使用的GoogleTest,之后就开启了gtest的学习之路. 主要是根据<玩转Google开源 ...
- 结合jenkins在Linux服务器搭建测试环境
何时使用: 测试过程中我们需要持续构建一个软件项目,为避免重复的手动下载.解压操作,我们需要搭建一个能够自动构建的测试环境,当代码有更新时,测试人员只需点一下[构建]即可拉取最新的代码进行测试(也可设 ...
随机推荐
- mysql5.7.35数据库迁移
最近开发使用的测试环境的服务器使用的一台惠普E7300CPU\4G内存\160G西数硬盘配置,数据量近达20G!虽然作为测试数据库但也算是重要角色,一旦出现将严重影响工作.计划迁移至另一台做有RAID ...
- LGP6825题解
科技的力量!!!!!!我德意志科技天下第一!!! 这是一篇需要一点儿科技的题解,但实际上这个科技我认为甚至算不上科技,太 simple 了. 首先是推柿子: \[\sum_{i=1}^n\sum_{j ...
- oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度
场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter table 表名 modify(字段名 字 ...
- CentOS 7.5 安装配置tigervnc-server
系统版本: [root@s10 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 1.安装 Gnome 包 [root@ ...
- 航模电池平衡头接线,1S-6S原理图
1-4S平衡头接线 S数代表几级锂电池串联,比如3S代表串联了3级,所以总电压为3*3.7V=11.4V.(每一级可能是多个电芯并联) 图源:百度贴吧 图源:5imx论坛 3S电池示例 B6充电器
- Nacos:Nacos与OpenFeign的对接使用
Nacos(三):Nacos与OpenFeign的对接使用 上篇文章中,简单介绍了如何在SpringCloud项目中接入Nacos作为注册中心,其中服务消费者是通过RestTemplate+Rib ...
- 【Java面试宝典】什么情况下会发生栈内存溢出?
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常. 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常.
- MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐 级之间的区别?
SQL 标准定义的四个隔离级别为: 1.read uncommited :读到未提交数据 2.read committed:脏读,不可重复读 3.repeatable read:可重读 4.seria ...
- 区分 BeanFactory 和 ApplicationContext?
BeanFactory ApplicationContext 它使用懒加载 它使用即时加载 它使用语法显式提供资源对象 它自己创建和管理资源对象 不支持国际化 支持国际化 不支持基于依赖的注解 支持基 ...
- windows 添加路由表
route print 查看路由表 route add 192.168.4.0 mask 255.255.255.0 192.168.18.111 添加路由 rou ...