石墨烯区块链(2)核心功能
1. 區塊結構
鏈式區塊的基本數據結構都是一棵樹(考慮有分叉的情況),石墨烯的區塊鏈也不例外,一個區塊中包含上一個區塊的id,每個區塊的id為區塊內容的MAC。
block由block header和transaction list構成。
1.1 block header
- previous:前一個塊的id
- block_num
- digest:塊id
- witness:出塊者
- transaction_merkle_root
1.2 transaction list
為本塊打包的交易集合,transaction list的結構與其他區塊鏈不一樣。石墨烯的transaction list中的每個transaction并不只是一個交易的操作,而是支持多個operation的集合。
一個operation是一個基本操作的定義,如轉賬、投票等。
一個transaction里可以包含多個operation。但是這些在一個transaction里的operations依然保持事務的特性,也就是在同一個transaction里的operation要么都執行,要么都不執行。
石墨烯區塊鏈沒有獨立的虛擬機,不支持智能合約。所有操作都由operation來定義,如gas計算、撮單等。如果需要擴展operation,只需要實現相應的接口即可。
2. 存儲
石墨烯中的存儲使用的是文件存儲。
- 所有數據都以文件的形式進行組織和管理,并沒有使用數據庫。
- 存儲框架需要實現數據的管理功能,石墨烯框架在啟動和運行時,需要將大部分數據加載到內存,因此對內存的要求非常之高。
2.1 對象模型和索引模型
所有的對象實例都有一個全局唯一的id編號。
2.2 一個對象編號包括三部分內容
- space_id:標識是否協議對象,正常都為1
- type_id:表示對象類型
- id為此類型是第幾個創建的實例。
space id 占最高 8 位, type id 占中間 8 位, 最低 48 位是 id。
eg. id為1.2.12376。
石墨烯的對象索引實現其實使用的是vector和map,由于所有的索引數據都會加載到內存,所以B+樹無法發揮減少IO的優勢。
3. 共識
石墨烯的共識算法使用的是Dpos,系統中最重要的角色是witness和committee。
- witness:通過投票產生的,系統有個witness維護時間周期,沒到周期進行一次witness、committee等的更新。
- Committee由得票最多的11個人組成,Committee的職責是修改系統參數,無法左右出塊。
- Witness負責出塊。其中投票統計和洗牌過程決定了出塊的witness。
在收到一個new block時,如果new block前一個block不是當前塊,并且塊高高于當前塊高會進行分叉判斷和處理:
step1. 找到兩個叉的LCA。
step2. 回滾到LCA。
step3. 沿最長鏈,依次push_block()。
石墨烯通過記錄每一步的undo日志,實現了操作的回滾。每出現切換分支時,先找到最近公共祖先進行回滾操作,然后執行新的block的操作。
總結
以上是生活随笔為你收集整理的石墨烯区块链(2)核心功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EOS (3)系统特点
- 下一篇: EOS (4)账户