首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Fabric 1.0测试和运行环境构建及弹珠交易市场应用(一)

Fabric 1.0测试和运行环境构建及弹珠交易市场应用(一)

作者头像
企业架构师思维
发布2025-05-30 11:44:12
发布2025-05-30 11:44:12
2670
举报

超级账本Fabric1.0在2017年3月份已经发布了alpha版本,为了让读者可以近距离接触到Fabric1.0 的架构和应用特点,作者特意制作了本辑,快速帮助读者构建Fabric1.0测试和运行环境。另外,为了演示fabric1.0的架构特定,在运行环境 上,作者还部署了一个弹球交易市场Marbles应用,读者可以基于这个应用更加深入的理解Fabric1.0架构的原理思想。 一、测试和运行环境构建说明 测试环境主要用来对开发的chaincode进行测试,只有一个peer节点和orderer节点。本文的第一部分实现单节点的开发测试环境的构建。 实际运行环境需要有多个节点,运行的示例拟模拟由两个组织构成的联盟交易市场,每个组织有自己的注册用户,CA和网络节点,如下图所示。

示例构建了一个超级账本Fabric1.0区块链网络,为弹珠联盟市场建立了专门的通道ch1,在ch1上部署了两个 chaincode,一个是网络和通道测试chaincode,另一个就是我们的弹珠交易市场Chaincode,区块链网络使用了两种客户端访问方式, 一种是基于fabric-ca-client和fabric-client的node.js方式,另一种是基于peer命令行cli方式。这是一个由弹珠 交易市场构成的联盟链,示例中有两个交易市场“United Marbles” 和 “eMarbles”,每个弹珠交易市场都可以进行用户注册,弹珠注册(资产登记)和弹珠转移(资产转移),弹珠除了可以在本交易市场内进行转移,还可以向其他交易市场上的用户进行转移。如果以现实中的例子做类比,每个交易市场相当于一个证券公司,由证券公司共同构成了场内交易所联盟, 或者也可以类比于银行发行的票据,这些票据在票据交易所进行的流通,或者也可以类比于银行的客户在银行内部转账,以及通过央行大小额或银联/网联进行跨行转账。示例构建了一个由3个组织构成的通道,OrdererOrg的成员orderer0为整个区块链网络提供交易排序服务,PeerOrg1的成员节点 peer0和peer1为本组织(“United Marbles”) Org1MSP的背书节点,PeerOrg2的成员节点peer2和peer3为本组织(“eMarbles”)Org2MSP的背书节点。ca0为组织(“United Marbles”)Org1MSP的成员提供enroll和transaction证书,ca1为组织(“eMarbles”)Org2MSP的成员提供enroll和transaction证书。弹珠交易市场的业务逻辑部署在Node.js App请求节点hfc0和hfc1上,程序通过fabric-ca-client同ca0和ca1进行http通讯进行enroll并获取transaction 证书,客户端请求节点在通过ca的认证后,将业务逻辑处理封装成交易建议,然后向成员节点发起背书请求,背书节点在docker-vm进行交易的 chaincode的执行验证,构建读写集合,请求节点接收到背书节点的交易建议响应,基于背书策略进行结果分析,确保读写集合一致性,同时满足背书策略的交易,请求节点将背书结果合并交易建议一并提交给排序共识服务,共识服务将所有通道上的交易进行排序并按时按大小合并成一个批量block广播给这个通道的所有订阅者节点peer0~4,peer0~4收到时序服务广播的block后,进行block内的交易验证并提交到本地账本上。 二、测试环境构建和应用测试 本次实践我们部署的docker都是运行在一个Ubuntu Linux上,这个Ubuntu Linux是我通过vmware虚拟出来的一个虚机,虚机网络都采用NAT方式,共享host主机的外部网络。其主要参数如下: Ubuntu 16.04 LTS IP: 192.168.5.171 gateway: 192.168.5.2 hostname: ubu-blockchain1 Docker Network Bridge gateway: 172.17.0.1 测试单节点环境的docker containers,以及chaincode各个docker-vm container的IP如下: "Name": "fabric-dev-orderer", "IPv4Address": "172.18.0.2/16", "Name": "fabric-dev-peer", "IPv4Address": "172.18.0.3/16", "Name": "fabric-dev-cli", "IPv4Address": "172.18.0.4/16",

