1. 程式人生 > >【許曉笛】EOS 區塊數據結構

【許曉笛】EOS 區塊數據結構

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 區塊數據結構,便於大家理解。


技術分享圖片

圓方圓區塊鏈匯集大批區塊鏈名師,采取導師值班制,為學員實時解決技術疑難。請關註圓方圓區塊鏈知識星球與導師。(培訓咨詢請聯系船長13826054890微信手機同號)

技術分享圖片


作者小笛 ,專註於 EOS 技術研究與區塊鏈智能合約開發.是圓方圓區塊鏈的導師,更多小笛老師的文章和視頻請關註圓方圓鏈圈公眾號。

技術分享圖片


【許曉笛】EOS 區塊數據結構