VIEW THIS AS

Auto mode follows the Route Engine until you choose a viewpoint.

YOU ARE HERE

ROUTE CHECK

CONNECTED TO

WHAT NEXT

Use the canonical route for this room, or HELP if you are unsure.

区块链时间与截止条件:规则究竟使用哪一个时钟?

Three students in school uniforms work through open books at a classroom table, with textbooks and stationery nearby and study notes on the whiteboard behind them.

English version · 区块链学习导航 · 上一篇

区块链学习 · 延伸文章 BCX002

三名学生在教室桌旁一起阅读书本,身边放有课本和文具。
学习场景配图;不代表照片中的学生正在学习区块链。

截止前发送的请求,仍可能不符合区块链应用的时间条件。应用可能检查执行该请求的区块时间戳,而不是用户点击、服务器收件或读者后来观察到最终性的时刻。判断之前,应先识别时钟和精确比较关系,再看各个时间值。

本课提供一个虚构截止条件记录,包含时隙、缺失区块、延迟纳入和不同时间观察。你将按一项明确规则评价请求,与另一种协议时钟比较,并写出不混淆及时提交与及时执行的判断。

全部案例为合成、非金融情境,不操作真实交易、预约、账户或截止事项。除明确标注的Unix时间示例外,数字都是课堂时钟坐标,不是生产超时建议,也不是法律期限解释。

选择适合你的阅读路线

本篇目录

第1至3节定义时钟和固定规则;第4至7节分析请求、错过时隙和等号边界;第8至10节比较协议时钟与变化的链证据。最后是证据说明和练习。更广泛的时间社会与技术背景,可阅读共享时间如何让社会同步。

返回目录 · 下一节

1. 给每个时间值明确用途

区块链流程可以同时包含多个时间,而它们都没有错误。用户记录按下提交的时刻,界面记录收到请求的时刻,区块提供执行时间戳,读者记录获得回执或最终性证据的时刻,外部报告还可能注明某物理事件据称发生的时间。

这些值回答不同问题。提交时间描述用户动作;协议时间戳属于规则求值的上下文;观察时间说明读者何时得知信息;外部事件时间则需要自己的证据,纳入区块不会凭空生成该证据。

因此,有用的截止说明需要指定字段和不等式。若不知道等号是否允许、采用哪种时钟、什么事件必须届时发生,“截止之前”就不完整。

例如,“应用仅在执行区块时间戳不大于D时接受”,与“网关在D之前收到请求”不同。请求失败后,不能悄悄用后者替代前者。

返回目录 · 下一节

2. 阅读虚构链的时钟规则

模型链使用编号时隙。时隙s的时钟值为1000 + 12 × s,单位是共享课堂坐标上的秒。slot0对应1000,slot4对应1048,slot5对应1060,slot6对应1072,slot7对应1084。这些小数字不是实际以太坊时间戳或日历日期。

本题规定,有效区块的执行时间戳必须等于所属时隙的时钟值。时隙可能经过却没有区块;区块高度统计给定历史中被接受的区块,而不是每次时隙机会。

给定历史在slot4有高度50、时间戳1048的区块;随后slot5有高度51、时间戳1060的区块。slot6没有区块。下一个给定区块在slot7,高度52、时间戳1084。假设这些区块满足模型其他协议规则。

这里区分三个坐标:时隙、高度、时间戳。从高度51到52只增加一个区块,但由于错过一个时隙,时间戳相差24秒。按高度设定的规则,不会自动等同于按经过秒数设定的规则。

返回目录 · 下一节

3. 固定应用截止条件

应用只有在执行区块时间戳小于或等于1060时,才接受虚构展览报名请求。各独立案例中,其他应用条件均被设为满足。每个案例都从新测试样例开始,请求之间不竞争容量,也不改变彼此资格。

按本模型规则,时间条件失败时,被跟踪报名状态不变。本课不推导真实网络费用、账户nonce处理或普遍失败语义,只判断这一确切截止谓词是否成立。

网关收到时间、用户显示时间和声称的物理事件时间,都不是该规则输入。它们可以为其他问题提供证据,但不能覆盖指定执行上下文。

应用也没有要求在1060之前观察到最终性。最终性证据仍然影响读者能否依赖被接受历史,但本谓词在执行时求值。如果增加“截止前观察到最终性”的要求,就变成另一项政策。

返回目录 · 下一节

4. 评价前三个请求

案例A:请求在1040提交,在slot4、时间戳1048的区块执行。由于1048 ≤1060,时间条件通过。结论依据执行区块时间戳;较早提交只是相容背景。

