跳至内容
0%

什么是 shadow fork?

Alchemy team headshot

作者 Alchemy

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

什么是 shadow fork?

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

例如,Ethereum 主网的 shadow fork 仍然接受所有发往 mainnet 的交易。

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

shadow fork 上的合并成功后,它会转到 Proof-of-Stake 链,并忽略在 mainnet 上新增的任何 Proof-of-Work 区块。

shadow fork 与普通 fork 有何不同?

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

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

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

由于是开源的,社区负责维护和改进源代码。因此,fork 可能是为了让区块链更安全、增加新功能,或是为了缓解攻击带来的影响,比如 2016 年 The DAO 遭到攻击之后发生的情况。

2016 年,Ethereum 区块链分叉为 Ethereum Classic 和 Ethereum:前者保留了准确反映被盗 360 万 ETH 的账本,后者则通过 fork 撤销了这次攻击。

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

soft fork 和 hard fork 的区别在于:soft fork 修改的是现有区块链的代码,而 hard fork 会将区块链分裂成两条不同的链。

Soft fork

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

soft fork 被用来给 Ethereum 添加新特性或新功能,通常是通过修改代码库和客户端软件来实现。由于最终结果仍是同一条区块链,这些改动可以兼容 fork 之前生成的区块。

Hard fork

当代码改动幅度太大,导致新版本无法与旧区块兼容时,这就称为“hard fork”。在这种情况下,区块链会分裂成两部分:

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

这样会产生一种全新的加密货币,许多知名币种就是这样诞生的。Bitcoin Cash 就是通过 hard fork 从原始 Bitcoin 区块链分裂出来的,Ethereum Classic(ETC)也是从 Ethereum(ETH)分裂而来。

为什么 shadow fork 很重要?

对 web3 开发者来说,shadow fork 是重要的工具,因为它让开发者可以在 mainnet 生产环境的最新状况下,验证他们对网络即将进行的升级所做的假设是否成立。

Kiln 测试网是开发者为 The Merge(将 Ethereum 的执行层从 Proof-of-Work 改为 Proof-of-Stake)做准备的最后一个测试网。

shadow fork 的重要性在于,它能证明 Merge 可以顺利实现,而不会对运行在网络上的现有 应用 造成破坏性影响。

带有这些 shadow fork 的 测试网 将作为测试场地,确保合并过渡顺利进行,并有助于增强节点运营者和构建者的信心。

shadow fork 是如何工作的?

展示如何从现有的 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 区块展示的是规范链(即原始区块链)上的一个节点,它不知道 shadow fork 的存在。

中间一行 Goerli 区块代表的是 shadow-forked 链上的一个节点,它的配置不同,会在达到终端总难度(terminal total difficulty,TTD,即触发客户端停止挖矿并转向 PoS 的总挖矿难度)时发生分裂。 最后一行是专门为 shadow fork 创建的 Beacon Chain 的示意图。当达到 TTD 时,规范链上的节点会像什么都没发生一样继续生成区块,而配置已改变的节点则分离出去,经历 Merge 过程。

之后,下一个验证者会为 Merge 之后的 Beacon Chain 生成第一个区块。

Shadow forking 之所以是实现这一目标的最佳方式,是因为它能让开发者在不影响公共测试网或 mainnet 的情况下,测试 fork 与合并过程的运行效果。

通过反复执行这种 shadow fork 操作,开发者可以在不同情况下测试合并过渡过程。

有哪些知名的 shadow fork?

有两个测试网因其一些最知名的 shadow fork 而著称:Goerli 经历了三次 shadow fork,而 mainnet 经历了六次。 两次 mainnet shadow fork 之间最主要的区别在于:所有客户端组合都成功完成了 shadow fork 转换并保持了同步。

这次 shadow fork 还为每个客户端使用了 develop/unstable 分支,这意味着开发者不再需要合并分支。在 mainnet 上,同样使用了那个存款合约(deposit contract),但使用了不同的 fork ID。

这意味着在 shadow fork 上,每一笔 mainnet 存款都必须被处理并标记为无效。这种计算量很大的操作在少数客户端上引发了一些边界情况问题,但网络整体仍运行正常。

如何对 Ethereum 进行 shadow fork

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

shadow fork 是关键的 Ethereum 开发者工具

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

Background gradient

构建区块链应用

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