比原鏈CTO James | Go語言成爲區塊鏈主流開發語言的四點理由

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語言。

對區塊鏈感興趣的程序員能夠投遞簡歷至:james@bytom.io

相關文章
相關標籤/搜索