3

通过基本上遵循Substrate Dev Frontier Workshop教程(根据 Frontier Evm 文档,它使用 SputnikVM 作为底层 EVM 引擎),我能够成功地构建我自己的与以太坊兼容的 Substrate 。

我知道以太坊在每次分叉后的行为或多或少都不同,例如,在一些分叉之后,各种 EVM OPCODE 的 Gas 成本会降低或增加。

话虽如此,这个基于 Sputnik 的客户端到底是哪种以太坊?该客户是类似于柏林伊斯坦布尔还是类似于HomesteadByzantium之类的老客户?我应该使用最新的 solc 编译器,还是应该使用像or0.8.6+commit.11564f7e这样的旧版本?0.6.0+commit.26b700770.4.0+commit.acd334c9

我想知道,因为我需要准确记录每个合约部署或方法调用的 gas 成本,或者防止不兼容。

4

1 回答 1

0

Sputnik evm 实现包含不同风格的 EvmConfig 供您选择。

如果您查看源代码,您会发现其中四个:

impl Config {
    /// Frontier hard fork configuration.
    pub const fn frontier() -> Config { ... }

    /// Istanbul hard fork configuration.
    pub const fn istanbul() -> Config { ... }

    /// Berlin hard fork configuration.
    pub const fn berlin() -> Config { ... }

    /// london hard fork configuration.
    pub const fn london() -> Config { ... }
}

根据frontier的pallet-evm文档

气体配置是可配置的。现在,提供了预定义的伦敦硬分叉配置选项。

因此,目前他们正在使用 london hard fork 配置,此 commit证实了这一点,这表明他们将默认配置从 istanbul 切换到 london:

...
        /// EVM config used in the module.
        fn config() -> &'static EvmConfig {
-           &ISTANBUL_CONFIG
+           &LONDON_CONFIG
        }
    }

@@ -571,7 +571,7 @@ impl GasWeightMapping for () {
    }
}

-static ISTANBUL_CONFIG: EvmConfig = EvmConfig::istanbul();
+static LONDON_CONFIG: EvmConfig = EvmConfig::london();
...

如果您想了解每个硬分叉的详细参数,请务必查看此处

于 2022-01-06T18:09:27.470 回答