はじめに
MaticネットワークへとEthereumネットワークではブリッジと呼ばれるスマートコントラクトを用いることで、
資産の移動を相互に行うことが可能となっています。
ブリッジには、PlasmaブリッジとPoSブリッジの二種類があり、現状は、PoSブリッジが推奨されているようです。
Polygon | Ethereum's Internet of Blockchains
https://polygon.technology
現在PolygonではEthereumとMaticネットワークがつながっている状態で、
今後、さまざまなレイヤー2ネットワークがサポートされる計画となっています。
勉強会の資料として、利用するために、faucetで、testtokenを取得するところから、Contractの記述、Verify、マッピングまですべての流れを記載しておくので、初心者の方でも一つずつ丁寧に行うことで、最後まで実行できると思いますので参考にしてみてください。
テスト環境
Polygonのテスト用に下記の環境のマッピングが用意されています。
Ethereum/Goerli <-> Polygon/Mumbai
手順
テストトークンなどの準備
1.metamaskでアカウントを作成
2.faucetからGoerliのEthereumを取得する
3.Maticの環境でfaucetからMATICを取得する
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に接続する
基本的なERC721のコントラクトは下記のような形okです。
今回は画像付きのNFTを発行するためにdemo2.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") {
}
}
// 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に結合することが可能となります。
4. FLATTENERでSaveを押下する
5. test.solからtest_flat.solが作成される
6. test_flat.solをcompile & deployする
[compile]
COMPILERを環境にあわせる
COMPILER CONFIGURATION -> Auto compileにチェック
COMPILER CONFIGURATION -> Enable optimization を 200に設定
[deploy]
ENVIRONMENT => injected Web3 <-この設定によって、メタマスクのネットワークが選ばれます
7.Deplyoed Contractsに実行可能な関数が表示される。-> mintする
8. etherscanからveryfyを行う
8-1.EtherScanのVerifyのリンクを押下
8-2.
SingleFileを選択
コンパイラーのバージョンを選択
ライセンスを選択
8-3.
OptimizationをYes
Enter the Solidity Contract Code below にtest_flat.solコードを貼り付け
他は空欄でOK (deploy時に引数がなければ必要がない。もし引数があれば入力が必要)
Goerli>>
0xe496Eea28c3D0DC1055cB4659deaD6b2E8D1CB62
matic>>>
0x47277af202C16E6ff55b4356Eb939b27ADF0372c
Mappingをつくる
1. 必要な情報を入力する
Mainnetで実装するためにMATICを得る
mainnetで実装するためにはEthereumとMaticが必要になります。
(注意)
このやり方だと、Ethereumのガス代が高騰しているので、6matic(日本円で、おおよそ1000円)送るのに
Swapに20ドル、ネットワークの移動に15ドル、合計35ドルほどかかりました。Maticを扱っている海外の取引所でアカウントを作った方が良いので、あくまで、手元にEthereumがあって、あえてmaticに変換したい人向けです。
1.取引所でETHを購入。事前にMetamaskに送金しておく
2.Metamaskでswapする
3.maticをbridgeを通じて、polygonネットワークに送る
ステーキング用の受け口じゃないよという注意書き。今回は移動するだけなのでこれでok。
参考