【solidity初心者】Polygonにコントラクトをデプロイ(イーサリアムから移行)

前回はスマートコントラクト言語「Solidity」の基礎を学び、イーサリアム上に「ブログ投げ銭」機能をリリースしました。

ai-china.hatenablog.com

イーサリアム上では手数料(ガス代)が高すぎて、日常的に使うシステムを配置するのには向いていません。そこで、今回はイーサリアム互換のPolygonネットワーク上にコントラクトを反映し動作確認します。

Polygonとは

Polygonはイーサリアムのセカンドレイヤーソリューションの1つです。

イーサリアムは処理速度が遅く、NFTの流行などにより手数料が高騰しています。これら問題を解決するためにイーサリアムの技術をベースに開発されたのがPolygonネットワークです。イーサリアムと互換性があり「Solidity」言語のコントラクトをPolygon上でも可能です。

Polygon内で使われる独自トークンはMATIC。現在の仮想通貨の時価総額ランキングでは13位となっています。

Polygonの開発環境

Polygonにもイーサリアム同様テストネットワーク(Mumbai)が用意されています。まずはテストネットワークにコントラクトをリリースするために必要な事前準備を行います。

1.MetaMaskにMumbaiネットワークを追加

下記URLを参考に仮想通貨ウォレット「MetaMask」にMumbaiを追加

Add Polygon Network | Polygon Technology | Documentation

f:id:denim012:20220118153157p:plain

2.Mumbaiネットワークで使用するMATICを取得

Polygon Faucet

上記サイトで自分のウォレットアドレスを入力してSubmitすると0.5MATICを受け取れます。

f:id:denim012:20220118153500p:plain

最初は送金に失敗しましたが、時間をおいて再度試すとOKでした。

3.開発者用ドキュメント

▼公式の開発用ドキュメント

Application development on Polygon | Polygon Technology | Documentation

▼Mumbaiネットワークのウォレット

Polygon Web Wallet v2

Polygon Bridgeでイーサリアムのテストネットワーク(Goerli)に接続し、トークンの送金・引出が可能です。

Polygonにコントラクトをデプロイ

前回作成した「ソーシャル投げ銭」コントラクトをPolygonのテストネットワークにデプロイします。※Remix IDEを使用し、ソースコードも前回作成したsolファイルをそのまま利用

MetaMaskでMumbaiネットワークに接続し、remix上で「Injected Web3」を選択しデプロイします。

f:id:denim012:20220118151425p:plain

Polygonネットワークの手数料(ガス代)はMATICトークンで支払います。Mumbaiへのデプロイのガス代は0.00206MATIC(≒0.515円)でした。

※現在のメインネットの価格:1MATIC=250円で計算

イーサリアムのテストネットワークではデプロイ処理に日本円換算で1,000円を超えるガス代がかかっていたので、Polygonの方が圧倒的に安いことが分かります。

クライアントの実装

クライアント側javascriptは1か所だけ修正しました。

//ユーザのアドレスを取得(イーサリアム)
ethereum.request({ method: "eth_requestAccounts" })
.then((accounts) => {
	const userAccount = accounts[0];
//ユーザのアドレスを取得(Polygon)
web3.eth.getAccounts()
.then((accounts) => {
	const userAccount = accounts[0];

後は変更不要でした。

コントラクトのpayable関数を呼び出す箇所も変更せずそのまま利用可能です。(toWei関数の引数も"ether"のままで、MATICが送金されます)

const amt = document.querySelector("#amount").value;
contract.methods.tip().send({ from: userAccount, value: web3.utils.toWei(amt, "ether") })

▼amt=0.00035の場合 0.00035MATICを送金

f:id:denim012:20220118154140p:plain

送金処理自体はイーサリアムテストネットワークより遅く、平均で15秒くらいかかりました。

各処理の手数料(ガス代)

今回のコントラクト実行時の手数料(ガス代)は下記の通りです。

  • デプロイ:0.00206MATIC (=0.515円)
  • getSecretURI():0.000231MATIC (=0.058円)
  • tip():0.000109MATIC (=0.027円)
  • withdraw():0.00007611MATIC (=0.019円)

コントラクトに対するトランザクションの履歴は「polygonscan」で確認可能です。

f:id:denim012:20220118151722p:plain

まとめ

Polygonのテストネットワークにスマートコントラクトを作成してみました。イーサリアムと比べて圧倒的に手数料が安く、ちょっとした社内システム等はPolygonの方が向いていそうです。処理速度についてはイーサリアムテストネットワークと比べて遅くなっているケースもありました。(テストネットでの比較結果)

また、中国から接続しているせいかPolygonのテストネットワークはアクセスが不安定です。MetaMaskでログインや送金すると頻繁に失敗します。

f:id:denim012:20220125095601p:plain

最近、日本人のインフルエンサーがこのPolygon上でERC20トークンを作成・配布しDAO(分散型自律組織)を始めたようです。今後も同様の取り組みが広がっていくことが考えられます。