夏天终于快要结束气温也慢慢降了下来,上周开车带家人出去玩,走在高速上前方突发事故导航临时给我指了条辅路,但后车没跟着改,还按原路线开。两条路线并行了将近十分钟,后来事故清了,系统才把大伙儿重新引导回主路——这段时间里,谁也不知道哪条才是"最终该走的路"。
Dusk的共识机制里也有类似的"分叉"场景,叫fallback(回退)。因为网络异步,消息可能延迟或丢失,同一轮里偶尔会有不止一个候选区块同时达成共识,这就是分叉。处理规则很直接:哪个区块是在更低的迭代轮次(iteration)里达成的,就认哪个——高轮次的区块会被低轮次的顶替,链会回退到分叉之前那个块,然后接上更早达成共识的那条。原来那条被顶替的链,它后面接的所有区块也一并作废。
这里有个细节容易被忽略:第0轮(iteration 0)达成共识的区块是唯一不会被"顶替"的,因为没有比它更低的轮次存在。但就算是它,如果自己的"父块"后来被回退了,它照样得跟着回退——不是绝对安全,是相对更稳。
这套机制解决的是"网络消息延迟导致的临时分叉怎么收场",但代价是链上短暂会存在不确定性——刚出的块,尤其轮次高的,理论上都有被顶替的可能,得等后续区块把它"焊"上去才能真正放心。
$DUSK
#dusk @Dusk
Dusk的共识机制里也有类似的"分叉"场景,叫fallback(回退)。因为网络异步,消息可能延迟或丢失,同一轮里偶尔会有不止一个候选区块同时达成共识,这就是分叉。处理规则很直接:哪个区块是在更低的迭代轮次(iteration)里达成的,就认哪个——高轮次的区块会被低轮次的顶替,链会回退到分叉之前那个块,然后接上更早达成共识的那条。原来那条被顶替的链,它后面接的所有区块也一并作废。
这里有个细节容易被忽略:第0轮(iteration 0)达成共识的区块是唯一不会被"顶替"的,因为没有比它更低的轮次存在。但就算是它,如果自己的"父块"后来被回退了,它照样得跟着回退——不是绝对安全,是相对更稳。
这套机制解决的是"网络消息延迟导致的临时分叉怎么收场",但代价是链上短暂会存在不确定性——刚出的块,尤其轮次高的,理论上都有被顶替的可能,得等后续区块把它"焊"上去才能真正放心。
$DUSK
#dusk @Dusk
