跳至内容
0%

什么是 shadow fork?

Alchemy team headshot

作者 Alchemy

发布于 2022年6月24日1 分钟阅读

什么是影子分叉(shadow fork)?

Shadow fork 与 devnet 类似,但不同的是它不维护自己的状态,而是复制另一个网络(devnet 或主网)的状态。

例如,Ethereum 主网的影子分叉仍然接受所有发往主网的交易。

这条分支可以切换到 Proof-of-Stake,但仍会保留主网的交易记录及其他状态/历史数据。

影子分叉上的合并(merge)成功后,它会转到 Proof-of-Stake 链,并忽略之后添加到主网上的任何 Proof-of-Work 区块。

影子分叉与普通分叉有什么区别?

影子分叉是有意用原链的现有状态数据创建的,用于测试网络升级;而普通分叉则发生在开发社区修改协议或受到黑客攻击时。分叉发生时,区块链会分裂,产生第二条(新的)区块链,它与第一条区块链历史相同,但路径不同。

核心开发者对区块链的升级导致分叉的一个例子是 London Hard Fork,它引入了 EIP-1559,用于优化 Ethereum 的交易费用结构。

Bitcoin 和 Ethereum 都基于区块链技术,运行在开源软件之上。之所以被称为“区块链”,是因为它们由一个个数据块组成,这些数据块可以一路追溯到网络上的第一笔交易。

由于是开源的,其社区负责维护和改进源代码。因此,分叉可能是为了让区块链更安全、添加新功能,或者是为了缓解黑客攻击的影响——2016 年 The DAO 事件之后就发生过这种情况。

2016 年,Ethereum 区块链分裂成了 Ethereum Classic(保留了反映被盗 360 万 ETH 的准确账本)和 Ethereum(通过分叉撤销了这次黑客攻击)。

软分叉(soft fork)与硬分叉(hard fork)有什么区别?

软分叉与硬分叉的区别在于:软分叉是修改现有区块链的代码,而硬分叉是将区块链分裂成两条不同的链。

软分叉

可以把软分叉看作是运行区块链的软件的一次更新。只要所有人都使用它,它就会成为网络的新规则集。

软分叉通常通过修改代码库和客户端软件,被用来为 Ethereum 添加新特性或新功能。这些改动与分叉之前生成的区块兼容,因为最终结果仍是单一一条区块链。

硬分叉

当代码改动大到新版本无法与旧区块兼容时,这就叫“硬分叉”。在这种情况下,区块链会分裂成两部分:

  1. 遵循旧规则的旧区块链
  2. 遵循新规则的新区块链

这会产生一种全新的加密货币,许多知名货币正是由此诞生。硬分叉从原始 Bitcoin 区块链中分离出了 Bitcoin Cash,Ethereum Classic(ETC)也是从 Ethereum(ETH)中分离出来的。

为什么影子分叉很重要?

影子分叉是 web3 开发者的重要工具,因为它让开发者能够针对主网生产环境的最新状况,验证他们对网络即将进行的升级所做的假设。

在为The Merge(将 Ethereum 的执行层从 Proof-of-Work 改为 Proof-of-Stake)做准备的过程中,影子分叉与公共测试网一起被用来测试。

影子分叉的重要性在于证明合并(Merge)能够顺利实现,不会给运行在网络上的现有应用带来不利的过渡影响。

带有这些影子分叉的测试网将作为测试场地,确保合并过渡顺利进行,并有助于让节点运营者和开发者建立信任。

影子分叉是如何运作的?

展示如何从现有 Goerli 链创建 shadow fork 的图片
An image showing how a shadow fork is created out of an existing Goerli chain. Source: AllCoreDevs Update #011 https://tim.mirror.xyz/PWFVaHY3Mrx7srarMmuBWya0J5kioR1l2xaH3p5APDk

在上图中,最上面一行 Goerli 区块显示的是规范(即原始)区块链上的一个节点,它并不知道影子分叉的存在。

中间一行 Goerli 区块代表的是影子分叉链上的一个节点,其配置不同,会告诉它在达到终端总难度(TTD,即用作触发客户端停止挖矿并转向 PoS 的总挖矿难度)时进行分裂。 最后一行展示的是专门为影子分叉创建的信标链(Beacon Chain)。当达到 TTD 时,规范链上的节点会继续照常出块,仿佛什么都没发生;而那些配置已改变的节点则会分裂出去,经历合并(Merge)。

然后,下一个验证者会为合并后的信标链生成第一个区块。

影子分叉是实现这一目标的最佳方式,因为它让开发者能够测试分叉与合并流程的运行效果,而不会影响公共测试网或主网。

通过反复进行这种影子分叉操作,开发者可以在不同情况下测试合并过渡。

有哪些知名的影子分叉?

有两个测试网因其影子分叉而广为人知:Goerli 经历过三次影子分叉,而主网经历过六次。 两次主网影子分叉之间的主要区别在于,所有客户端组合都成功完成了影子分叉转移并保持了同步。

这次影子分叉还为每个客户端使用了 develop/unstable 分支。这意味着开发者不再需要合并分支。在主网上,存款合约(deposit contract)被再次使用,只是采用了不同的 fork ID。

这意味着在影子分叉上,每一笔主网存款都必须被处理并标记为无效。这项计算量很大的操作在少数客户端上引发了一些边缘情况,但网络整体仍运行正常。

如何影子分叉 Ethereum

如果你有兴趣分叉 Ethereum,可以参考 Alchemy 的分步指南,学习如何使用免费的 Alchemy 账户、HardHat 和命令行界面(CLI)来分叉 Ethereum 主网。

影子分叉是关键的 Ethereum 开发者工具

影子分叉在 Ethereum 区块链的持续开发和扩容改进中扮演着重要角色。借助影子分叉,Ethereum 核心开发者、节点提供商和独立质押者可以为即将到来的全网范围变更做好准备,从而使 Ethereum 应用生态系统不受影响。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。