以太坊区块链的区块(Block)结构

2023-05-16

这里以以太坊区块链为基础进行讲解。直接看代码:

区块结构代码:block.go

1、block的header

type Header struct {

    ParentHash  common.Hash    `json:"parentHash"       gencodec:"required"`

    UncleHash   common.Hash    `json:"sha3Uncles"       gencodec:"required"`

    Coinbase    common.Address `json:"miner"            gencodec:"required"`

    Root        common.Hash    `json:"stateRoot"        gencodec:"required"`

    TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`

    ReceiptHash common.Hash    `json:"receiptsRoot"     gencodec:"required"`

    Bloom       Bloom          `json:"logsBloom"        gencodec:"required"`

    Difficulty  *big.Int       `json:"difficulty"       gencodec:"required"`

    Number      *big.Int       `json:"number"           gencodec:"required"`

    GasLimit    uint64         `json:"gasLimit"         gencodec:"required"`

    GasUsed     uint64         `json:"gasUsed"          gencodec:"required"`

    Time        *big.Int       `json:"timestamp"        gencodec:"required"`

    Extra       []byte         `json:"extraData"        gencodec:"required"`

    MixDigest   common.Hash    `json:"mixHash"          gencodec:"required"`

    Nonce       BlockNonce     `json:"nonce"            gencodec:"required"`

}

区块的头部包含内容说明如下:

ParentHash:指向父区块(parentBlock)的指针。除了创世块(Genesis Block)外,每个区块有且只有一个父区块。

Coinbase:挖掘出这个区块的作者地址。在每次执行交易时系统会给与一定补偿的Ether,这笔金额就是发给这个地址的。

UncleHash:指向叔区块的指针

Root:状态数根节点的哈希值。状态数用来记录账号信息, 合约账户和用户账户等信息。

TxHash: 交易树根节点的哈希值。

ReceiptHash:收据树根节点的哈希值。收据树记录交易执行过程中的一些数据。

Bloom:Bloom过滤器(Filter),用来快速判断一个参数Log对象是否存在于一组已知的Log集合中。

Difficulty:区块的难度。Block的Difficulty由共识算法基于parentBlock的Time和Difficulty计算得出,它会应用在区块的‘挖掘’阶段。

Number:区块的序号。Block的Number等于其父区块Number +1。

Time:区块“应该”被创建的时间。由共识算法确定,一般来说,要么等于parentBlock.Time + 10s,要么等于当前系统时间。

GasLimit:区块内所有Gas消耗的理论上限。该数值在区块创建时设置,与父区块有关。具体来说,根据父区块的GasUsed同GasLimit * 2/3的大小关系来计算得出。

GasUsed:区块内所有Transaction执行时所实际消耗的Gas总和。

Nonce:一个64bit的哈希数,它被应用在区块的"挖掘"阶段,并且在使用中会被修改。

2、block的body

type Body struct {

    Transactions []*Transaction

    Uncles       []*Header

}

Body主要记录交易事物的主体。

3block的定义

type Block struct {

    header       *Header

    uncles       []*Header

    transactions Transactions

    // caches

    hash atomic.Value

    size atomic.Value

    // Td is used by package core to store the total difficulty

    // of the chain up to and including the block.

    td *big.Int

    // These fields are used by package eth to track

    // inter-peer block relay.

    ReceivedAt   time.Time

    ReceivedFrom interface{}

}

所以整个区块链blockChina的结构如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以太坊区块链的区块(Block)结构 的相关文章

  • HEAP[test0621.exe]: Heap block at 00FB3D08 modified at 00FB3D14 past requested size of 4

    错误代码如下 xff1a int main int argc char argv char p 61 new char 4 p 4 61 39 0 39 delete p return 0 此类问题在执行delete时会报错并引起程序崩溃
  • 面试经典-不被忽略的@property

    我们都知道 property是用来声明属性的 可以保存类的状态或信息 而与其相关的内容 诸如copy weak 深拷贝等 经常会在面试的过程中出现 接下来深入下这些模糊 熟悉的内容 理理顺 内容概要 1 property的本质 2 自动合成
  • 面试经典-Block

    实在是想不到该把Block放哪个栏目里 就放这里吧 请原谅我的草率 Block Block对象是C级别的语法和运行时特性 带有自动变量的匿名函数 除了包含可执行代码 还可能包括变量自动绑定 栈 或内存托管 堆 一个Block维护一个状态集
  • Ruby 中的块和过程

    我已经开始学习 Ruby 读了一些教程 甚至买了一本书 Programming Ruby 1 9 The Pragmatic Programmers Guide 我遇到了一些我以前在任何课程中都没有见过的新东西 我知道的其他语言 我是一名
  • Ruby 块的最佳解释? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 您可以分享的对 Ruby 块的最佳解释是什么 用法和编写代码都可以占用块吗 我提供我自己的解释这个答案 稍作修改 Ruby 中的 块 与一般编程术语 代码块 或 代码块 不同 假设以下 无
  • 为什么我不能从方法中抛出异常

    我是 Java 新手 在抛出异常方面遇到了一些问题 也就是说 为什么这是不正确的 public static void divide double x double y if y 0 throw new Exception Cannot d
  • 如何在闭包中调用函数

    在模特的课堂上Location 我得到当前城市的名称 var currentLatitude Double var currentLongitude Double var currentLocation String var current
  • 在 Magento 后端添加自定义仪表板“框”而不编辑默认模板的正确方法是什么?

    我正在努力创建一个我希望有一天能成为公开可用的 Magento 扩展的东西 我提到这一部分是因为我在这里做 正确的事 对我来说很重要 我想做的一件事是在默认的 Magento 仪表板中添加一个框 基本上是一个新的 框 与 前 5 个搜索词
  • 块 - 大括号/无大括号? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 当我开始开发时 我遵循了始
  • 通过模块 xml 文件 Magento 添加一些块到产品视图页面

    您好 我正在开发一个简单的扩展 其中 我需要通过 xml 文件在产品页面上插入一个新块 下面是我的模块的xml文件
  • Magento - 使用购物车页面上的自定义模块添加自定义块

    我创建了一个自定义模块 并尝试在购物车表之后和总计框之前包含一个块 但我无法将其放在那个确切的位置 我可以让我的块出现在内容部分中 就在其他所有内容的下方 但不在中间 如果我覆盖 checkout xml 和 cart phtml 那么我可
  • ruby 中不带参数的 DSL 块

    我正在用 ruby 编写一个简单的 dsl 几周前 我偶然发现了一些博客文章 其中展示了如何转换代码 例如 some method argument do book book some method on book book some ot
  • 当块已经有自己的作用域时,设置 Ruby 块局部变量的目的是什么?

    Learning about Ruby blocks here http rubylearning com satishtalim ruby blocks html What is the point of having block loc
  • ruby 中的块作用域

    我的理解是 ruby 块具有块作用域 并且在块内创建的所有变量将仅存在于该块内 案例示例 food toast cheese wine food each food puts food capitalize puts food Output
  • 完成块?嵌入同步工作流中的异步流程

    潜伏已久 第一次发海报 我对 Objective C 比较陌生 所以如果我问的问题相当简单 我很抱歉 我的谷歌和堆栈溢出让我失望了 所以我想有人可以提供帮助 我有一个同步进程 比如说 连续执行三个函数 称之为 A gt B gt C 其中执
  • WPF 异步任务 阻塞 UI

    我已经与Task类型 一切都很好Task什么也不返回 例如 XAML
  • Rails 的 concat 方法和 do...end 块不起作用

    我刚刚读到 Rails 的concat清理在这里输出内容的助手的方法http thepugautomatic com 2013 06 helpers http thepugautomatic com 2013 06 helpers 我尝试了
  • “块”、“块”、“偏移”、“缓冲区”和“扇区”是什么意思?

    我见过一些处理存档或二进制数据或复制文件 不使用 python 默认函数 的脚本chunk or block or offset or buffer or sector 我创建了一个 Python 应用程序 外部库 存档 提取数据 或二进制
  • 为什么在 Lua 中使用 do-end 块?

    我一直试图寻找这个问题的答案 但未能成功 我想知道 do end 块实际上是用来做什么的 它只是说在我的书中需要时使用值 那么我该如何使用它呢 我是否可以通过将函数放置在 do end 循环中并将局部变量放置在函数外部但在此 do end
  • 在 Android 上阻止传入/传出短信

    有谁知道通过代码阻止传入 传出短信的可靠方法 如果收到实际的短信也没关系 但我想阻止收到该短信的任何通知 此外 不应允许用户发送 或者最好是键入 SMS 消息 那可能吗 Thanks 您无法阻止外发短信 这是我用来阻止传入文本的方法 短信接

随机推荐

  • SRAM驱动开发实例

    一 我写博客的原因 xff0c 应该说是有两点吧 xff08 1 xff09 一点是对阶段性工作的总结 xff0c 虽说技术创新 xff0c 技术创新 xff0c 但在创新之前有一个技术积累的过程 xff0c 写博客 xff0c 便于总结
  • 互补滤波器

    互补滤波器 从 RC 电路 到 数字滤波器 参考 xff1a wikiPedia by luoshi006 原理 低通滤波器 一阶低通滤波器 传递函数 常见的 RC 电路构成的一阶低通滤波器的输入 U 输出 Y 关系如下 xff1a Y U
  • mahony 互补滤波器

    by luoshi006 上接 互补滤波器 xff0c 继续学习互补滤波 参考 xff1a Keeping a Good Attitude A Quaternion Based Orientation Filter for IMUs and
  • PX4 - position_estimator_inav

    by luoshi006 参考 xff1a 1 http dev px4 io advanced switching state estimators html 2 http blog sina com cn s blog 8fe4f2f4
  • PX4-terrain_estimator

    by luoshi006 参考 xff1a https github com PX4 Firmware blob master src lib terrain estimation terrain estimator h PX4 位置估计中
  • 已归档博文收纳

    by luoshi006 欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a L类 Learning GitHub Qt5 5 1 43 OpenCV2 4 10 环境配置PX4 开发环境 xff08 Ubuntu14
  • linux信号量

    1 信号量数据结构 union semun int val 整形变量 信号量初值 struct semid ds buf semid ds结构指针 unsigned short array 数组类型 struct seminfo buf 信
  • 单片机系统中的一种文字平滑(抗锯齿)显示方法

    这是之前一个项目中已实现的方法 xff0c 现在整理后拿出来分享 单片机系统中文字显示部分一般用的是用取模软件取出字模后输出到屏幕上显示 xff0c 这种方式显示的字体有锯齿 xff0c 在DPI低的显示屏上锯齿效果非常明显 对于单色屏来说
  • DIY个人智能家庭网关—— 路由器篇之刷机

    先选择合适的路由器型号 xff0c 要求有两个 xff0c 一 xff1a 有USB口 xff0c 二 xff1a 可以刷openwrt系统 xff0c 我的首选是newifi mini xff0c 比较喜欢折腾的可以刷openwrt官方固
  • 类中的域

    转自http book 51cto com art 201207 350797 htm 类的对象也称为这个类的实例 当创建一个对象时 xff0c 对象包含在类定义中包括的所有域 但是 xff0c 类定义中的域并不总是一样 一共有两种 有一种
  • Postman 插件介绍

    Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求 xff0c 并能运行测试用例的的Chrome插件 其主要功能包括 xff1a 模拟各种HTTP requests 从常用的 GET POST
  • 【2022阿里灵犀互娱】游戏测开笔试AC_Code

    测开笔试 xff0c 90分钟 xff0c 3道编程题 43 八股 xff0c 第二题输出格式模拟题 xff0c 就不贴了 T1 进制转换 题意 有一个数 xff0c 可能是2 xff5e 16进制的其中之一 xff0c 算出所有可能的结果
  • error while loading shared libraries: libopencv_imgcodecs.so.3.4

    最近给电脑重新安装了opencv3 4 10 xff0c 但是跑工程时却出现这个问题 xff0c 网上百度了一堆 xff0c 发现应该是库设置的问题 xff0c 但是到底是哪里出了问题 xff0c 怎么设置 xff0c 我根据我自己的实际情
  • 六、geotrellis按时间序列存储至hbase

    实现代码如下 xff1a import org apache camel scala dsl builder RouteBuilderSupport import geotrellis raster import geotrellis pr
  • 支持向量机svm及python测试

    from sklearn svm import SVR SVC from sklearn datasets import load boston from sklearn datasets import load wine from skl
  • mlp神经网络及python测试

    关于线性模型 xff1a y 39 61 w 0 x 0 43 w 0 x 0 43 43 w p x p 43 b 其中 xff0c y 39 表示对y的估算值 xff0c x 0 到x p 是样本特征值 w表示每个特征值的权重 xff0
  • linux 安装gdal(含hdf)记录

    一 准备工作 经实践 xff0c 在其他用户下存在某种问题 xff0c 可能是对Centos系统上不熟悉 xff0c 无法解决 xff0c 需在root用户下安装 xff09 xff1a su root 安装编译环境 sudo yum in
  • go语言多线程与并发编程

    go语言并发编程 在了解go语言的并发编程之前 xff0c 我们必须先了解并发和并行的概念 我们知道 xff0c 当启动一个应用的时候实际上是启动了一个进程 xff0c 通过该进程实现资源的调度和分配 xff0c 并且多个进程之间是相互隔离
  • Pycharm 中Available packages nothing to show

    国内源 xff1a 清华 xff1a https pypi tuna tsinghua edu cn simple 阿里云 xff1a http mirrors aliyun com pypi simple 中国科技大学 https pyp
  • 以太坊区块链的区块(Block)结构

    这里以以太坊区块链为基础进行讲解 直接看代码 xff1a 区块结构代码 xff1a block go 1 block的header type Header struct ParentHash common Hash 96 json 34 p