【許曉笛】EOS 區塊資料結構

圓方圓區塊鏈發表於2018-11-20

EOS 區塊長啥樣?

對於一個區塊鏈專案來說,最核心的資料莫過於區塊資料,區塊資料結構是整個區塊鏈專案的技術基礎。不過由於 EOS 專案一直在快速迭代,區塊資料結構也不斷更新,所以今天才向大家介紹。

區塊頭(block_header)

首先是區塊頭資料結構,包括了雜湊、時間戳、默克爾根、見證人賬戶等。

//區塊頭結構體
struct block_header
{
   //前一區塊雜湊  
   block_id_type           previous;
   //區塊時間戳
   block_timestamp_type    timestam
   交易的默克爾根
   checksum256_type        transaction_mroot; /// mroot of cycles_summary
   //Action 的默克爾根
   checksum256_type        action_mroot;
   //區塊默克爾根
   checksum256_type        block_mroot;
   //見證人賬號
   account_name            producer;
   //見證人排序版本號
   uint32_t                 schedule_version = 0;
   //下一個見證人(可以為空)
   optional<producer_schedule_type>  new_producers;
};
複製程式碼

區塊頭(已簽名)(signed_block_header)

在區塊頭的基礎上,出塊見證人進行簽名,就是簽名區塊頭:

//簽名區塊頭結構體
struct signed_block_header : public block_header
{
   見證人簽名
   signature_type             producer_signature;
};

複製程式碼

區塊摘要(已簽名)(signed_block_summary)

簽名區塊摘要的目的是將區塊中的交易(Transactions)分配到各個層級中,這裡並沒有交易的完整資訊,只展示了交易的層級和分組結構。

   struct signed_block_summary : public signed_block_header {
      
      vector<region_summary>    regions;
   };
複製程式碼

EOS 白皮書裡說明了區塊摘要的結構:

    Region

      Cycles (sequential)(序列)

        Shards (parallel)(並行)

          Transactions (sequential)(序列)
複製程式碼

可以看到,多個 Transactions 組成了一個 Shards(片區),多個 Shards 組成了一個 Cycles(週期),多個週期組成一個 Region(區域)。每個區塊所包含的交易就被這樣的層級結構組織起來,並將最終的組織結構單獨記錄在區塊中。這也是 EOS 以後開發並行執行的基礎。

區塊(已簽名)(signed_block)

前面提到區塊摘要只說明瞭交易的組織結構,並沒有具體的交易資訊,我們要在區塊最後新增完整的交易資訊,就形成了一個 EOS 完整區塊。

struct signed_block : public signed_block_summary {
  //完整交易資訊
  vector<packed_transaction>   input_transactions;
};

複製程式碼

總結

我們用圖形繪出了 EOS 區塊資料結構,便於大家理解。

【許曉笛】EOS 區塊資料結構


相關文章和視訊推薦

【許曉笛】EOS 系統架構圖解

圓方圓學院彙集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。 公開課地址:ke.qq.com/course/3451…

相關文章