zoukankan      html  css  js  c++  java
  • 搭建基于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。

     



     

  • 相关阅读:
    [转载]spring使用PropertyPlaceholderConfigurer加载properties文件处理中文乱码
    [转载]使用@value注解注入properties配置信息
    [JAVA]使用HttpURLConnection下载文件
    [转载]在Java代码运行时获取当前和调用者的行号,方法名,类名,文件名
    [转载]linux下使用tar命令
    暂时解决java.lang.IllegalStateException: It is invalid to call isReady() when the response has not been put into non-blocking mode *
    oracle使用imp导入数据覆盖(overwirte)原有表数据
    线性基
    Matching Problem 暴力
    Alternative Accounts 贪心匹配
  • 原文地址:https://www.cnblogs.com/preminem/p/7686829.html
Copyright © 2011-2022 走看看