不进行硬分叉的话,要如何升级区块链?基于 Substrate 的链有一个绝招,可以轻而易举地做到无分叉升级。
传统上,如果你想升级区块链,例如在比特币或以太坊中添加一些新功能,则必须进行所谓的硬分叉。硬分叉就是指运行支持区块链的软件的实体将其软件更新为较新版本。
之所以称为分叉,是因为每个不升级的人都被遗弃在一个被淘汰的、过时的分叉上,并根据旧代码中的规则生成区块,与新的主链不兼容。一旦这些流浪者更新,他们的节点将重新连接到主链并同步,而分叉将消失。
硬分叉通常是一个非常困难的过程,主要是因为你永远不会真正知道谁在运行软件,而且组织全局代码更新非常困难。在具有合理匿名性的去中心化系统中尤其如此。你得靠运行节点的人员主动查找有关更新的信息,并且必须信任他们在应该更新时进行更新。
Kusama 和 Polkadot 等基于 Substrate 的链对这个问题有独特的解决方案。
基于 Substrate 的链可以升级,而且不用协调大量人员来进行更新某些软件的操作。它是这样做到这一点的:
在基于 Substrate 的链中,链本身上存储着一个叫作 WebAssembly Blob 或 WASM Blob 的东西。此 Blob 包含链构建新区块所需的所有逻辑。链本身的 runtime 包含在此 WASM Blob 中。
连接到该区块链的所有节点都不断了解此 WASM Blob 和它为节点提供的用于生成新区块的规则。节点的本机代码中也存在相同的逻辑:所有节点(即运行链的程序)都使用 Rust 构建,这些编程指令也告诉他们如何构建区块。这些指令与 WASM blob 中的指令相同。这么做有什么用呢?
这些节点中有一个开关告诉它们:“如果链上的 WASM 代码比你的本机代码中的新,请忽略你的本机代码,而选择 WASM 代码。如果它们相同,则运行本机代码,因为它更快。”
升级基于 Substrate 的区块链所需要做的,就是上传 WASM Blob 的新版本,然后与之连接的所有节点都将安装到位并遵守新规则。但是,如果随便一个人都能这样更改链的代码岂不是很危险?
链上治理可让任何基于 Substrate 的链的代币持有者提出对链本身的更改议案。该议案可以是像更改整个链的 runtime 这样的翻天覆地的改变,也可以是像更改一个链上的常数这样影响较小的事情,例如更改最大验证人数量。
议案会进入队列,在那里,其他代币持有者可以对其进行支持。如果得到足够的支持,该议案将作为公投被提出,然后可以对其进行投票。每个代币持有者都有使用代币投票的权利,如果他们对投票结果格外重视,他们也可以给投票附加信念值(conviction),也就是通过锁定代币一段时间以获得投票效力乘数。
如果公投通过,则其背后的逻辑将自动执行 —— 无需人工干预。因此,通过更新 WASM Blob 来更改链的 runtime 代码,就是将其提交到系统中并让人们投票支持,而区块链本身将负责其余工作。
原文:https://dotleap.com/upgrading-blockchains-without-hard-forking/
翻译:PolkaWorld