2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PolygonでERC721をmapping

Last updated at Posted at 2022-02-03

はじめに

MaticネットワークへとEthereumネットワークではブリッジと呼ばれるスマートコントラクトを用いることで、
資産の移動を相互に行うことが可能となっています。

スクリーンショット 2022-04-19 11.48.12.png

ブリッジには、PlasmaブリッジとPoSブリッジの二種類があり、現状は、PoSブリッジが推奨されているようです。

Polygon | Ethereum's Internet of Blockchains
https://polygon.technology

現在PolygonではEthereumとMaticネットワークがつながっている状態で、
今後、さまざまなレイヤー2ネットワークがサポートされる計画となっています。

スクリーンショット 2022-02-03 17.30.05.png

勉強会の資料として、利用するために、faucetで、testtokenを取得するところから、Contractの記述、Verify、マッピングまですべての流れを記載しておくので、初心者の方でも一つずつ丁寧に行うことで、最後まで実行できると思いますので参考にしてみてください。

テスト環境

Polygonのテスト用に下記の環境のマッピングが用意されています。
Ethereum/Goerli <-> Polygon/Mumbai

手順

テストトークンなどの準備

1.metamaskでアカウントを作成

2.faucetからGoerliのEthereumを取得する

スクリーンショット 2022-02-03 11.17.34.png

3.Maticの環境でfaucetからMATICを取得する

スクリーンショット 2022-02-03 11.17.25.png

ERC721のコントラクトを準備

1.remixdをインストール

ローカルのファイルをブラウザのremixでソースコードを記述するために、remixdを立ち上げておきます。

//remixdをinstall (https://www.npmjs.com/package/@remix-project/remixd)
$ npm install -g @remix-project/remixd
//daemonを立ち上げ
$ remixd -s . --remix-ide https://remix.ethereum.org
//remixにアクセスする
https://remix.ethereum.org/

2. RemixのFILEEXPLORERSからlocalhostに接続する

スクリーンショット 2022-02-03 11.54.53.png

スクリーンショット 2022-02-03 11.55.00.png

基本的なERC721のコントラクトは下記のような形okです。
今回は画像付きのNFTを発行するためにdemo2.solのコントラクトを使っています。

demo1.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyCollectible is ERC721 {
    constructor() ERC721("MaticDemoToken", "MDT") {
    }
}
demo2.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/token/ERC721/ERC721.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.2/contracts/utils/Counters.sol";

contract MaticDemoToken is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    constructor () ERC721 ("MaticDemoToken", "MDT") {}
    function mint(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = _tokenIds.current();
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
                _tokenIds.increment();
        return newItemId;
    }
}

3. RemixのPLUGIN MANAGERでFLATTENERを探す

今回はmappingのためにverifyする必要がありますが、verify時に、importして利用するcontractなどもすべて合わせておく必要があります。そのために、FLATTENERというモジュールを使います。
このモジュールを利用することですべて1枚のsolに結合することが可能となります。

スクリーンショット 2022-02-03 15.12.15.png

4. FLATTENERでSaveを押下する

スクリーンショット 2022-02-03 15.12.50.png

5. test.solからtest_flat.solが作成される

スクリーンショット 2022-02-03 15.13.04.png

6. test_flat.solをcompile & deployする

[compile]
COMPILERを環境にあわせる
COMPILER CONFIGURATION -> Auto compileにチェック
COMPILER CONFIGURATION -> Enable optimization を 200に設定

スクリーンショット 2022-02-03 17.37.30.png

[deploy]
ENVIRONMENT => injected Web3 <-この設定によって、メタマスクのネットワークが選ばれます

スクリーンショット 2022-02-03 16.38.19.png

7.Deplyoed Contractsに実行可能な関数が表示される。-> mintする

スクリーンショット 2022-02-03 17.38.19.png

スクリーンショット 2022-02-03 17.24.06.png

8. etherscanからveryfyを行う

8-1.EtherScanのVerifyのリンクを押下

スクリーンショット 2022-02-03 17.04.59.png

8-2.

SingleFileを選択
コンパイラーのバージョンを選択
ライセンスを選択

スクリーンショット 2022-02-03 17.05.40.png

8-3.

OptimizationをYes
Enter the Solidity Contract Code below にtest_flat.solコードを貼り付け
他は空欄でOK (deploy時に引数がなければ必要がない。もし引数があれば入力が必要)

スクリーンショット 2022-02-03 17.06.27.png

Goerli>>
0xe496Eea28c3D0DC1055cB4659deaD6b2E8D1CB62

matic>>>
0x47277af202C16E6ff55b4356Eb939b27ADF0372c

Mappingをつくる

1. 必要な情報を入力する

スクリーンショット 2022-02-03 16.52.05.png

スクリーンショット 2022-02-03 16.51.29.png

Mainnetで実装するためにMATICを得る

mainnetで実装するためにはEthereumとMaticが必要になります。

スクリーンショット 2022-04-19 11.43.10.png

(注意)
このやり方だと、Ethereumのガス代が高騰しているので、6matic(日本円で、おおよそ1000円)送るのに
Swapに20ドル、ネットワークの移動に15ドル、合計35ドルほどかかりました。Maticを扱っている海外の取引所でアカウントを作った方が良いので、あくまで、手元にEthereumがあって、あえてmaticに変換したい人向けです。

1.取引所でETHを購入。事前にMetamaskに送金しておく

2.Metamaskでswapする

スクリーンショット 2022-04-15 10.38.14.png

3.maticをbridgeを通じて、polygonネットワークに送る

移動したい金額をいれる
スクリーンショット 2022-04-18 13.15.37.png

ステーキング用の受け口じゃないよという注意書き。今回は移動するだけなのでこれでok。
スクリーンショット 2022-04-18 13.15.45.png

approveにガス代がかかる。
スクリーンショット 2022-04-18 13.16.31.png

実行中
スクリーンショット 2022-04-18 13.17.09.png

さらにconfirmにもガス代がかかる
スクリーンショット 2022-04-18 13.18.01.png

完了
スクリーンショット 2022-04-18 16.07.02.png

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?