三个月前上面发了一个关于智群汇聚和问题求解研究的项目,咱们公司作其中的一个子项目,就是基于区块链的科技信息联盟构建。利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础承载平台。科技工做者能够发布本身的论文、问题,以及对他人问题的交互讨论。因为采用区块链技术,包括最新科技创想在内的讨论内容所造成的知识资产能够获得确权,不可编造、不能否认。联盟的参与节点是各个社区,全部节点维护相同的数据,全部附带做者的内容都附带做者的数字签名,知识产权的确认将变得很是容易。最后,数据分布在网络的全部节点上,将完全避免数据的丢失。node
区块链部分是由我来完成,这个月前完成区块链和社区的对接,展现一个完整的项目,下个月就上线了。golang
这是理想的社区区块链架构图:数据库
注:其实每一个BC节点(区块链节点)能够包括peer节点和orderer节点。api
如下是我本季度完成的工做:安全
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。