【许晓笛】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 区块数据结构,便于大家理解。

pic1_webp
pic1


相关文章
|
6月前
|
存储 索引
数据结构(顺序结构、链式结构、索引结构、散列结构)
数据结构(顺序结构、链式结构、索引结构、散列结构)
|
存储 算法 C++
数据结构——C++(未完)
数据结构——C++(未完)
69 0
|
1月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
17 0
|
存储 人工智能 算法
30 个重要数据结构和算法完整介绍(建议收藏保存)
数据结构和算法 (DSA)通常被认为是一个令人生畏的话题——一种常见的误解。它们是技术领域最具创新性概念的基础,对于工作/实习申请者和有经验的程序员的职业发展都至关重要。掌握DSA意味着你能够使用你的计算和算法思维来解决前所未见的问题,并为任何科技公司的价值做出贡献(包括你自己的!)。通过了解它们,您可以提高代码的可维护性、可扩展性和效率。话虽如此,我决定在CSDN新星计划挑战期间将我所了解...
229 1
|
存储 Serverless
深入哈希结构
深入哈希结构
51 0
|
6月前
|
存储 设计模式 算法
【数据结构和算法】找出两数组的不同
这是力扣的 2215 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你两个下标从0开始的整数数组nums1和nums2,请你返回一个长度为2的列表answer,其中: answer[0]是nums1中所有不存在于nums2中的不同整数组成的列表。 answer[1]是nums2中所有不存在于nums1中的不同整数组成的列表。 注意:列表中的整数可以按任意顺序返回。
91 1
|
6月前
|
存储 算法 NoSQL
【云计算与大数据技术】Bloom Filter、LSM树、Merkle哈希树、Cuckoo哈希等数据结构的讲解(图文解释 超详细)
【云计算与大数据技术】Bloom Filter、LSM树、Merkle哈希树、Cuckoo哈希等数据结构的讲解(图文解释 超详细)
73 0
|
存储 算法 容器
哈希结构(详解)
哈希结构(详解)
|
存储 移动开发 算法
【数据结构和算法】使用数组的结构实现链表(单向或双向)
【数据结构和算法】使用数组的结构实现链表(单向或双向)
|
存储 算法
数据结构之哈希表以及常用哈希的算法表达(含全部代码)
数据结构之哈希表以及常用哈希的算法表达(含全部代码)
359 0
数据结构之哈希表以及常用哈希的算法表达(含全部代码)