三個月前上面發了一個關於智群匯聚和問題求解研究的項目,我們公司做其中的一個子項目,就是基於區塊鏈的科技信息聯盟構建。利用區塊鏈的去中心化特性,構建一個基於區塊鏈的科技社區,以提供科技群智匯聚采集的基礎承載平台。科技工作者可以發布自己的論文、問題,以及對他人問題的交互討論。由於采用區塊鏈技術,包括最新科技創想在內的討論內容所形成的知識資產可以得到確權,不可編造、不可否認。聯盟的參與節點是各個社區,所有節點維護相同的數據,所有附帶作者的內容都附帶作者的數字簽名,知識產權的確認將變得非常容易。最后,數據分布在網絡的所有節點上,將徹底避免數據的丟失。
區塊鏈部分是由我來完成,這個月前完成區塊鏈和社區的對接,展示一個完整的項目,下個月就上線了。
這是理想的社區區塊鏈架構圖:
注:其實每個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。