比原鏈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
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 區塊鏈開發之Go語言—IO操作區塊鏈Go
- 使用 Go 語言打造區塊鏈(二)Go區塊鏈
- go 語言與區塊鏈基礎講解Go區塊鏈
- 區塊鏈開發入門如何選擇程式語言?區塊鏈
- 實戰區塊鏈技術培訓之Go語言區塊鏈Go
- GO語言實現區塊鏈Part7 NetworkGo區塊鏈
- GO語言實現區塊鏈Part6 Transactions 2Go區塊鏈
- GO語言實現區塊鏈Part4 Transactions 1Go區塊鏈
- GO語言實現區塊鏈Part3 Persistence and CLIGo區塊鏈
- GO語言實現區塊鏈Part1 Basic PrototypeGo區塊鏈
- 使用Go語言從零編寫PoS區塊鏈(譯)Go區塊鏈
- 基於Java語言構建區塊鏈(四)—— 交易(UTXO)Java區塊鏈
- Red 語言建立基金會,發力區塊鏈區塊鏈
- GO語言實現區塊鏈Part5 AddressesGo區塊鏈
- GO語言實現區塊鏈Part2 Proof-of-WorkGo區塊鏈
- 【Go區塊鏈開發】手把手教你匯入Go語言第三方庫Go區塊鏈
- 區塊鏈,中心去,何曾著眼看君王?用Go語言實現區塊鏈技術,透過Golang秒懂區塊鏈區塊鏈Golang
- Go 語言區塊鏈測試實踐指南(一):GO單元測試Go區塊鏈
- 為何Rust語言在區塊鏈中應用廣泛? - RedditRust區塊鏈
- 從Java到區塊鏈:如何成為區塊鏈開發人員Java區塊鏈
- 區塊鏈特輯——solidity語言基礎(三)區塊鏈Solid
- 區塊鏈特輯——solidity語言基礎(六)區塊鏈Solid
- 區塊鏈特輯——solidity語言基礎(七)區塊鏈Solid
- DAPP區塊鏈商城開發(多語言)丨DAPP區塊鏈商城系統開發(海外版)及案例原始碼APP區塊鏈原始碼
- [譯] 用不到 200 行的 GO 語言編寫您自己的區塊鏈Go區塊鏈
- 用於加密貨幣和區塊鏈的語言Simplicity加密區塊鏈
- 選擇Go語言的12個理由Go
- go語言安卓開發Go安卓
- 基於Java語言構建區塊鏈(五)—— 地址(錢包)Java區塊鏈
- 基於Java語言構建區塊鏈(一)—— 基本原型Java區塊鏈原型
- 為什麼很多公司都轉型go語言開發?Go語言能做什麼Go
- JavaScript成為移動開發的主要語言JavaScript移動開發
- 從Java到區塊鏈:如何成為區塊鏈開發者?Java區塊鏈
- 區塊鏈農場養殖遊戲模型開發建立及原始碼示例(Rust 語言版)區塊鏈遊戲模型原始碼Rust
- 區塊鏈技術開發公司談區塊鏈保險的特點區塊鏈
- 區塊鏈背後的資訊保安(1)AES加密演算法原理及其GO語言實現區塊鏈加密演算法Go
- 基於Java語言構建區塊鏈(三)—— 持久化 & 命令列Java區塊鏈持久化命令列
- 基於Java語言構建區塊鏈(六)—— 交易(Merkle Tree)Java區塊鏈