Polygon.

帖子

分享您的知识。

loth.broke.
Jan 27, 2025
专家问答

自定义多边形 CDK 链是否完全兼容 EVM?

我正在使用自定义多边形 CDK 链,需要知道它们是否完全兼容 EVM. 具体而言,是否有不支持的操作码,与以太坊链相比,block.timestamp和block.number等全局变量的输出有什么区别吗?任何有关 EVM 兼容性的文档链接将不胜感激.

  • Polygon zkEVM
0
2
分享
评论
.

答案

2
Gojo.
Jan 28 2025, 06:13

是的,CDK 链完全等效于 EVM. 你可以在此处链接的文档中找到支持的操作码:Etrog 升级文档CDK 文档. 诸如 block.timestamp 和 block.number 之类的全局变量的输出没有区别,因此,它们是等效的.

0
评论
.
0x4a19...e1b5.
Jan 29 2025, 14:38

自定义Polygon CDK 链的设计宗旨是与 EVM 兼容,使开发人员能够部署基于以太坊的智能合约,并使用诸如MetaMask、Hardhat和Foundry等熟悉的工具与之进行交互. 但是,尽管它们旨在提供完整的 EVM 兼容性,但由于自定义配置、执行环境和基础设施选择,可能会出现一些差异. 本指南探讨了使用自定义 Polygon CDK 链时的操作码支持、全局变量行为和潜在的兼容性差异.

PolygonCDK 允许开发人员使用模块化组件构建自定义第 2 层 (L2) 链. 这些链继承了以太坊的许多核心功能,但由于它们是主权汇总或侧链,它们可能会引入执行逻辑上的细微差异.

在以下情况下,区块链被视为完全兼容 EVM: -它支持所有以太坊操作码无需修改-等等等等等... -它处理交易的方式与以太坊相同,包括气体计算和状态变化.
-部署在以太坊上的智能合约可以在自定义链上未经修改运行.

Polygon基于 CDK 的链旨在满足这些标准,但某些配置可能会带来偏差.

##Q1:是否支持所有以太坊操作码?

Polygon CDK 链通常支持所有 EVM 操作码,这意味着您无需修改即可执行 Solidity 和 Vyper 智能合约. 但是,实际执行行为取决于所选的执行层(例如 Polygon zkEVM、Optimistic Rollups 或自定义的执行环境).

例如: -由于零知识证明限制基于 ZKEVM 的 CDK 链可��会以不同的方式处理某些操作码.
-乐观汇总处理链下交易并提交批量证明,这可能会带来细微的执行差异.

要验证操作码兼容性,您可以查看以太坊黄皮书EVM 操作码)对照 Polygon CDK 链的实现.

如果您怀疑操作码可能不受支持或行为有所不同,则可以使用简单的 Solidity 合约对其进行测试.

示例:检查对CREATE2和的支持 SELFDESTRUCT

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract OpcodeTest {
    event ContractCreated(address newContract);
    
    function testCreate2(bytes32 salt, bytes memory bytecode) public {
        address newContract;
        assembly {
            newContract := create2(0, add(bytecode, 0x20), mload(bytecode), salt)
        }
        emit ContractCreated(newContract);
    }

    function testSelfDestruct(address payable recipient) public {
        selfdestruct(recipient);
    }
}

以太坊和Polygon CDK链上部署此合约可以帮助确定这些操作码的行为是否符合预期.


##Q2. 全局变量(block.timestamp、block.number 等)有什么区别

###block.timestamp block.timestamp通常与以太坊上的行为方式相同,反映了最新区块的时间. 但是,一些 Polygon CDK 链可能会: -使用更快或更慢的区块时间,影响时间戳精度.
-由于基于汇总的 CDK 链中的批处理调整时间戳.

例如,如果 L2 链在将交易提交到以太坊之前批处理交易,则时间戳可能反映批处理时间而不是原始交易提交时间.

####测试 block.timestamp 行为

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TimestampTest {
    event TimestampLogged(uint256 blockTimestamp);

    function logTimestamp() public {
        emit TimestampLogged(block.timestamp);
    }
}

部署该合约并比较以太坊和多边形CDK链上的结果可能会发现差异.


###区块编号 区块号代表区块链的高度,通常按预期增量. 但是: -在基于汇总的CDK链上,block.number可能会在L2环境中增加并且不同于L1以太坊的区块高度.
-在某些情况下,批量提交到以太坊可能会带来差距,这意味着L2交易的记录区块号可能与预期的不同.

####测试区块.number 行为

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract BlockNumberTest {
    event BlockNumberLogged(uint256 blockNumber);

    function logBlockNumber() public {
        emit BlockNumberLogged(block.number);
    }
}

以太坊和Polygon CDK链上运行此合约可以凸显任何不一致之处.


##Q3. 多边形 CDK 链和以太坊之间的主要区别是什么?

| 专题 | 以太坊 | Polygon CDK(L2,侧链)| | --------------------------------| -----------------------------| |EVM 操作码支持| 完整 | 几乎已满(取决于 Rollup/zkEVM)| |汽油费| 更高 | 更低,可能因连锁店而异 | |block.timestamp| 确切的区块时间 | 可能反映批处理时间 | |block.number| 顺序 | 可能因 L2 区块产量而异 | |终结| 立即 | 取决于链架构 |

所以...长话短说:

自定义 Polygon CDK 链在很大程度上与 EVM 兼容,这意味着大多数基于以太坊的智能合约应该无需修改即可运行. 但是,根据该连锁店是基于ZKEVM、Optimistic Rollup还是侧链,存在细微的差异.

要记住的要点: -主要支持操作码,但零知识汇总的处理方式可能会有所不同.
-block.timestamp 和 block.number 的行为可能略有不同,尤其是在基于汇总的 CDK 链上**.
-汽油费和终局性不同,具体取决于连锁店的基础设施.

要进行全面的兼容性测试,部署简单合约来比较以太坊和 Polygon CDK 链之间的执行结果. 如果您需要更具体的指导,Polygon 的官方文档和社区论坛是获取更新的最佳场所.

0
评论
.

你知道答案吗?

请登录并分享。

Polygon is a decentralised Ethereum scaling platform that enables developers to build scalable user-friendly dApps with low transaction fees without ever sacrificing on security.

62帖子141答案
我们使用 cookie 确保您在我们的网站上获得最佳体验。
更多信息