区块链 - 高级以太坊
以太坊区块链已成为现代非常流行的区块链。在本章中,我们将讨论一些高级以太坊主题,如创世区块、区块难度、Gas 等等。接下来的章节将讨论以太坊区块链的一些重要概念,如以太坊钱包和以太坊矿工的作用。
以太坊中的区块和区块链
区块是区块链的基本结构组件。在以太坊中,每个区块由几个关键元素组成,其中包括 −
1. 交易列表
区块包含已发生的所有交易的综合列表,以及与其关联的任何叔块的标题列表。
2. Ommers 或叔块的标头
叔块是指作为父块的后代但没有自己的子块的块。Ommers 或叔块被视为有效但陈旧的块,不属于主链,但它们增强了区块链的整体安全性。
3. 区块标头
区块标头代表以太坊区块的基本和复杂元素。每个标头包含几个组件,详细说明如下 −
- 父哈希 − 这指的是来自前一个区块的标头的 Keccak 256 位哈希。
- Ommers 哈希 −这是 Keccak 256 位哈希,代表当前块中包含的 ommer(或叔块)列表。
- 受益人 − 此字段保存指定在成功挖掘块后接收挖掘奖励的实体的 160 位地址。
- 状态根 − 状态根字段包含状态 trie 内根节点的 Keccak 256 位哈希。
- 交易根 − 这是交易 trie 根节点的 Keccak 256 位哈希。
- 收据根 −收据根是交易收据 trie 根节点的 Keccak 256 位哈希,其中包括块内所有交易的收据。
- 日志布隆 − 日志布隆是一个布隆过滤器,它从块的交易列表中的每个交易收据的日志条目中聚合记录器地址和日志主题。
- 难度 − 这表示与当前块相关的难度级别。
- 数字 − 这表示所有先前块的累计计数,其中创世块指定为块零。
- Gas 限制 − 此字段表示块的最大允许 gas 消耗量。
- 已用 gas − 此字段反映块内包含的交易所消耗的总 gas。
- 时间戳 −时间戳表示初始化块的 Unix 纪元时间。
- 额外数据 − 额外数据字段可用于存储与块相关的任何任意信息。
- Mixhash − mixhash 字段包含一个 256 位哈希,用于证明已投入足够的计算工作量(工作量证明或 PoW)来创建块。
- Nonce − nonce 是一个 64 位哈希(数值),与 mixhash 字段结合使用,用于验证是否已应用足够的计算工作量 (PoW)。
创世区块
创世区块代表区块链网络中的初始区块。它在内容和创建方法方面与标准区块略有不同。此区块包括 15 个特定项目,如时间戳、nonce、哈希等。
区块验证
如果以太坊区块满足以下条件,则被视为有效 −
- 它与叔块和交易保持一致,确保所有 ommer 都被识别为叔块,并且这些叔块的工作量证明 (PoW) 是合法的。
- 前一个块必须存在且有效。
- 块的时间戳必须有效,这意味着它应该晚于父块的时间戳,并且不能超过未来的 15 分钟。
- 如果任何这些条件不满足,该块将被拒绝。
区块最终确定
区块最终确定是矿工进行的关键过程,用于验证区块的内容并分配奖励。此过程包含四个不同的步骤,详细说明如下 −
Ommers 验证
在挖矿中,ommer 的识别至关重要。这涉及验证陈旧区块的标题以确保其合法性,并确认叔块和当前区块之间的关系符合最大六个区块的深度。
交易验证
在挖矿中,交易的识别至关重要。此步骤需要验证区块中使用的总 gas 是否与上次交易后的最终 gas 消耗相对应,本质上反映了区块内交易消耗的累计 gas。
奖励应用
此步骤涉及奖励的分配,这需要使用相应的奖励余额更新受益人的账户。在以太坊中,矿工还会因陈旧区块而获得补偿,金额为区块奖励的 1/32。
状态和随机数验证
最后一步需要验证状态和区块随机数。在挖矿的背景下,需要计算有效状态和区块随机数。
Gas
在以太坊区块链上执行的每个操作都需要支付 gas。考虑到以太坊虚拟机 (EVM)的图灵完备特性,此机制对于防止无限循环导致整个区块链冻结至关重要。交易费以Ether表示,从发起交易的账户余额中扣除。
矿工需要支付费用才能将交易纳入挖矿工作。如果此费用设置得太低,交易可能无法处理;相反,更高的费用会增加矿工选择交易纳入区块的可能性。但是,如果包含了费用足够但涉及过于复杂的操作的交易,如果分配的 gas 不足,则可能会触发 gas 耗尽异常。在这种情况下,交易将失败,但仍将记录在区块中,发起人将不会收到退款。
交易成本可以使用以下公式计算 −
总成本 = gasUsed * gasPrice
费用表
在三种特定情况下,执行操作需要消耗 Gas −
- 计算操作时
- 创建合约或进行消息调用时
- 内存使用量增加时