#dusk $DUSK
今天继续看 @Dusk 的 Boreas 更新,最让我在意的不是 Phoenix 退役,也不是又多了几个 fork rule。
而是一个更底层的问题:
协议升级以后,过去的一笔交易,为什么还能一直保持同一个含义?
这事听起来像废话。
但硬分叉之后,节点已经在跑新规则了,历史区块里却还躺着旧版本的 transaction、旧 verifier、旧 execution semantics。
如果今天的节点拿现在这套规则去重新解释以前的 bytes,历史 replay 就可能出问题。
所以 Boreas 这次把 transaction handling 的版本边界做得更明确。
Live ingress 走当前协议规则。
旧 envelope 可以在入口被识别、normalize。
进入 ledger 之前再变成 canonical transaction。
而历史区块,则继续按它当年的规则去 decode 和 replay。
我觉得这里真正重要的不是“格式统一”。
而是:
交易除了内容,还有它所属的协议时代。
Aegis 是 Aegis 的规则。
Boreas 是 Boreas 的规则。
硬分叉可以改变未来,但不能顺手把过去重新解释一遍。
这也是为什么我现在看链升级,不太只看“新增了什么”。
我更关心的是:
新版本上线以后,今天的节点还能不能准确理解几年前那条链到底发生过什么。
对一个要做 regulated market infrastructure 的网络来说,这种历史连续性其实很基础。
账可以升级。
账里的过去不能跟着升级。
今天继续看 @Dusk 的 Boreas 更新,最让我在意的不是 Phoenix 退役,也不是又多了几个 fork rule。
而是一个更底层的问题:
协议升级以后,过去的一笔交易,为什么还能一直保持同一个含义?
这事听起来像废话。
但硬分叉之后,节点已经在跑新规则了,历史区块里却还躺着旧版本的 transaction、旧 verifier、旧 execution semantics。
如果今天的节点拿现在这套规则去重新解释以前的 bytes,历史 replay 就可能出问题。
所以 Boreas 这次把 transaction handling 的版本边界做得更明确。
Live ingress 走当前协议规则。
旧 envelope 可以在入口被识别、normalize。
进入 ledger 之前再变成 canonical transaction。
而历史区块,则继续按它当年的规则去 decode 和 replay。
我觉得这里真正重要的不是“格式统一”。
而是:
交易除了内容,还有它所属的协议时代。
Aegis 是 Aegis 的规则。
Boreas 是 Boreas 的规则。
硬分叉可以改变未来,但不能顺手把过去重新解释一遍。
这也是为什么我现在看链升级,不太只看“新增了什么”。
我更关心的是:
新版本上线以后,今天的节点还能不能准确理解几年前那条链到底发生过什么。
对一个要做 regulated market infrastructure 的网络来说,这种历史连续性其实很基础。
账可以升级。
账里的过去不能跟着升级。
