# エクスプローラーを使って Polygon zkEVM 上のスマートコントラクトを検証する

> Polygon POS チェーンにデプロイされたスマートコントラクトのソースコードはエクスプローラーを使って検証できますが、同じように、Polygon zkEVM テストネットにデプロイされたコントラクトも Polygon zkEVM テストネットのエクスプローラーを使って検証できます...

著者 Shodipo Ayomide、2023年1月19日 公開。Web 版：https://blog.shodipoayomide.com/ja/verifying-smart-contracts-on-the-polygon-zkevm-using-the-explorer

![](https://blog.shodipoayomide.com/banners/Verifying-Smart-Contracts-on-the-Polygon-zkEVM-Using-the-Explorer.png)

Polygon POS チェーンにデプロイされたスマートコントラクトのソースコードはエクスプローラーを使って検証できますが、同じように、Polygon zkEVM テストネットにデプロイされたコントラクトも Polygon zkEVM テストネットのエクスプローラーを使って検証できます。この技術チュートリアルでは、その方法を順を追って見ていきます。

検証済みのスマートコントラクトは、公開されたソースコードがバイトコードと一致しているコントラクトなので、トラストレスであることを担保してくれます。検証済みのスマートコントラクトはこれを保証するのです。これによりユーザーは、コントラクトを読んでどのように実装されているかを理解できるだけでなく、エクスプローラーから直接コントラクトとやり取りすることもできます。

検証を始める前に、コントラクトには単一ファイルのものと複数ファイルにまたがるものがあることを理解しておく必要があります。単一の Solidity ファイルとは、他のコントラクト、ライブラリ、インターフェースを継承しない Solidity コントラクトのことです。

実際には、デプロイされるコントラクトが単一の Solidity ファイルであることはめったにありません。そこでこのチュートリアルでは、zkEVM テストネットにデプロイされた ERC20 トークンを検証していきます。単一の Solidity ファイルも、まったく同じ方法で検証できます。

それでは、zkEVM コントラクトの検証に取りかかりましょう！

## コントラクトをデプロイする

最初のステップは、コントラクトをデプロイすることです

テストネットにデプロイするには、あらかじめテストネットを metamask ウォレットにインポートしておく必要があります。まだの場合は、こちらの[ブログ記事](https://polygon.technology/blog/your-three-step-guide-to-using-polygon-zkevm-yes-its-that-easy)で説明している手順に従ってください。このブログ記事では、テストネットのインポート方法とテストネット ETH の入手方法を詳しく解説しています。

デプロイするには、[Remix IDE](https://remix.ethereum.org/) にアクセスして新しいファイルを作成し、次のコードを貼り付けます。

```rust
// 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 を使います。

![](https://i.ibb.co/x1Bp8Dp/Screenshot-90-LI.jpg)

「compile」を押してコントラクトのコンパイルが成功したら、いよいよデプロイです。

次に「Deploy & Run Transaction」タブに移動します。デフォルトの「Remix VM London」から「Injected Web3 Provider」に切り替えると、metamask がポップアップします。その前に、polygon zkEVM テストネットに切り替えてあることを確認してください。

![](https://i.ibb.co/5xn2pmS/Screenshot-92.png)

ウォレットを接続してオレンジ色の「deploy」ボタンを押せば、コントラクトはすぐにデプロイされます！

このコントラクトは他のコントラクトをインポートしているので、ソースコードをそのまま貼り付けて検証することはできません。コードをフラット化する必要があります。

## Remix の Flattener プラグインを使ってコントラクトをフラット化する

スマートコントラクトをフラット化すると、複数のソースファイルに分かれていた Solidity コードがすべて 1 つのファイルにまとめられます。つまり、import を使う代わりに、インポートされていたコードが同じファイルの中に埋め込まれるということです。

スマートコントラクトをフラット化するには、次の手順を実行します。

**ステップ 1** - Remix で、設定タブのすぐ上にある「plugin manager」に移動します。

![](https://i.ibb.co/tpH6QVn/Screenshot-97-LI.jpg)

**ステップ 2** - 「Flattener」プラグインを検索して有効化します

![](https://i.ibb.co/0JKL8Lx/Screenshot-98-LI.jpg)

**ステップ 3** - 次に flattener タブに移動し、「Flatten Contracts/zkToken」をクリックします。

![](https://i.ibb.co/MZH7FzL/Screenshot-99.png)

**ステップ 4** - 保存ボタンをクリックして、フラット化したコントラクトを保存します

## エクスプローラーでコントラクトを確認する

コントラクトのデプロイが済んだので、[エクスプローラー](https://explorer.public.zkevm-test.net/)で確認してみましょう。

まずは検索バーにコントラクトアドレスを貼り付けます。すると、次のような画面が表示されます。

![](https://i.ibb.co/HNRNbMd/Screenshot-94.png)

「code」タブに移動して、「verify and publish」ボタンを探します。

![](https://i.ibb.co/NSJwHXm/Screenshot-95-LI.jpg)

「verify and publish」ボタンをクリックすると 3 つのオプションが表示されます。ここでは 1 つ目のオプションである「verify via flattened source code」を選び、「Next」を押します

![](https://i.ibb.co/gSfzjGN/Screenshot-96-LI.jpg)

次に、表示されたフォームに入力していきます。

- contract name：「zkToken」
- compiler：v0.8.12（今回使ったコンパイラのバージョンです）
- optimization：no（コントラクトは最適化していません）
- 最後に、フラット化したソースコードをコピーして「Enter the Solidity Contract Code」に貼り付け、「verify & Publish」ボタンを押します。

残りの項目はそのままにしておきます。

![](https://i.ibb.co/1MgLVzz/Screenshot-100.png)

ジャジャーン！コントラクトが検証済みであることを示すチェックマークが付きました！

![](https://i.ibb.co/2Kddxnr/Screenshot-101.png)

---

## まとめ

polygon zkEVM テストネット上で ERC20 コントラクトの検証に成功したので、これで誰でもこのコントラクトとやり取りできるようになりました。先ほど、単一の Solidity ファイルも同じ手順で検証できると書きましたが、その場合はコードをフラット化する必要はありません。

近いうちに、コントラクトのメタデータを使った完全な検証を提供する Sourcify のような検証ツールも polygon zkEVM テストネットをサポートするようになると思っています。そうなったら、そのことについても書くつもりです！