案例B:请求在1055提交,却直到slot7、时间戳1084才执行。由于1084大于1060,时间条件失败。1055早于截止,并不会创造规则从未提供的例外。

案例C:请求在1058提交,在slot5、时间戳1060执行。等号边界通过。读者在课堂观察时间1100取得该接受区块的有效最终性证据。较晚观察,不会追溯地把执行谓词中的1060改成1100。

案例C并不是说最终性不重要,而是执行时间资格与读者后来对接受历史的确认,是记录中不同部分。正确报告保留两者,而不是挑选能带来理想答案的时间。

返回目录 · 下一节

5. 屏幕时间和事件报告不能改写谓词

案例D:请求在时间戳1084的区块执行时,界面仍显示1050。本题明确界面显示过时。应用时间条件失败,之后刷新界面,也不会改变已经使用的区块上下文。

案例E:单独认证的报告说明,相关展览准备在1045实际完成,但报告直到slot7、时间戳1084才到达应用。假设该报告能可靠证明物理事实,应用仍不符合执行时间条件,因为没有“晚到报告证明早先事件”的例外规则。

这是设计区别,不是认定物理报告虚假。另一种应用可以有意允许在较晚报告窗口内提交早先事件的经验证据,但必须明确证据权限、报告期间和比较条件。本题没有这些条件。

案例F:链下预览使用给定区块上下文1059求值,预测时间谓词会通过。实际请求后来在1084执行,按实际给定执行上下文失败。预览回答的是“上下文为1059时会怎样”,并未预留纳入机会或承诺未来区块时间戳。

返回目录 · 下一节

6. 缺失区块使高度计算变成另一问题

给定历史中最后一个符合条件的区块位于slot5,高度51、时间戳1060。slot6没有区块。若请求首次在下一个高度52区块中纳入,其执行时间为1084,已经错过时间截止。

不能因为高度只加一,就将下一区块时间估为1060 +12。给定时隙规则允许空缺,而观察到的下一区块属于slot7,其时间由时隙规则决定,不是高度差乘12。

现在考虑一项独立替代政策:接受到高度52,包含52。在这项不同政策下,slot7请求满足高度阈值。但这不会修复原时间戳政策下的失败,而是说明规格不能互换“再一个区块”“再一个时隙”和“再十二秒”。

该历史也不能保证未来纳入时间。即便知道未来某时隙对应的时钟,也不能证明那里一定有区块、特定请求一定纳入,或请求满足所有其他验证条件。

返回目录 · 下一节

7. 等号是会改变结果的政策选择

原规则使用时间戳≤1060,因此在1060执行通过。若改为时间戳<1060,同一执行就失败。事实没变,变的是边界条件。

如果新应用版本采用严格规则,应记录激活点,按请求执行时实际适用版本评价。不能因为后来有人偏好另一种措辞,就改写早先结果。

界面也受这个区别影响。“1060关闭”并不清楚,除非解释实现中的比较和事件。按读者设备时钟显示倒计时,可以提供参考,却不能保证及时纳入区块。

更清楚的课堂标签可以写:“本规则接受执行时间戳截至1060,包含1060;仅提交不能证明已接受。”真实产品措辞应对应实际协议、实现和适用义务,不能直接借用这个模型阈值。

返回目录 · 下一节

8. 查协议来源,不套用统一时间戳口号

Solidity 0.8.30语言文档将block.timestamp定义为当前区块的Unix纪元秒数时间戳,并提醒链下求值的区块上下文由执行实现提供。语言字段名称本身,并不规定该值的一切共识约束。

作为具体协议层例子,以太坊Bellatrix共识规格将执行载荷时间戳与按时隙计算的时间比较。这是带版本的规格示例,不是证明Bellatrix为当前最新部署升级;但足以说明“所有以太坊提议者都能自由选择任意时间戳”这种无条件说法不恰当。

比特币提供不同的时钟例子。BIP 113为相关锁定时间计算指定过去时间中位数,使用前11个区块时间戳,而不是直接用候选区块时间戳。当前页面标记为Deployed,并记录2015年8月10日分配。

这些来源支持一种方法:识别确切网络、规则版本、字段和比较方式。不能仅因两个协议都有区块时间戳,就把某协议的警告、保证或截止公式搬到另一个协议。

返回目录 · 下一节

9. 计算独立的中位数时钟示例

这个独立数值例子采用具有真实Unix秒数形式的值,与前面的课堂小数字时钟不同。假设相关11个先前区块时间戳,已经为计算排序,从1700000000到1700000010,每次加一秒。中位数是第六项1700000005。

