要理解什么是区块哈希,你必须了解什么是槽(slot)和区块。
重要的是要了解,槽的持续时间在 400 到 600 毫秒之间,在每个槽中,验证者可以提出一个新的区块。如果未创建区块,则槽会递增,另一个验证者将尝试创建新的区块。这意味着并非所有槽都会有关联的区块,但所有区块都有它们被提出的关联槽。
好的,那么什么是区块哈希?区块哈希是在一个槽期间创建的所有区块链账目的唯一哈希值。 这是从区块的最后条目 ID 计算的 。每个生成的区块结果都是一个独特的区块哈希。这些区块哈希被用作时间戳。
另一个重要的概念是承诺级别 。这些承诺级别衡量了特定区块的网络确认。三个选项是已处理(processed)、已确认(confirmed)和最终确任(finalized)。
当验证者向链提交一个区块时,该区块将处于已处理状态。一旦足够数量的验证者(66%的验证者 )投票以包含该区块,它将被添加到链中,承诺级别将变为已确认。一旦在该区块之上构建了额外的 31 个区块,承诺级别将变为最终确任。
所有交易都包括一个最近的区块哈希,作为时间戳,当区块哈希不再被视为足够新时,该交易将过期。处理交易的验证者将检查“BlockhashQueue”(最近的 300 个区块哈希的列表),以查看交易的区块哈希是否足够新。如果区块哈希不在列表中,则交易将被拒绝。由于槽通常持续时间在 400 毫秒到 600 毫秒之间,一个区块哈希保持有效的时间为 60 到 90 秒。
“ 未找到区块哈希 ”错误发生在验证者处理交易时,交易中包含的区块哈希被认为无效。这可能是因为它太旧,或者在某些情况下,太新。
这种错误最常见的原因是,交易中包含的区块哈希不在验证者将与之进行比较的最近的 300 个区块哈希队列中。这将导致未找到区块哈希错误 。交易过期可能发生在交易在所需时间段内创建和处理。这可能是因为用户花费很长时间来签署交易。还可能出现这样的情况,即提交了有效的交易,但未包含在当前区块中,当它可以包含在稍后的区块中时,交易的区块哈希太旧。
在这种交易实际上已过期的情况下,通常会看到区块高度超出错误(TransactionExpiredBlock heightExceededError)。要更好地理解这个错误,应该了解什么是区块高度。 区块高度指的是当前区块下面的区块数量。如果当前区块是第 1000 块,则区块高度为 1000。当创建交易时,会记录该交易的有效区块高度。如果在处理此交易时观察到当前区块高度高于交易的最大有效区块高度,则会引发错误。
导致“未找到区块哈希错误”的另一种情况是,交易的区块哈希比用于检查该交易过期的区块哈希更新。这有点令人困惑,这里有一个例子:你创建一个交易并包含一个特定区块的区块哈希,比如说区块 1000,然后立即将其发送到 RPC,RPC 可能会获取前一个区块的区块哈希,这种情况下可能是区块 999(因为 RPC 使用更高的承诺级别或者 RPC 节点落后于网络)。结果,交易中的区块哈希将无法找到。这种情况可能发生在两种情况下:
处理上述每种情况的几个步骤。
Helius 博客 - Slots, blocks and Epochs
本文由 AI 翻译,欢迎小伙伴们来校对。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!