【许晓笛】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 技术研究与区块链智能合约开发.是圆方圆区块链的导师,更多小笛老师的文章和视频请关注圆方圆链圈公众号。

原文地址:http://blog.51cto.com/13625500/2107527

时间: 2024-11-06 09:33:44

【许晓笛】EOS 区块数据结构的相关文章

【许晓笛】EOS:IPFS落地的重要途径

写在前面,这一篇文章是许晓笛 2018.05.20 在北京 <IPFS开发者圆桌会议>上的发言实录,感谢主办方戴嘉乐和董天一的邀请,感谢编辑们.先介绍一下<IPFS开发者圆桌会议>,创办人是戴嘉乐,前百度高级工程师,最早的IPFS工程师,一个会跳街舞的天才程序员,一个成功的价值主链投资者,能做学术研究也能做团队组织者,简直太全面了有木有.联合创办人是董天一,国内IPFS界不可不知的布道者,为IPFS项目在中国的推广做出了很大的贡献.戴嘉乐和董天一发起的<IPFS开发者圆桌会议

【许晓笛】详解 EOS 的新共识机制 BFT-DPoS

EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的委托股权证明),本篇文章将详解新共识机制的原理. 传统 DPoS EOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证明),类似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆需要4

【许晓笛】从零开始运行EOS系统

复习一下上次文章的内容,EOS 系统主要有三个应用程序: nodeos: EOS 系统的核心进程,也就是所谓的"节点". cleos:本地的命令行工具,通过命令行与真人用户交互,并与节点(nodeos)和钱包(keosd)通信.是用户或者开发者与节点进程交互的桥梁. keosd:本地钱包工具.可以管理多个含有私钥的钱包并加密. 要求本篇教程适用于以下系统,但是不论你的电脑是 windows 还是 mac,都强烈建议安装一个虚拟机,在 Ubuntu 上搞,因为 Mac 上有很多坑.安装

【许晓笛】EOS 超级节点的五个使命

在EOS系统中,有"两股势力"是整个系统最关键的因素,那就是项目方和见证人.很多人觉得EOS这个项目"奇葩",就奇葩在项目方和见证人的关系上.EOS的项目方是BlockOne公司,创始人是BlockOne公司的首席技术官(CTO)Daniel Larimer,坊间称BM(ByteMaster).BlockOne公司曾经多次声明,其公司只开发EOS软件,并免费提供给任何想使用软件的人,公司不负责任何EOS网络启动.更令投资者难以接受的是,BlockOne公司公开宣称,

【许晓笛】重新理解EOS的系统架构

从区块链三要素的角度 区块链系统中,去中心化程度与效率之间天然地存在矛盾关系.如果区块链智能合约系统想追求类似比特币的去中心化程度,理论上效率就会大打折扣.现实也是这样的:比特币每秒钟只能处理7笔左右的交易,每一笔交易要用至少30分钟才能确认,这种效率和速度是远远不如银行转账的.作为一个全球资产交易平台,比特币这样的效率或许可以接受,但对于智能合约平台这样的效率是远远不够的.因为在智能合约中,每一个动作都可以看成是一笔交易,例如五子棋游戏合约中,每下一步棋就是一个交易,用户是无法等待半个小时才能

EOS区块链游戏系统定制开发

EOS区块链游戏系统定制开发 找131.2935.5821 微/电 EOS生态app系统开发,EOS区块链技术系统开发,EOS生态游戏app开发 自区块链成为热潮之后,很多公司都义无反顾地扑向了这项新技术,这其中,一部分是随时都会被风吹跑的投机派,而另一派则是实实在在想用区块链这项技术干实事的人. 2018年是区块链应用落地的元年,那么今年区块链在全球迅速升温,各个国家相继出台区块链数字货币的相关政策,甚至已经用于银行的贷款或者转账等等.同时在这个迅速发展的领域也迎来了新的突破--EOS. EO

EOS区块链开发IDE推荐使用Visual Studio Code和CLion

每一个开发人员都需要一个良好的IDE,EOS开发也是一样,为项目开发过程构建一个良好的IDE环境是第一步.这就是为什么我们要写这个如何使用VS Code或者CLion进行EOS开发的快速教程的原因. 我们还为VS Code创建了一些脚本,这些脚本将你在终端中使用的一些命令自动化. 设置Visual Studio Code 首先,如果你还没有这些VS Code扩展的话,安装一下.对于EOS Dapp开发,它们将非常有帮助: C/C++ - VS Code的智能感知.调试和代码浏览 CMake -

EOS区块链帐户名称始未

引子 从上一节中,我们知道在EOS系统中帐户必需遵循以两个准则 必须短于13个字符 仅能包含以下字符:.12345abcdefghijklmnopqrstuvwxyzEOS为什么要这样做呢,这样做有什么好处,在EOS源码中又是如何实现的,下面我们从EOS源码中一步步分析,并解答这些疑问. 帐户别名 ??在EOS源码中,帐户的类型是account_name,但account_name在C++代码中又是什么类型呢,追踪代码发现,EOS好多类型都用了别名机制,在源码文件types.hpp中的133行,

EOS区块链究竟有几个线程

一 nodeos工作线程 nodeso节点的工作线程包括:一个主线程,一个信号处理线程和两个线程池. 主线程:main函数启动线程,该线程执行完程序初始化工作后,会调用app().io_service.run(), 启动boost::asio::io_service的异步io服务,通过异步io方式完成节点块生产,交易处理等主要业务工作. 信号处理线程:子线程,通过异步io服务,接收系统信号并处理. 线程池,线程池启动的工作线程数可通过启动参数配置. controller线程池: 异步执行块blo