候选区块自己的时间戳被设为1700000020。因此,若比较依据过去时间中位数,就使用1700000005,而不是1700000020。候选区块展示了更大时间,也不能替代规定中位数。

对一个范围有限、要求时间阈值严格小于比较时间的锁定时间比较,阈值1700000005遇到相等比较时间1700000005时,不通过。如果另一个后续案例给定中位数1700000006,则该数值比较通过。

这里只计算声明的时间比较,并不是完整比特币交易有效性判断、构造指南或纳入保证。假设这一比较适用于虚构案例,不建模sequence字段例外、脚本、资金、费用或其他要求,也不创建或提交交易。

请注意它与展览应用包含等号的截止规则不同:前一个规则中相等通过,这个单独给定的严格比较中相等不通过。两个答案不矛盾,因为时钟、比较关系和所问问题不同。

返回目录 · 下一节

10. 把截止结果与被接受历史绑定

再考虑一个最终独立变式:请求在时间戳1060的区块执行,通过展览截止条件,但观察者尚未取得最终性证据。之后,材料明确发生链重组,该区块从被选定历史中移除。

旧成功执行已不能证明新选定历史里存在被接受报名,其回执属于被移除分支。如果其他给定规则允许再次尝试,并在1084执行,截止谓词现在失败。允许重试是本变式前提,不是自动恢复保证。

不能因为请求标识熟悉,就把早先成功沿用到新历史。也不能说原求值算错了:1060在当时分支满足规则。改变的是读者评价接受情况所依据的历史。

这个变式解释了为什么完整证据说明,需要在时间之外保留区块身份和读者最终性背景。单独时间戳无法说明效果是否仍被接受。

返回目录 · 下一节

11. 写出截止证据说明

有用说明包含请求身份、网络和规则版本、精确时间谓词、执行区块身份与时间戳、观察到的应用结果,以及最终性证据或其缺失。提交时间和观察时间应分别标注。

案例B可以写:“请求在1055提交,但在给定slot7区块、1084执行。按当前有效的时间戳≤1060规则,时间条件失败。较早提交并不满足这项执行时间要求。”

案例C可以写:“请求在1060执行,符合包含等号的条件。1100观察到有效最终性证据。规则并未要求在1060前观察最终性,因此较晚观察不改变执行结果。”

案例E还应说明,可靠物理报告对应1045,而执行发生于1084。报告可能支持另一行政问题,但应用没有迟报例外。这样的文字保留两种事实,不编造政策补救。

返回目录 · 下一节

练习:判断哪个时钟起作用

除非题目另有说明,使用原本包含等号的展览规则。

  1. 1055提交、1084执行,通过还是失败?
  2. 1060执行、1100观察最终性,较晚观察是否导致时间条件失败?
  3. 高度51之后,下一区块是slot7的高度52,它的时间戳必定是1072吗?
  4. 可靠事件报告说1045,但1084才执行,原规则接受吗?
  5. 只将谓词改为时间戳<1060,在1060执行能通过吗?
  6. 对中位数示例的11个已排序值,比较采用1700000020还是1700000005?

答案:第1题失败,因为执行太晚。第2题不会因此失败,等号通过,最终性观察是独立字段。第3题不是,错过时隙后给定时间戳为1084。第4题不接受,因为规则使用执行时间,且没有报告例外。第5题按新严格谓词失败。第6题采用1700000005,也就是该比较要求的中位数。

再检查一次:如果从案例B移除执行区块身份和时间戳,只留下提交1055,剩余证据就无法确定截止结果。不能因提交早就假设成功,也不能因界面后来显得延迟就假设失败。

返回目录 · 下一节

常见问题

区块时间戳能证明外部事件何时发生吗?

本身不能。它提供协议上下文,外部事件声明需要自己的证据,以及说明如何使用证据的应用规则。

提前发送能保证纳入吗?

仅凭提交时间无法保证,本课延迟纳入案例说明了区别。真实行为必须按实际协议和运行条件判断。

区块高度算时钟吗?

它可以作为高度规则的输入,但不能与经过秒数互换。本课错过时隙的例子说明,两者不一定按固定比例增长。

模拟器能证明真实截止结果吗?

它可以证明给定上下文下的结果,却不能确定未来真实执行的时间戳或纳入情况。环境课程解释了如何记录这个边界。

返回目录 · 下一节

来源与延伸阅读

可靠问题不只是“是否在截止之前”,而是“哪个事件,用哪个时钟,在何种被接受历史中,满足了哪项规则”。

返回目录