全部文章

使用区块浏览器在 Polygon zkEVM 上验证智能合约

·
2023年1月19日
·
阅读约 4 分钟
·
••• 次浏览
·
••• 次点赞

本文译自英文原文。 阅读英文原文

部署在 Polygon POS 链上的智能合约可以通过区块浏览器验证源代码,同样,部署在 Polygon zkEVM 测试网上的合约也可以通过 Polygon zkEVM 测试网浏览器进行验证。在这篇技术教程中,我们会一步步演示具体怎么做。

经过验证的智能合约提供了无需信任(trustlessness)的保障,因为这类合约公开的源代码与其字节码是一致的。经过验证的智能合约能够确保这一点。这让用户可以阅读合约、理解它是如何实现的,还可以直接通过浏览器与它交互。

在开始验证之前,我们需要明白,合约既可能是单个文件,也可能由多个文件组成。单文件 Solidity 合约指的是不继承其他合约、库或接口的 Solidity 合约。

在实际场景中,部署的合约很少是单个 Solidity 文件,所以在本教程中,我们将验证一个部署在 zkEVM 测试网上的 ERC20 代币。单个 Solidity 文件也可以用完全相同的方式进行验证。

现在,让我们开始验证 zkEVM 合约吧!

部署合约

第一步是部署我们的合约

要部署到测试网,你必须先把测试网导入到你的 MetaMask 钱包中。如果还没有导入,请按照这篇博客文章中介绍的步骤操作。这篇文章详细讲解了如何导入测试网,以及如何获取测试网 ETH。

部署时,打开 Remix IDE,新建一个文件,然后粘贴下面这段代码。

// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.9;
 
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
 
contract zkToken is ERC20, Ownable {
    constructor() ERC20("zkToken", "ZKT") {
        _mint(msg.sender, 10000 * 10 ** decimals());
 
    }
 
    function mint(address to, uint256 amount) public onlyOwner {
            _mint(to, amount);
    }
 
}

切换到“compile”标签页,在编译之前,你需要记下当前使用的编译器版本。这里我们使用的是 0.8.12 版本。

点击“compile”并且合约成功编译之后,就可以开始部署了。

现在切换到“Deploy & Run Transaction”标签页。把默认的“Remix VM London”切换为“Injected Web3 Provider”,这时 MetaMask 会弹出来。在此之前,请确保你已经切换到了 Polygon zkEVM 测试网。

连接你的钱包,点击橙色的“deploy”按钮,合约马上就会部署完成!

由于我们的合约导入了其他合约,所以不能直接粘贴源代码来验证,我们需要先把代码扁平化(flatten)。

使用 Remix 中的 Flattener 插件扁平化合约

扁平化智能合约,就是把所有 Solidity 代码合并到一个文件中,而不是分散在多个源文件里。也就是说,原本通过 import 引入的代码,现在会直接嵌入到同一个文件中。

要扁平化我们的智能合约,需要执行以下步骤:

第 1 步 - 在 Remix 中找到“plugin manager”,它就在设置标签页的正上方。

第 2 步 - 搜索“Flattener”插件并激活它

第 3 步 - 现在切换到 flattener 标签页,点击“Flatten Contracts/zkToken”。

第 4 步 - 点击保存按钮,保存扁平化后的合约

在浏览器上查看合约

合约已经部署好了,现在我们可以在区块浏览器上查看它。

首先,我们把合约地址粘贴到搜索栏中,然后就会看到下面这个界面。

切换到“code”标签页,找到“verify and publish”按钮。

点击“verify and publish”按钮之后,会出现三个选项,我们选择第一个选项“verify via flattened source code”,然后点击“Next”

接下来,填写出现的表单。

其余选项保持默认即可。

瞧!我们现在看到了表示合约已经验证成功的对勾标记!


总结

我们已经成功地在 Polygon zkEVM 测试网上验证了 ERC20 合约,现在任何人都可以与它交互了。前面我提到过,单个 Solidity 文件也可以按照同样的步骤进行验证,只是不需要扁平化代码。

我相信很快,像 Sourcify 这样利用合约元数据提供完整验证的验证工具就会支持 Polygon zkEVM 测试网,到时候我会再写一篇文章来介绍!

•••
分享本文:

获取最新动态

将最新文章直接发送到你的收件箱。