搭建基于hyperledger fabric的联盟社区(一) --前言
三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建。利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础承载平台。科技工作者可以发布自己的论文、问题,以及对他人问题的交互讨论。由于采用区块链技术,包括最新科技创想在内的讨论内容所形成的知识资产可以得到确权,不可编造、不可否认。联盟的参与节点是各个社区,所有节点维护相同的数据,所有附带作者的内容都附带作者的数字签名,知识产权的确认将变得非常容易。最后,数据分布在网络的所有节点上,将彻底避免数据的丢失。
区块链部分是由我来完成,这个月前完成区块链和社区的对接,展示一个完整的项目,下个月就上线了。
这是理想的社区区块链架构图:

注:其实每个BC节点(区块链节点)可以包括peer节点和orderer节点。
以下是我本季度完成的工作:
1.搭建区块链网络
分别为两个社区建立一个peer节点。 社区A一开始要求部署在阿里云服务器上,之前在本地通过搭建多台虚拟机的方式测试的区块链网络一点问题都没有,但当我将节点部署到阿里云上的时候却在生成创世区块这一步上出现报错了,忙活了一星期都没解决。各个容器可以ping通,开放的端口也可以telnet上,我甚至把操作系统内核都换成了和我本地部署时一样的内核,16GB的内存也不会是内存不足,后来我在腾讯云服务器上重新部署了一遍也没有任何问题。由于时间关系,这个技术问题先不管了,再申请一台服务器又要一万多,所以出于经济,就在本地部署。社区B是要求部署在他们本地,但是由于这段时间正在开十九大,既不允许远程操作服务器也不允许对外开放端口,所以我就直接过去把环境和fabric配置好了,等十九大结束端口开放以后区块链网络就可以运行了。
(阿里云问题现已解决,是DNS的问题)
2.为每个节点设立数据库
fabric下存在三种类型的数据库。1.基于文件系统的区块链数据库,存储了交易的读写集,不能更改。2.历史数据和区块链索引的leveldb数据库,也不能更改。3.以key-value对的方式存储我们在ChainCode中操作的业务数据的状态数据库。fabric1.0默认的是levelDB,可支持couchdb,所以我选择替换成支持富查询的couchdb来作为社区节点的数据库。我为每个社区部署节点(为了高可用以后可能会在一个社区中部署多个节点),我也为每一个节点部署一个couchdb。可以通过Elasticsearch的logstash将couchdb内的数据实时导入Elasticsearch内,这样就可以对状态数据库进行丰富的全文检索功能了。
3.建立社区联盟
对应于hyperledger fabric,就是创建channel,并且让各个社区节点加入该channel,这样每个社区节点可以接受广播的区块了。
4.安装并运行chaincode
区块链网络和channel都准备完毕,接下来就安装和运行带有社区业务逻辑的chaincode了,实现对帖子的增改查等功能。
5.搭建http API
为每一个社区节点建立一个用node.js开发的服务器,向社区提供http api,支持get请求。该服务器集成hyperledger fabric node sdk,提供了与区块链节点交互的功能。每个社区通过API访问区块链节点,实现将区块链底层屏蔽掉、让社区可以轻松对接。
第一个迭代下很多功能还不完备,下季度的完成目标:
1.目前只有两个社区,所以没加入证书颁发机构fabric ca,下一步将加入ca,让更多的社区加入联盟。
2.由单一orderer共识节点升级为集群共识,使区块链更加安全稳定。
3.升级chaincode,实现对区块链数据的更多操作。
4.增加更多面向社区的API。
搭建基于hyperledger fabric的联盟社区(一) --前言的更多相关文章
- 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器
接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...
- 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络
现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...
- 搭建基于hyperledger fabric的联盟社区(四) --chaincode开发
前几章已经分别把三台虚拟机环境和配置文件准备好了,在启动fabric网络之前我们要准备好写好的chaincode.chaincode的开发一般是使用GO或者JAVA,而我选择的是GO语言.先分析一下官 ...
- 搭建基于hyperledger fabric的联盟社区(七) --升级chaincode
上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chainc ...
- 搭建基于hyperledger fabric的联盟社区(三) --生成公私钥证书及配置文件
一.生成公私钥和证书 Fabric中有两种类型的公私钥和证书,一种是给节点之前通讯安全而准备的TLS证书,另一种是用户登录和权限控制的用户证书.这些证书本来应该是由CA来颁发,但是目前只有两个社区,所 ...
- 搭建基于hyperledger fabric的联盟社区(二) --环境配置
接下来讲一下在本地测试区块链网络的过程.我要部署的是2peer+1orderer架构,所以需要准备三台虚拟机,为了方便起见可以先把一台配置好,然后复制出剩余两台即可.搭建虚拟机我用的是virtualb ...
- 搭建基于hyperledger fabric的联盟社区(八) --Fabric证书解析
一.证书目录解析 通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下: ca: 存放组织的根证书和对应的私 ...
- 搭建基于hyperledger fabric的联盟社区(九) --检索状态数据库
一.启动elasticsearch服务 官网下载压缩包解压,进入bin目录启动: ./elasticsearch 通过ip访问 localhost:9200,可以看到如下信息 { name: &quo ...
- Hyperledger Fabric定制联盟链网络工程实践
总体来看,网络上成体系的可用的 Fabric 教程极少--不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是 ...
随机推荐
- APIGateway网关安全设计
Spring Cloud里面有个组件 Zuul网关 网关和 过滤器 拦截器很相似 网关可以实现过滤器 拦截器的功能 而且可以实现Nginx的基本功能 反向代理 负载均衡ribbon Nginx是软负载 ...
- ls存在的文件,不能操作
bash-4.2# pwd/oracle/product/10.2.0/db_1/network/adminbash-4.2# lssqlnet.ora libnrad ...
- 利用ECharts开发的步骤
引入Echarts的相关库文件,以及自定义的js文件 <script src="${pageContext.request.contextPath}/js/echarts/source ...
- Spring @Transactional (一)
Spring @Transactional (一) 博客分类: JAVA SpringJPAJDBCUPSQL Spring事务的传播行为 在service类前加上@Transactional,声明 ...
- Prims算法 - 最小生成树
2017-07-26 14:35:49 Prims算法,是一种基于“贪心”的求最小树的算法 ,以每次加入一个邻接边来建立最小树,直到找到N-1个边为止. 规则:以开始时生成树的集合为起始的顶点,然后 ...
- Pandas排序
Pandas有两种排序方式,它们分别是 - 按标签 按实际值 下面来看看一个输出的例子. import pandas as pd import numpy as np unsorted_df=pd.D ...
- ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syria, Lattakia, Tishreen University, April, 30, 2018
ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syr ...
- "Entity Framework数据插入性能追踪"读后总结
园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...
- Ajax-03 XmlHttpRequest实现Ajax
概述 Ajax主要就是使用XmlHttpRequest对象来完成请求的操作,该对象在主流浏览器中均存在 XmlHttpRequest对象的主要方法 a. void open(String method ...
- ubuntu 编译 vim+lua
mac $ brew install vim --with-cscope --with-lua --override-system-vim 安装spf13-vim见下面linux部分. 如果安装mac ...