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

区块链部分是由我来完成,这个月前完成区块链和社区的对接,展示一个完整的项目,下个月就上线了。

这是理想的社区区块链架构图:

注:其实每个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的联盟社区(一) --前言的更多相关文章

  1. 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器

    接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...

  2. 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络

    现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...

  3. 搭建基于hyperledger fabric的联盟社区(四) --chaincode开发

    前几章已经分别把三台虚拟机环境和配置文件准备好了,在启动fabric网络之前我们要准备好写好的chaincode.chaincode的开发一般是使用GO或者JAVA,而我选择的是GO语言.先分析一下官 ...

  4. 搭建基于hyperledger fabric的联盟社区(七) --升级chaincode

    上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chainc ...

  5. 搭建基于hyperledger fabric的联盟社区(三) --生成公私钥证书及配置文件

    一.生成公私钥和证书 Fabric中有两种类型的公私钥和证书,一种是给节点之前通讯安全而准备的TLS证书,另一种是用户登录和权限控制的用户证书.这些证书本来应该是由CA来颁发,但是目前只有两个社区,所 ...

  6. 搭建基于hyperledger fabric的联盟社区(二) --环境配置

    接下来讲一下在本地测试区块链网络的过程.我要部署的是2peer+1orderer架构,所以需要准备三台虚拟机,为了方便起见可以先把一台配置好,然后复制出剩余两台即可.搭建虚拟机我用的是virtualb ...

  7. 搭建基于hyperledger fabric的联盟社区(八) --Fabric证书解析

    一.证书目录解析   通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下:   ca: 存放组织的根证书和对应的私 ...

  8. 搭建基于hyperledger fabric的联盟社区(九) --检索状态数据库

    一.启动elasticsearch服务 官网下载压缩包解压,进入bin目录启动: ./elasticsearch 通过ip访问 localhost:9200,可以看到如下信息 { name: &quo ...

  9. Hyperledger Fabric定制联盟链网络工程实践

    总体来看,网络上成体系的可用的 Fabric 教程极少--不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是 ...

随机推荐

  1. jedis客户端,取redis服务的值

    package com.common.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...

  2. Routing and Action Selection in ASP.NET Web API

    https://exceptionnotfound.net/using-http-methods-correctly-in-asp-net-web-api/ The algorithm ASP.NET ...

  3. jQuery的序列化元素 serialize()方法 serializeArray()方法 param()方法

    当提交的表单元素较多时用serialize()方法,serialize()方法也是作用于一个jQuery的对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. serialize() 方法通 ...

  4. Java socket - 使用代理服务器

    为什么使用代理服务器不需要多说了. 使用Proxy Java提供了Proxy类实现使用代理进行通信. Proxy类的构造器Proxy(Proxy.Type type, SocketAddress sa ...

  5. JNIjw04

    1.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_JNIjw04.h" #include <string> ...

  6. python脚本3_输入若干个整数打印出最大值

    #输入若干个整数,打印出最大值 # m = int(input('Input first number >>>')) while True: c = input('Input a n ...

  7. 玩转maven

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...

  8. iOS调试技巧(debug)

        说到debug,可以说到的东西就太多了,一个程序员,即使逻辑非常出色,也会出现bug问题,那么debug是每个程序员必备的技巧,尤其是Xcode开发, 苹果公司的开发的Xcode真的是十分强大 ...

  9. angularJS中directive父子组件的数据交互

    angularJS中directive父子组件的数据交互 1. 使用共享 scope 的时候,可以直接从父 scope 中共享属性.使用隔离 scope 的时候,无法从父 scope 中共享属性.在 ...

  10. 【hive】函数大全

    数学函数 Return Type Name (Signature) Description DOUBLE round(DOUBLE a) Returns the rounded BIGINT valu ...