【许晓笛】EOS 区块数据结构

EOS 区块长啥样?bash

对于一个区块链项目来讲,最核心的数据莫过于区块数据,区块数据结构是整个区块链项目的技术基础。不过因为 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)

在区块头的基础上,出块见证人进行签名,就是签名区块头:post

//签名区块头结构体
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 白皮书里说明了区块摘要的结构:ui

Region

      Cycles (sequential)(串行)

        Shards (parallel)(并行)

          Transactions (sequential)(串行)
复制代码

能够看到,多个 Transactions 组成了一个 Shards(片区),多个 Shards 组成了一个 Cycles(周期),多个周期组成一个 Region(区域)。每一个区块所包含的交易就被这样的层级结构组织起来,并将最终的组织结构单独记录在区块中。这也是 EOS 之后开发并行执行的基础。spa

区块(已签名)(signed_block)

前面提到区块摘要只说明了交易的组织结构,并无具体的交易信息,咱们要在区块最后添加完整的交易信息,就造成了一个 EOS 完整区块。3d

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

复制代码

总结

咱们用图形绘出了 EOS 区块数据结构,便于你们理解。code


相关文章和视频推荐

【许晓笛】EOS 系统架构图解cdn

圆方圆学院聚集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。 公开课地址:ke.qq.com/course/3451…

相关文章
相关标签/搜索