"Name": "dev-fabric-dev-peer-mycc-1.0", "IPv4Address": "172.18.0.5/16", "Name": "dev-fabric-dev-peer-marbles02-1.0", "IPv4Address": "172.18.0.6/16" 测试环境使用简化版,只存在一个MSP Org,并且只有一个peer节点,一个时序节点,一个cli节点。 为了便于读者快速进行环境构建和应用测试,本人已经将fabric 1.0的测试和运行环境需要的相关资源上传至github,https://github.com/blockchain101/fabric-docker

所用到的docker images也都上传至docker hub,参见blockchain101/fabric-hfc:1.0, blockchain101/fabric-cli:1.0, blockchain101/fabric-peer:1.0, blockchain101/fabric-ca:1.0, blockchain101/fabric-orderer:1.0。

2.1 首先请安装Docker容器和docker-compose运行环境 请参照 http://bctrustmachine.cn/forum.php?mod=viewthread&tid=22&fromuid=1 安装Docker容器和docker-compose运行环境。 使用docker-compose比较方便的地方是,可以使用别人已经编好的docker-compose.yaml 自动从docker hub pull images并且自动构建应用。

2.2 读者可自行从github下载fabric-docker 资源

$ git clone https://github.com/blockchain101/fabric-docker.git

2.3 通过docker-compose直接启动测试环境各容器 先从docker hub pull下chaincode的执行环境hyperledger/fabric-ccenv

$ docker pull hyperledger/fabric-ccenv:x86_64-1.0.0-alpha

然后进入dev的docker compose执行目录,我们启动docker容器fabric-dev-cli, fabric-dev-peer, fabric-dev-orderer

$ cd fabric-docker/fabric1.0-docker/fabric-dev-docker/dockercomposefiles/

$ chmod +x scripts/script-chdev.sh

$ CHANNEL_NAME=chdev docker-compose -f docker-compose-marblesv3-withcli.yaml up

系统启动时,如果还没有docker images,会从docker hub下载上述的容器images:

启动上述各容器后,会由fabric-dev-cli通过执行script-chdev.sh自动create channel,join channel, install chaincode, instantiate chaincode, invoke/query chaincode。

整个过程是,预先基于组织结构信息configtx.profile, 通过configtx工具生成orderer-SampleSingleMSPSolo.block,我们采用最简单的单一组织profile SampleSingleMSPSolo, orderer启动时通过指定这个组织profile SampleSingleMSPSoloblock block,确保这个orderer为这个组织profile服务;另外基于configtx工具我们还生成了适用于组织profile SampleSingleMSPSolo的通道“chdev”对应的配置交易,这个配置交易会作为创建“chdev”通道的唯一交易被封装在block0上,任何想加入通道“chdev”的 peer节点,都需要带上这个block join进通道“chdev”,同一个组织profile上我们可以创建多个通道,每个通道上我们可以部署多个应用chaincode,如果一个peer 想要参与到一个chaincode账本记账,首先这个节点需要使用带有通道信息的配置交易block0 join到这个通道上,然后再部署想要加入的应用chaincode。当节点fabric-dev-peer第一次初始化chaincode时,就产生了 block1。后续的invoke 交易可以一起被封装在同一个block上参与orderer排序共识,只要在一个block上的交易不存在双花,交易都可以通过状态验证器的验证而被提交 到账本上,如果一个block上的某个交易同另一个交易存在双花关系,排在后面的一笔交易会被mark为非法交易。 2.4 抗“双花”演示 为了演示抗双花效果,我们修改scripts/script-chdev.sh 在chaincodeInvoke dev '{"Args":["invoke","a","b","10"]}' mycc 之后,增加一个chaincode调用,从a转15给b:

  1. chaincodeInvoke dev '{"Args":["invoke","a","b","10"]}' mycc
  2. chaincodeInvoke dev '{"Args":["invoke","a","b","15"]}' mycc

如果这两个交易被封装在一个block中,程序在执行时,会报出下述警告: fabric-dev-peer | 2017-04-25 15:48:00.309 UTC [stateva

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师成长与关爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档