
11月24日,比原鍊CTO James參加了Go中國舉辦的Gopher Meetup杭州站活動,與來自阿裡、網易的技術專家帶來Kubernetes、區塊鍊、日志采集、雲原生等話題的分享。James向大家介紹了Go語言特性在區塊鍊中的應用還分析了Go語言成為區塊鍊主流開發語言的原因。
比原鍊的系統架構
在區塊鍊系統中核心層是最核心的,他承接了區塊驗證、交易驗證、節點維護、打包挖礦等重多職責。通信層掌管了區塊鍊系統的網絡服務,區塊鍊的網絡更像P2P的網絡形式,他呈網狀擴散,負責區塊同步、交易同步、節點發現等重要的功能。錢包層是直接和使用者發生互動的一層,他的職責是資産管理、私鑰管理,并與核心層通信驗證區塊交易。
以Bytom為例,他的核心層分為了五個的子產品。我們舉例描述幾個主要的子產品。
孤兒塊管理:孤兒塊就是由礦工挖出但未成為主鍊區塊的區塊(在相同高度産生2個甚至更多的合法區塊,一個區塊成為主鍊,剩下的則稱為孤兒塊),孤兒塊管理就是将未成為主鍊區塊的孤兒塊存儲起來。舉個例子,我現在挖到的區塊是100,那麼下一個區塊理論上是101,但是在網絡層發生延時的時候,可能會發生先出102再出101的情況,那麼孤兒塊管理會将這些父塊未到的子塊先緩存起來。
共識層:确認一個塊是否合法。分為區塊頭驗證和交易驗證。區塊頭驗證需要驗證它的父塊和時間戳,同是需要算力來保證記賬權利。交易驗證比原特别的設計了一層BC層,這層在交易驗證時會獲得更好的性能,交易驗證還和智能合約相關,交易被驗證時參數會參入虛拟機驗證該交易是否合法。
區塊樹管理:又稱為Block Index,作用是記錄全網所有的塊,儲存了全網所有塊的一張鏡像圖。因為有孤兒塊,所有它并不是鍊式結構的,會有分叉的情況,是以稱為區塊樹。舉個例子,區塊樹管理好比有一個分布式系統,但無法保證每個節點的狀态一緻,可能會出現同一個高度産生同時參生區塊的情況。區塊樹管理就是具備了在節點狀态不一緻的情況下讓系統復原到正确的區塊這個功能。
資料存儲:将區塊資料做持久化存儲。包含兩種資料,第一種是區塊資料,會在網絡上進行廣播的原生區塊資訊;第二種是UTXO資料,存儲UTXO資料是為了更快的驗證一筆UTXO是否可以花費,而不需要去周遊所有區塊資訊。
交易池:維護了所有全網發出的但是還未被确認的交易。跟它關聯最大的是挖礦子產品,挖礦子產品每次要産生一個新區塊的時候,它會從交易池拿一些交易打包成塊,然後用Tensority共識算法進行工作量驗算。舉個例子,在節點打包交易之前,交易處在一個未确認的狀态之下,交易池會将這些未确認的交易儲存起來,配置設定給後面的礦工用于打包。
WHY GOLANG?
第一點,區塊鍊是多子產品異步協同工作的,分成了P2P層、錢包層、核心層。其中核心層、情報層裡面都有不同的很多子子產品,在負責不同的事情。Go語言做得很出色非常适合做這方面的開發。
第二點,區塊鍊項目有核心團隊但是主要還是依賴社群參與,Go語言編譯上相對于其他語言稍微嚴格一點,在制定規範後可以使不同開發者代碼風格相近,有利于協同工作的展開。
第三點,Go語言社群完善,有很多非常好的開源庫支援,使用起來非常友善使用者體驗良好。
第四點,主流語言的頭部效應,在區塊鍊的項目裡面超過85%的項目都是基于Go語言開發的,大部分區塊鍊工程師都擅長Go語言,是以當新的項目開始的時候,會首選Go語言。
對區塊鍊感興趣的程式員可以投遞履歷至:[email protected]