Lecture 4-5 原版讲义链接:https://timroughgarden.github.io/fob21/l/l4-5.pdf
Lecture 4-5 原版PPT链接:https://timroughgarden.github.io/fob21/slides/F21L4-5.pdf
前三章的内容基于2.1节中的四个基本假设以及对于第4个假设的放宽。回顾一下假设3即同步假设:所有节点共享一个全局时钟,并且有一个消息发出后,必然在$t + interval$之内的时间步到达。这在互联网中是很难实现的,我们必须考虑互联网可能存在断电、宕机、遭受DDoS攻击等突发状况或者各种原因导致无法提供服务的情况。这意味着消息发出后可能永远不会到达(即便服务恢复,消息也早就被路由器或其他网络设备丢包了),因此有必要放宽同步假设。
注:
- 如果存在一个先验的
$\Delta$ 是消息延迟时间的最大值,那么该网络模型依然是同步假设。 - 如果仅放宽time step,允许消息延迟可以在$n$个time steps后到达(time inflation),这依然是同步假设(这里的$n$是先验的)。
Time inflation没有真正放宽同步模型,试考虑Dolev-Strong协议:
- sender在time step 0发出消息;
- non-sender在time step 1、2、3……中发送交叉验证消息。
如果我们假设time step的最大延迟是100个时间步,那么只要让non-sender在time step 100、200、300……发送消息即可。这样改造后的协议和原先的协议没有区别,它没有正视本质问题,即现实中互联网通信不可避免的会有意外中断和攻击。并且,这样的设计让节点在大部分时间傻等,效率极为低下,这是不可接受的。一个实际可用的协议的消息传递速度不能被最坏情况下的消息延迟控制,应该在通信网络良好时尽可能快速传递消息,达成共识。
基本思想:
- 没有全局共享时钟
- 对于消息最大延迟不做假设
最小假设是每条消息最终会到达目标机器,最大延迟是一个有限值,但不对这个值的大小做任何假设(消息可能遭遇任意长但有限的延迟),即最终可达性约束。该假设是为了防止系统假死,看上去永远没有进展。
注:对于任意一条消息,消息的传递时间没有任何先验的上限。即消息可能会在1秒后送达,也可能会在1亿年后送达,没人知道什么时候会送达。
如果假设消息不会到达,那么不可能性结果是易证的(即平凡的不可能性),但这样就没有什么实际意义了。我们希望证明的是不平凡的不可能性,也就是说,即便所有消息最终会被送达,共识依然是不可能的。
我们不希望设计出一个在某一种网络模型下运行良好,却在另一个模型下是坏的协议。我们很难评估在那么多通信模型里,到底哪个模型足够好;也很难评估现在我们认为是好的模型,在未来是否依然是好的。因此,我们希望对网络模型做出最弱的假设,看看在情况足够坏的时候,是否能够设计出一个好的协议。异步网络模型就是这样的具备最弱假设的模型,这很类似于算法分析中的最坏情况分析。
另一方面,对网络通信行为做出假设是很困难的,甚至是不可行的。真实世界的通信行为很复杂,敌手的攻击手段是非常多的,网络通信能出现的故障也很多样。因此,我们对网络通信做出的假设难以实证,我们无法保证敌手的攻击手段或者网络通信故障仅限于我们的假设空间。由于这样的假设在现实中难以成立,那还不如不做这样的假设。
异步网络模型其实并不符合真实世界。做出这样的建模也不是为了建模真实网络,而是为了避免建立不可靠的、有争议的假设。这种最低限度假设的模型是研究协议健壮性的极限测试场,后面我们会看到,在这种极限的情况下,所有的协议目标是无法同时实现的,这也是FLP定理的核心。
异步网络模型的形式化描述如下:
- 维护一个未送达消息的消息池$M$,$M$可初始化为${(r,\bot)^{n}_{r=1}}$
-
$(r,\bot)$ 是一个二元组,表示节点编号$r$和空值$\bot$(初始消息为空,空值用符号$\bot$表示) -
$(r,\bot)^{n}_{r=1}$ 表示$r$的取值为从$1$到$n$,即构造$(1,\bot),(2,\bot),(3,\bot),...,(n,\bot)$这些二元组,共$n$个二元组 - 将上述二元组装进一个集合里,即${(1,\bot),(2,\bot),(3,\bot),...,(n,\bot)}$,可以写为${(r,\bot)^{n}_{r=1}}$,也就是未送达消息的消息池可以初始化为由$n$个二元组:$(节点编号,消息为空值)$构成的集合
-
- while(TRUE):
- 任意一条消息$(r,m) \in M$会被投递给接收者$r$(前提是满足最终可达性约束)
-
$r$ 表示消息接收者,$m$表示消息内容(message payload/content) - 异步模型不对消息到达顺序做假设
- 我们在证明FLP过程中可以思考敌手可能从$M$中取出一条消息使得协议是失败的
-
- 接收者$r$可以往$M$中添加任意条消息
- 任意一条消息$(r,m) \in M$会被投递给接收者$r$(前提是满足最终可达性约束)
上述的while循环的每一轮迭代可以看成是time step,但要注意的是,节点并不知道迭代次数。这个模型是纯事件驱动的,节点只有在收到新消息时才会发送消息。
如果消息池$M$一开始完全是空的,即$M = \varnothing$,那么任意节点都不会发送任何消息,这样系统就不能启动。为了使系统启动,我们为每个节点初始化一条空值消息$(r, \bot)$到$M$中,这样每个节点都会获得一次参与协议的机会。某个节点$r$在收到一条消息$(r,m)$后,它可以选择停止运行协议,也可以选择往消息池中再添加一条空值消息$(r,\bot)$,这样即便$M$空了之后,也可以保持节点$r$的持续运行。
在第2和第3章中,我们了解到了拜占庭节点可以为所欲为,可以共同密谋来破坏协议的目标。在异步模型中,可能存在一个新的攻击方式——对消息投递顺序的恶意控制。这意味着协议必须同时抵御拜占庭节点+恶意消息调度的联手攻击,这使得协议的设计难度变得更为艰难。
FLP不可能性定理所关注的是一个我们还没有正式定义的一个共识问题:拜占庭共识问题(Byzantine Agreement, BA)。
在定义BA之前,我们先厘清一下“协议”(protocol)是什么意思。
与之前几章的解释一样,协议指的是部署在每个节点本地的一段事件驱动的代码。这段代码根据节点所掌握的信息来决定要发送哪些消息。
在异步模型中,协议是纯事件驱动的:只有当节点收到一条新的消息后,协议才会被触发执行。
一个节点在某一个时刻所拥有的信息有两类:
- 在协议开始时所拥有的私有输入(private input)
- 至今为止收到的所有消息的顺序。
因此,协议的定义如下:
对于每一种可能的私有输入 和 消息接收序列,协议规定了节点在收到当前消息时应该发送哪些消息作为响应。
需要强调的是:协议的行为不能依赖于节点所不知道的信息,例如其他的节点收到了哪些消息。
即:如果一个节点在两次执行中收到的消息序列完全相同,且它的初始输入也相同,那么它的行为和最终输出也必然相同。
与BB问题一样,拜占庭共识问题(BA problem)也是一个一次性的共识问题(single-shot consensus problem)。所谓一次性共识问题,指的是所有节点在一次协议执行中,就一个值达成一次性的决定,而不是持续不断地达成多个决策。SMR问题是multi-shot consensus,每个节点会持续地输出值,即交易序列。
在BA中:
- 每个节点$i$都有一个私有输入$v^*_i \in V_i$(在FLP中,我们依然将$V$的空间设置为$V={0,1}$);
- 没有一个指定的sender节点,所有节点都是平等的,扮演相同的角色;
BB中有sender节点,只有sender节点有私有输入(private input),而BA中,每个节点都有自己的私有输入。这里的“私有”的意义与之前是一样的,指的是当协议开始时,除了节点$i$自己,没有任何其他节点知道$v^*_i$的值,只知道它是$V$的一个元素。
BA可以看作是BB的推广——BB是一个特殊的BA,只有一个节点有私有输入,且更贴近多方共识的场景,更贴近区块链和SMR。
和BB协议一样,我们对协议的关注点在于,一个共识协议需要满足三个性质:终止性(termination)、一致性(agreement,即安全性)和有效性(validity,即活性)。其中,终止性和一致性的定义和BB协议相同。有效性需要做出一些修改,以反映BB和BA的一个重要区别:现在不是只有sender才有私有输入,而是所有节点都有私有输入。
我们期望BA协议有如下性质:
- 终止性。所欲诚实节点$i$最终都会停止并输出$w_i \in V$;
- 一致性。无论私有输入是什么,所有诚实节点都会停止并输出相同的值;
- 有效性。对于每个诚实节点$i$,如果$v_i=v^$,则$w_i=v^$。
上述有效性的定义的意义是,如果所有诚实节点的输入都相同,则输出也必须为该值,不能被拜占庭节点干扰。
协议设计困难的地方在于我们难以同时满足上述所有性质。单独满足两个性质是容易的,例如节点输出某个固定值,就能满足一致性和终止性;每个节点都输出自己的输入,就能满足有效性和终止性。但协议在拜占庭节点的干扰下还能同时满足三个性质是异常困难的。
在异步模型中,BB问题是平凡的不可解的(留作家庭作业,读者可自行证明)。之所以引入BA问题,是因为通过FLP的证明,可以间接推出在异步模型中,SMR问题也是不可解的(读者也可试证,假设$n \ge 3, f=1$)。
| 问题 | 能否在异步模型中成立 | 说明 |
|---|---|---|
| 拜占庭广播(BB) | ❌ 平凡不可解 | 因为只有一个 sender,而网络延迟可控 ⇒ 没办法区分“恶意”和“延迟” |
| 状态机复制(SMR) | ❌ 无法实现 | 因为它需要多轮一致达成,而 FLP 定理已经否定了基本共识 |
| 拜占庭共识(BA) | ❌ FLP 证明不可达成 | 是三者中最“简洁”和“中立”的形式,适合用于理论证明 |
FLP定理:[Fischer-Lynch-Paterson 1985] 在异步模型中,对于任意$n \ge 2$,即使系统中最多只有一个故障节点(即$f=1$),也不存在任何确定性的协议,能够同时满足终止性(termination)、一致性(agreement)和有效性(validity)。
关于终止性、一致性、有效性的具体描述,请看4.3.2节,不再赘述。
对FLP定理的一些注释:
-
这里的确定性(deterministic)指的是节点不使用任何本地随机性。每个节点在收到新消息后应发送什么消息,完全由它的私有输入和它到现在为止收到的消息序列所决定。
-
FLP定理对随机协议有启发意义。在随机协议中,节点所发送的消息可以是私有输入和收到的消息的概率函数。实际上,FLP的证明揭示了这样一个事实:对于任何一个协议(无论是确定的还是随机的),只要它在终止时保证一致性和有效性,即使仍满足“所有消息最终会到达”的假设,就一定存在一个不会终止的执行路径。因此,没有任何随机协议能够始终同时保证我们想要的三个性质。(这种协议类似Las Vegas随机协议,例如QuickSort,总是能返回正确答案,但它是一种运行时间不可预测的随机算法)我们对这类随机协议所能抱有的最大希望是,在其能保证终止时的一致性与有效性的前提下,对终止性提供概率性的保证(例如,期望运行时间较短;在有限时间内大概率终止;且/或终止概率为1)。
- 期望运行时间较短,比如平均只要10s就能结束;
- 大概率在有限时间内结束,比如99%的情况下在100s内结束;
- 最终一定会结束,但有可能需要很长时间。
- 实际上,在异步模型中确实存在一些随机的BA协议提供这种概率性终止的保障。但现实中的区块链协议通常不依赖随机性来规避FLP定理,而是通过时间假设来实现共识,如半同步模型和Tendermint协议。若想进一步了解随机共识协议的历史,以及在异步模型中实际应用的随机区块链协议(如Helium的协议),可参考HoneyBadgerBFT协议论文及其引用的文献。
-
$f$ (拜占庭节点数量的最大值)越大,实现共识就变得越困难。因此,在$f$很大的情况下依然成立的协议是令人印象深刻的,例如Dolev-Strong协议。同样的,在$f$很小的情况下,不可能性结果依然成立的定理也是最打脑壳的。FLP定理在$f=1$的情况下也依然成立,从某种意义上来说,它是一种“最强的不可能性结果”,是最令人打脑壳的了。 -
最令人打脑壳的不是说$f$是一个拜占庭节点,即一个行为不受控的有恶意的节点。而是即便是一个没有恶意的突然宕机的故障节点的存在,也能令FLP定理稳稳的成立。这点充分说明了FLP不可能性结果的强度,是让人打脑壳打到痴撚线的那种。所以BA问题是异常困难的。
-
即便存在PKI假设,FLP定理依然成立。(PKI假设不能防止节点不宕机)
-
FLP定理在形式上区分了同步模型和异步模型中哪些问题是可解的。并且揭示了我们在直觉中所认为的,在异步模型中实现共识要更加困难。这种困难是本质上的,并不是因为协议的设计不够好。
-
在PKI假设下,Dolev-Strong协议表明,在同步模型下,无论$f$取值多大,BB问题都是可解的
-
一个不错的练习是,尝试证明,将Dolev-Strong协议或任意BB问题的解决方案作为子程序来解决同步模型中$f<\frac{n}{2}$情况下的BA问题
-
即使不依赖PKI假设,在同步模型中,只要$f<\frac{n}{3}$,BA问题依然可解(参考PSL83论文)
-
由于FLP定理在$n\ge2,f=1$的情况下仍然成立,这就表明,无论您是否有PKI假设,比起异步模型,共识协议在同步模型中具备更强的问题可解性,即具备更强的能够同时满足所有我们想要的性质的能力
-
模型 有 PKI 容错上限 共识问题可解性 同步模型 ⭕️ 有 任意 $f < n$ BB 与 BA 都可解(用 Dolev-Strong) 同步模型 ❌ 无 $f < n/3$ BA 可解(基于经典结果) 异步模型 无论是否有 PKI $f = 1$ 即失败BA 不可解(FLP定理)
-
-
FLP定理的意义在于提醒人们不要试图找寻一个不可能实现的解决方案,也不要完全放弃去解决问题,而是用有所取舍、折中的方式去解决问题。
在证明策略上,与3.2节对FLM不可能性结果的证明相同,采用反证法。
即,我们假设确实存在一个确定性协议$\pi$,它能在异步模型下,在$f=1$的情况下,同时满足终止性(termination)、一致性(agreement)和有效性(validity)。如果我们能通过这些假设中推出矛盾,那么就证明协议$\pi$不存在。
具体的,正因为$\pi$在终止时必须满足一致性和有效性,才不可避免地会出现一些执行路径,使得协议永远无法终止,从而与终止性矛盾。(对这句话感到疑惑不要紧,先放一边,看完证明再来回顾)
在证明之前,我们需要进行一些概念的构建以帮助证明顺利完成。
我们可以将协议的运行过程看作是在有向图中行走的过程。我们需要展示一种情形,协议$\pi$可以经历一个无限的事件序列,而无法终止。为此,我们需要先定义配置(Configurations)。配置是协议在某个时刻的快照,它提供了足够的信息,让协议能够从该时刻重启。
定义4-1:一个配置(configuration)$C$记录了每个节点的状态,包括节点的私有输入(private input)和到此刻为止节点所收到消息的序列,以及消息池$M$当前的状态,即已送出但未送达的消息。
上文中说道,我们可以把协议的运行看作是在一个巨大(甚至可能无限)的有向图(directed graph)中行走,图中的顶点表示各个配置$C$,边表示消息传递事件$C \xrightarrow{(r,m)} C'$。其中,$(r,m)$表示一条消息,$C \rightarrow C'$表示当前的配置$C$被事件$(r,m)$触发(即节点$r$收到消息$m$)而发生状态转移,事件发生后,状态转移为另一个配置$C'$(见Figure 1)。(不要忘记,敌手可以控制消息传递,即敌手可以选择状态转换的路径)
具体的说,每当消息$(r,m) \in M$被送达后,配置将产生三方面的变更:
-
$(r,m)$ 从消息池$M$中被移除; - 该消息被追加到节点$r$当前已接收消息序列的末尾;
- 节点$r$所发送的新消息被添加到消息池$M$中(无论节点$r$的行为是出于诚实地运行$\pi$协议还是拜占庭行为)。
如果我们能够构造出一组消息序列使得$\pi$协议永不终止,这就等价于我们在这个有向图中找出了一条无限路径,也就构造出了对终止性的反例,即构造出了矛盾,从而完成证明。
下面我们会把配置划分为三种类型。假设每个节点的私有输入都是0或1,即输入空间$V={0,1}$(不可能性结果的证明只需要构造最坏情况,因此输入空间越小,越容易控制分析;可能性结果证明则无需这个假设)。由于我们假设协议$\pi$满足一致性(agreement),所以一旦协议终止,诚实节点的输出只有两种可能:
- 所有诚实节点输出0
- 所有诚实节点输出1
定义4-2(0-配置,1-配置和模糊配置):
一个配置可以被定义为以下三类之一:
- 0-配置(0-configuration):如果无论拜占庭节点采取何种策略,消息被如何传递,最终使所有诚实节点都输出0,那么这个配置称为0-配置。
- 1-配置(1-configuration):如果无论拜占庭节点采取何种策略,消息被如何传递,最终使所有诚实节点都输出1,那么这个配置称为1-配置。
- 模糊配置(ambiguous configuration):如果一个配置既不是0-配置,也不是1-配置,那么称其为模糊配置,也叫双值配置(bivalent configuration)。
由于$\pi$协议满足终止性和一致性,我们也可以等价地定义模糊配置为:
存在一种拜占庭策略和消息传递顺序能够让敌手强制所有节点都输出0或输出1。即敌手能够控制所有诚实节点的最终输出。
对于一个0-配置或1-配置来说,最终结果是先验的——无论敌手如何作恶,结果不会改变。但如果是模糊配置,敌手可以控制输出。
上述定义是对一个固定的$\pi$协议而言的。例如,给定一个配置,该配置在某个协议中可能是模糊配置,而在另一个协议中可能不是。换句话说,一个配置是模糊的还是确定的(0或1),取决于该配置运行在什么协议之下。配置的模糊性是依赖$\pi$协议这个上下文的,模糊性不是一个可单独存在的先验属性。因此,脱离协议上下文,我们无法知道一个配置是否是模糊的,也就不能将FLP误解为:只要我们设计一个协议绕开模糊配置就能避开FLP。
再次澄清:上述定义是“在$\pi$协议已定义的前提下所定义的模糊配置”,我们要避免将某个配置$C$在某个固定的$\pi$协议下的模糊性误当作该配置在任意协议下都是模糊的。
这个证明的目标,是在图Figure 1中所示的有向图里面寻找一条无限路径。具体来说,就是寻找一条由模糊配置组成的无限序列(在我们假设的$\pi$协议下)。这样的构造会与$\pi$协议满足终止性的假设矛盾,从而得证。为了构造出这样的序列,我们需要使用两条引理(引理是构造证明时所使用的辅助性技术陈述,就像大型程序中的子程序一样)。引理1是归纳法的基础情形(base case),引理2是归纳步骤(inductive step)。
引理1是归纳的起点,它指出,存在某种节点私有输入的选择,使得对应的初始配置$C_0$是一个模糊配置,即节点有了私有输入后,协议$\pi$会进入一个无法决定输出0还是1的模糊状态。引理2说明了如何从一个旧的模糊配置$C_i$构造出下一个模糊配置$C_{i+1}$,即系统执行一步之后仍然会被卡在模糊状态,并持续陷入这种状态。我们先应用引理1,然后不断应用引理2,就能构造出这样一个无限的模糊配置序列:$C_0 \rightarrow C_1 \rightarrow C_2 \rightarrow C_3 \rightarrow ...$,这正是我们想要的。
这两条引理都不是显而易见的。不过引理1相对容易证明,因为它不需要用到异步模型下敌手的全部能力,所以我们可以先从引理1开始。
**引理1:**对于任意一个满足终止时具有一致性与有效性的确定性协议$\pi$(设$f=1,n\ge2$),总是存在一种节点私有输入的选取方式,使其对应的初始配置是模糊的。
该引理所表达的意思是,在任何满足一致性和有效性的确定性协议中,我们总是可以通过选择某种恰当的初始输入,让协议从一个“模糊状态”开始运行,也就是FLP归纳构造的base case。
一般情况下,配置的状态是极其复杂的(例如消息池中可能包含数亿条消息),但初始配置总共只有$2^n$种可能。为什么?
我们回顾配置(configurations)的定义,配置是每个节点的状态的快照,状态包含三个信息:
-
私有输入(private input)
-
节点到此刻为止收到的消息的序列
-
消息池$M$
由于在协议刚启动时,消息池$M={(r,\bot)^{n}_{r=1}}$是唯一且确定的,并且所有节点收到的消息序列都是空的。因此,配置仅剩的自由度就在于如何选取每个节点的私有输入。又由于我们假设了节点总数为$n$且私有输入空间是$V={0,1}$,因此所有节点的私有输入总共有$2^n$种可能,也就是配置总共有$2^n$种可能。实际上,我们只需要考虑这$2^n$个初始配置中的$n-1$个,就足以找到一个模糊配置。
引理1的证明:
不妨把所有节点的私有输入想象成一个$n$位的二进制字符串,其中第$i$位表示节点$i$的私有输入。
令字符串从全0开始,想象从左至右逐位将字符从0翻转为1,直到字符串变成全1为止。这个过程一共生成了$n+1$种私有输入组合,分别对应初始配置$X_0,X_1,X_2,...,X_n$。(在配置$X_i$中,前$i$个节点的私有输入是1,后$n-i$个节点的私有输入是0)
接下来我们使用假设:$\pi$协议满足有效性。
由于$\pi$协议满足有效性,因此当所有节点的私有输入均为0(尤其是所有诚实节点的输入为0),即$\pi$协议的初始配置为$X_0$,则无论拜占庭节点采取什么样的策略,也无论消息传递的顺序如何,$\pi$协议必然终止并且输出全0的结果。故,根据定义4-2,配置$X_0$为0-配置。
同理可得,初始配置$X_n$(即所有节点的输入全为1)为1-配置。
我们可以断言,在这些处于中间的配置,即$X_1, X_2, ..., X_{n-1}$中,必然存在一个模糊配置。
令$i\ge1$,当$i$足够小时,存在$i$使得配置$X_i$不是0-配置。这个值必然存在,我们至少能找到一种情况,即当$i=n$时,$X_i$是1-配置,满足条件。又由于$i$足够小,因此配置$X_{i-1}$必然是0-配置。
这里我们断言$X_i$必然是模糊配置,下面分情况讨论并使用反证法进行证明:
假设$X_i$不是模糊配置,那么$X_i$是承诺配置(commited configuration,即0-配置或1-配置)。
根据上述$i$的定义,$X_i$不是0-配置,对$X_i$分情况讨论:
Case 1. 若$X_i$是模糊配置,则断言成立;
Case 2. 若$X_i$是1-配置,尝试考察该配置:
设$i$节点为拜占庭节点,考虑其可能的两种行为策略:
(i) 由于$X_i$不是0-配置,故必然存在一种策略使得最终输出为全1
(ii) $i$节点将自己的私有输入伪装成0,并在其他方面完全诚实地执行$\pi$协议
如果$i$节点采用策略(i),那么最终输出为全1;
如果$i$节点采用策略(ii),由于诚实节点无法区分$X_{i-1}$和$X_i$,在$X_{i-1}$下的$\pi$协议之运行结果为全0输出,则$X_i$下的$\pi$协议之运行结果与$X_{i-1}$一致,也是全0输出。
综上所述,拜占庭节点$i$可以在$X_i$配置下,让协议的运行结果最终输出全0或全1,这与上述$X_i$不是模糊配置的假设矛盾,故$X_i$必然是模糊配置的断言成立,$X_i$正是我们在寻找的模糊配置。$\square$
注:上述证明中,或许存在困惑的部分有两处。
问:为什么设$i$时,允许$i=n$,但下面讨论$X_i$是否为1-配置时,最终证明又否认了$X_i$是1-配置? 答:要注意定义。1-配置是承诺配置,意味着协议最终的输出结果必然是1,是确定的。而在$X_i$的讨论中,拜占庭节点的确有可能让所有节点都输出1,但也存在输出0的可能。也就是说,在拜占庭节点的干扰下,$X_i$是一种模棱两可的配置,不是确定的配置,因此不符合1-配置的定义。
问:为什么$i$节点采用策略(ii),诚实节点就无法区分$X_{i-1}$和$X_i$?我们可以举个例子: 答:假设$X_{i-1}$的私有输入是$(0,0,0)$,$X_i$的私有输入是$(0,1,0)$。设$i=2$,即第二个节点是拜占庭节点,那么它在$X_i$中采取策略(ii),即隐藏自己原本的私有输入$1$,假装为$0$,则$X_i$变成了$(0,0,0)$。这就让诚实节点无法区分$X_{i-1}$和$X_i$了。

