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

软件发布,不会让所有节点自动执行同一套规则。升级公告,也不能说明某个运营者实际安装了什么。即使观察到了就绪信号,仍然需要区分:信号出现了,还是区块真的按照已激活的新规则接受检查?
理解升级时,应分别回答两个问题。第一,旧规则与新规则各自接受哪些记录?第二,哪些参与者在什么时点实际执行哪套规则?这两个答案能够解释:某些变更可以保留一个方向的兼容性,却仍然让参与者对特定区块产生不同判断。
本课使用刻意简化的验证练习。它不是部署方案,不是完整共识协议,也不建议读者更改真实节点软件。数值字段与激活高度均为虚构。
选择适合你的阅读路线
本篇目录
- 1. 识别所处层次与具体规则
- 2. 四种事件不应共用一个标签
- 3. 完整写出旧规则
- 4. 收紧规则:新接受集合更小
- 5. 放宽规则:新规则允许旧规则不接受的值
- 6. 激活前安装,会改变时间问题的答案
- 7. 信号只能先证明信号本身
- 8. 追踪分歧,但不要虚构后续结果
- 9. 建立采用记录,而不是只报一个百分比
- 10. 兼容性结论需要明确边界
- 11. 练习与答案
- 12. 常见问题
- 13. 资料来源与延伸阅读
- 阅读第1至3节,分清规范、发布、安装与激活。
- 完成第4至6节,比较收紧规则与放宽规则的变更。
- 用第7至9节分析信号、可能的分歧以及采用证据。
- 在依赖“兼容”或“已升级”等标签之前,先完成练习。
1. 识别所处层次与具体规则
上一课的治理练习,讨论谁能改变应用的目录上限。本课处理另一项任务:比较节点用于检查候选区块的验证规则。
区块可能带着相同的可见标签,却被不同规则判断。节点的答案取决于它实际执行的规则、激活配置,以及相关历史与状态。
所以,只说“第二版接受这个区块”并不完整。是哪一个第二版实现?哪个网络?什么激活条件?哪一段父区块历史?讨论的是验证通过、被选为当前链头,还是终局性?
本模型会明确给出这些条件。它没有代币余额、交易费、工作量证明目标、验证者投票或执行虚拟机。我们只检查一个整数字段,让读者能逐项核对接受结果,而不必被实现细节遮住重点。
真实升级可能同时改变多项相互作用的规则。小模型教的是如何表述兼容性结论,不能据此认证真实网络升级的兼容性。
2. 四种事件不应共用一个标签
规范描述预期规则。软件发布提供实现文件。安装让运营者拥有选定的实现与配置。激活决定新规则从何时开始适用于该实现。
这些事件可以发生在不同时间。运营者可以在新规则激活前先安装软件,也可以在其他参与者激活后继续使用旧软件。
EIP-1将提案文档及其流程,与实现工作和协调联系起来并加以区分。提案的标准状态属于该流程,不能普遍替代对特定节点实际运行情况的观察。EIP-1
本练习假设,观察到的链达到高度80时,新软件包发布。一些运营者安装它。软件包在高度100以下保留旧规则,从高度100开始应用新规则。
算例没有暗中引入软件缺陷、安装失败或网络歧义。凡写明某运营者已正确安装指定软件包,这就是给定条件。没有这类条件时,是否安装仍然需要证据。
3. 完整写出旧规则
每个候选区块带有一个整数字段n。旧规则O要求n至少为零、最多为八,两个端点均包含在内。
本练习假设,每个候选区块都满足其他共同检查,并扩展一段对当前比较有效的父历史。因此,各案例中的验证结果由n检查决定。
旧规则接受的值为:
- 零、一、二、三、四、五、六、七、八。
九超出范围。负数超出范围。4.5虽然在数值上介于零与八之间,却不属于规定的整数定义域。
定义域必须明确。如果一名读者假设整数,另一名读者允许小数,两人检验的就不是同一条规则。
接下来考察两个彼此独立的升级方案。R缩小接受集合,E扩大接受集合。它们分别从O开始,不是一次升级的连续阶段。
这些字母表示给定集合,不代表真实区块链、客户端版本或标准提案。
4. 收紧规则:新接受集合更小
激活后,收紧后的R只接受零至五的整数。R接受的所有值,都满足O。
在高度100,比较四个候选值:
- n等于四:O接受,R接受。
- n等于七:O接受,R拒绝。
- n等于十:O拒绝,R拒绝。
- n等于十三:O拒绝,R拒绝。
方向必须说清楚:在给定字段模型中,通过R意味着通过O;通过O不意味着通过R。七就是反例。
这种集合包含关系,是解释类似软分叉的收紧变更时常用的直观方法。它描述的是给定假设下记录的接受关系,不证明所有运营者已采用新规则,也不证明分歧不可能发生。
旧规则节点可以接受包含七的区块,而执行R的节点会拒绝它。R有效区块落在O范围内,不会强迫所有出块者只产生符合R的区块。
还要注意旧规则节点无法证明什么。按O接受区块,不等于检查了新增限制。如果n恰好为四,两种答案一致,但验证理由与能提供的保证仍然不同。
因此,在一个容易通过的例子上意见一致,弱于证明双方执行同一套规则。
5. 放宽规则:新规则允许旧规则不接受的值
在独立的E方案中,激活后的新规则接受零至十二的整数。O接受的每个值都通过E,但E接受的一些值无法通过O。
在高度100:
- n等于四:O接受,E接受。
- n等于七:O接受,E接受。
- n等于十:O拒绝,E接受。
- n等于十三:O拒绝,E拒绝。
十展示了另一方向的不兼容:新规则允许的区块,可能被仍执行O的节点拒绝。
这说明类似硬分叉的放宽变更所面临的兼容性问题,但不表示真实硬分叉都只是扩大一个数值范围。真实变更可能替换规则,其关系比本课的嵌套集合复杂得多。
也不意味着一定出现永久分裂。如果参与者协调采用并产生共同接受的历史,就不一定观察到这种分歧。反过来,“升级已经获批”也不能证明协调成功。
逻辑结论只针对候选值与规则组合。按E,十符合给定字段规则;按O则不符合。哪些历史会被产生、跟随或确定为终局状态,需要额外信息。
6. 激活前安装,会改变时间问题的答案
回到R方案。正确安装的R软件包在高度100以下仍使用O。
在高度99,n等于七的候选区块,既通过旧O节点,也通过已经运行R软件包但尚未激活新规则的节点。在高度100,同样的字段值仍通过O,却不通过已经激活的R。
这并不矛盾。软件包包含激活边界,两个候选区块分处边界两侧。
在E方案中,高度99的n等于十,既不能通过O,也不能通过尚未激活的E软件包。到了高度100,它仍不能通过O,却可以通过已激活的E。
所以,“已安装”与“已激活”应分列记录。只记录软件包的监测,可能忽略不同的激活配置;只记录公告中激活日期的监测,可能忽略运营者是否安装了必要规则。
为便于理解,本模型采用固定高度。真实系统可能使用其他条件,包括时间戳或根据之前区块计算的状态转换。重点是检查实际条件,而不是用熟悉的日历公告替代它。
7. 信号只能先证明信号本身
假设一些参与者在高度90发出就绪信号。本模型仍规定在高度100激活,信号不会改变这个边界。
给定信号可以证明:所观察记录中出现了某个信号。它本身不能证明发出者完整的软件行为、其他所有运营者的采用情况,或未来区块的有效性。
比特币BIP 9是区分部署状态的真实特定例子。它描述信号,以及包括锁定和激活在内的状态转换;该机制在激活状态下执行新增共识规则。其门槛、周期与超时规则属于那份规范,不属于本课虚构的高度100练习。BIP 9
不要随意混合不同机制的零件。从一份提案取门槛、从另一份提案取激活日期、再从第三个来源取运营者数量,并不能构成一致的部署规则。
社会层面的公告也应这样处理。“我们支持升级”可以是有用的协调证据,但不是对所有未来验证决定的认证执行记录。
8. 追踪分歧,但不要虚构后续结果
在R方案的高度100,设有两个候选区块扩展同一个给定有效父区块。A包含四,B包含七,其他检查都通过。
O允许两个候选区块;R允许A、拒绝B。双方对B的有效性存在分歧。
但这不能说明:O节点同时看到两者时,会选择哪个作为链头。模型没有提供排序规则。也不能说明A或B已经具有终局性,或某一分支持续无限增长。
在独立的E方案中,A包含四,C包含十。O允许A、拒绝C;E允许两者。同样,接受集合不同,但链头选择与终局性结论仍需要更多规则与观察。
大量支持票或令人信服的公告,不能替代某节点按规定执行的有效性检查。如果它的当前规则拒绝十,把十所在分支描述为“广受支持”,不会让这个字段通过O。
同样,暂时没有分歧也不证明普遍兼容。如果所有被观察候选值都是四,两套规则都会接受这批样本。能够区分规则的值尚未被测试或观察到。
9. 建立采用记录,而不是只报一个百分比
有用的升级证据记录,应列出参与者、软件文件、配置、激活条件与观察到的行为,并说明样本范围。
三个虚构运营者可以有以下记录:
- J:已正确安装R软件包,并使用给定的高度100条件。
- K:仍执行O。
- L:宣布支持,但实际安装的规则与配置尚未验证。
按照模型,在高度100,J拒绝七,K接受七,L的结果仍未知。如果把L的公告当成已安装,就会夸大证据。
可以说,在三个具名运营者中,有两个的配置已知。但这不是全网采用率、质押权重比例、出块份额或用户偏好指标。
如果J运营多个公开端点,把每个端点当作独立决策者,也需要依据。本课不会仅凭地址或标志推断所有权独立。
以太坊治理说明指出,协议变更涉及不同利益相关者的社会与技术协调,开发者与节点运营者具有不同选择。这支持我们检查真实实现与采用情况,却不能补上虚构网络缺失的测量数据。以太坊治理说明
10. 兼容性结论需要明确边界
接受“这次升级兼容”之前,可以要求作者把这句话补完整:
与哪套旧规则兼容?针对哪些记录?在哪个激活条件之前或之后?基于什么共同历史与假设?
对于R,激活后存在一个方向的包含关系:所有允许的整数也被O允许。对于E,旧规则允许的整数继续被允许,但新增的十与O不兼容。
如果真实变更还改变了解释方式、状态转换或编码,仅检查数值范围就不够。两个实现可能都能解析字段,却导出不同状态,那又是另一类兼容性问题。
同样,门户继续显示熟悉的余额,不能证明协议层兼容。界面可能隐藏了验证行为变化,或者只查询某条分支。
目的不是让每份升级说明都变长,而是让每个结论有可以检验的对象。明确规则集合与激活边界的短句,比笼统保证所有人都“使用最新版”更有帮助。
11. 练习与答案
练习一:共同通过
在高度100,n为四,O和R都接受。这能否证明O运营者已安装R?
不能。四同时通过两套规则,无法用这一观察区分实际执行的是哪套规则。
练习二:收紧的反例
在高度100,n为七,O与R分别如何判断?
O接受,R拒绝。这推翻了“每个O有效候选区块也都符合R”的说法。
练习三:放宽的反例
在高度100,n为十,O与E分别如何判断?
O拒绝,E接受。新规则有效的候选区块,可以被旧规则节点判为无效。
练习四:边界之前
正确安装的E软件包,在高度99检查n为十的候选区块。是否接受?
不接受。高度100以下仍应用O,安装软件本身不会让E提前激活。
练习五:支持,但缺少安装证据
L在高度90宣布支持。能否据此填写它在高度100对七是否执行R的结果?
不能。公告未证明实际规则与激活配置,结果仍然未知。
练习六:小数
n为4.5,因为小于五,是否通过R?
不通过。给定定义域要求整数。只检查上界,漏掉了规则的一部分。
练习七:广受支持的无效候选区块
O节点看到许多消息支持包含十的候选区块。支持度会改变其有效性判断吗?
不会。按给定O规则,十不通过。模型没有提供这些消息改变O的机制。
练习八:分歧一定产生长期分裂吗?
不一定。接受表说明,对特定候选区块可能出现不同验证答案。实际后续还取决于出块、传播、链头选择、参与者选择与终局性。
12. 常见问题
软分叉对旧节点总是没有影响吗?
本课不能支持这么宽泛的结论。收紧规则可以保留一个方向的接受关系,但旧节点并不执行新增限制。运行后果取决于具体系统。
硬分叉一定产生两条永久链吗?
不一定。兼容性问题本身不能证明长期分裂,实际采用与产生的历史仍然重要。
发布规范能证明网络已经采用吗?
在相关证据假设下,它能证明规范已发布。采用还需要关于实现、配置与参与者的信息。
发信号就是执行验证吗?
不是。信号与强制执行的验证规则是不同观察。特定部署规范决定信号如何影响激活。
为什么不同时决定链头?
因为有效性与链头选择回答不同问题。加上一条未给定的选择规则,会让练习看起来比证据实际允许的更确定。
13. 资料来源与延伸阅读
资料核对日期为2026年10月12日。数值范围、高度与运营者均为虚构,不实现所引用网络的完整升级过程。
- BIP 9:Version bits with timeout and delay:状态为Deployed,类型为Informational,分配日期为2015年10月4日;说明一种特定信号与部署状态机制。
- EIP-1:状态为Living,创建于2015年10月27日;支持提案与实现协调的说明。
- 以太坊治理说明:页面更新于2026年6月6日;支持利益相关者协调与不同参与选择的说明。
- How Blockchain Works:需要先理解共享记录基础的读者,可以阅读这篇更广泛的入门介绍。
有用的升级解释,应把确切规则差异、激活条件与实际参与者行为联系起来。一次发布、一个信号,或者对某个候选区块得出相同答案,都不能替代整条证据链。
