當前位置:
首頁 > 最新 > EOS區塊鏈技術代碼分析——獨股一箭獨家分析

EOS區塊鏈技術代碼分析——獨股一箭獨家分析

本文由獨股一箭V微信公眾號獨家分析:

EOS 用了 Graphene 引擎,看過代碼後發現,實際上 Steem 基本是複製了 Graphene 然後在上面修改,而 EOS 複製了 Steem ,然後在上面修改,幾者是演進關係。

所以整體架構上 EOS 和 Steem 很像,插件體系也類似,最關鍵的區別看起來就是支持了 WASM 智能合約以及性能上的優化。

另外就是 Steem 的業務邏輯都是寫在鏈代碼上的,比如創建賬號,發表文章,評論等。EOS 想做成通用的 DApp 鏈,所以把數據模型抽象了一下。

智能合約 ABI 描述文件,裡面定義了數據類型,類型的欄位,表結構以及索引(EOS 支持主索引和二級索引)。EOS 相當於接管了數據的存儲和查詢,DApp 在智能合約中對定義的數據類型進行處理就行。

所以它的 Block 賬本上記錄的並不只是交易,而是 Message。Block,Transaction,Message 之間的關係。

Message 記錄的就是智能合約 ABI 文件中描述的 action 以及數據對象(data 欄位)。

舉例來說,如果要用 EOS 來實現 Steem,保存用戶發布的文章。那就先創建一個 Article 數據結構,把欄位屬性,表結構索引,以及支持的 action(比如 create) 在 ABI 文件中描述清楚。然後寫智能合約,實現它的 apply 方法,apply 方法的參數會有 action,根據不同的 action 實現不同的校驗以及業務邏輯校驗。然後客戶端只需要構造 Article 數據結構,然後通過 EOS 介面發送 Message 即可。

EOS 的智能合約在 DApp 上的支持上確實比以太坊要強一些,只是 WASM 當前支持的語言還有限,當前只支持 c/c++ ,其他的語言還在開發中。

EOS 的 Block 上只存了 Merkle root,並沒有存整個 tree。這個問題 Vitalik Buterin 和 Dan 辯論過一次,V 認為 EOS 這是投機取巧,Dan 認為 Merkle tree 的存在是為了校驗狀態(交易是否存在),而狀態應該是區塊鏈上的記錄回放的結果,不應該屬於共識的一部分,也不用記錄在區塊上,並且 EOS 也是支持利用 Merkle 做輕客戶端證明的。但具體 EOS 怎麼存這個,我自己還沒看太明白。

另外 EOS 和 Steem 都依賴一個 chainbase 的資料庫實現,EOS 中的資料庫索引就是依賴 chainbase 實現的,這個資料庫的實現比較簡單,主要是用內存映射文件(memory mapped

file)。它認為 LevelDB 這種資料庫,性能不行,也不方便做多級索引,對區塊鏈來說,狀態資料庫只是賬本日誌的快照,對持久化要求沒那麼高,所以可以更激進的利用內存。

所以整體看來,EOS 通過 DPoS 超級節點方式,可以將性能提高到一個量級,然後運行一些輕量的 DApp 應用是沒問題的,至少不會像 Ethereum 那樣,跑個貓就給弄堵了。但我對當前公鏈上支撐眾多上規模的 DApp 還是不太樂觀。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 獨股一箭V 的精彩文章:

TAG:獨股一箭V |