大手NFTマーケットプレイスOpenSeaでも採用されている次世代サイドチェーンpolygonの技術調査
スマートコントラクトを活用した分散型アプリケーション(DApps)において、イーサリアムは基盤インフラとしてデファクトスタンダード的な立ち位置にいます。最初の大ヒットCryptoKittiesを筆頭に、イーサリアムは数々のアプリケーションにて利用されてきました。
しかし、イーサリアムは取引の処理能力に限界があることや、ユーザーがネットワーク利用料として支払うガス代が高騰するなど、ユーザビリティにおいて大きな課題があります。
このイーサリアムの課題を解決する新興ブロックチェーンについては、過去の記事 「イーサリアムの課題を解決する新興ブロックチェーン技術 (Polygon, Flow, WAX, Ronin, Palette など)」にて取り上げましたが、本記事では、NFTマーケットプレイスの大手OpenSeaでも採用されている polygonについて、技術的な簡単な説明と、実際にスマートコントラクトをデプロイして、クライアントアプリからアクセスしてみた使用感について書いていきたいと思います。
Polygonとは
Polygonは、イーサリアムと互換性のあるブロックチェーンや、そのようなブロックチェーンを簡単に構築し、イーサリアムやその他のブロックチェーンネットワークと相互運用するためのプロトコルとフレームワークを提供しようというプロジェクトです。元々、polygonの前身は Matic と呼ばれ、インド中西部に位置する都市ムンバイを拠点としています。
Polygon自体は、Layer2のソリューションであり、イーサリアム自体を置き換えるものではなく、イーサリアムのサイドチェーンとして動作しています。ホームページには、イーサリアム互換ブロックチェーンのインターネットを目指すという壮大なヴィジョンを掲げていますが、分かりやすい解釈としては、イーサリアムのサイドチェーンで良いかと思います(独自のセキュリティ機構や相互運用性などを提供しています)。
イーサリアムの課題を解決するアプローチとしては、いくつか既に取り組みがありますが、既存のプロジェクトとの比較表は以下の通りです。
polygonを利用したユーザー体験
ユーザーが polygon上のスマートコントラクトと通信をするためには、従来のDApps同様 metamask を利用することができます。イーサリアムとの互換性を重視しているpolygonでは、この辺の移行ハードルは低くなっています。
ただし、polygonの世界でスマートコントラクトを実行するには、polygonのネットワーク内でMATICと呼ばれる、polygonにおけるネイティブ通貨を利用する必要があります。つまり、スマートコントラクトのガス代はMATIC建てで行われます。また、polygonの世界でEtherで支払いを行うには、イーサリアムのメインネット上のEtherを、polygon上のEtherに変換しておく必要があります。
polygon walletにて、イーサリアムのメインネット上の資産と、polygon上の資産を行き来させることができます。どのネットワークにどの資産があるのか、を把握しておかなければならない点は、ユーザーにやや負担かもしれません。
DApps(on Ethereum)のpolygon移行
これまでに検証用として、イーサリアム上のNFT構築のアプリケーションを作っていたので、このアプリケーションをpolygon上にデプロイする検証をしてみたいと思います。結論としては、イーサリアム上のDAppsではあれば、非常に楽にpolygonにデプロイすることが可能なことがわかりました。
スマートコントラクトのデプロイ
DAppsの開発では、Solidityを用いてスマートコントラクトを記述し、Truffleなどの開発ツールによってデプロイすることが多いと思います。今回も Truffle を利用してスマートコントラクトをデプロイしてみました。
truffleを使ってデプロイする場合、truffle-config.js
のネットワークの設定に polygon networkを追記します。mnemonicには、デプロイするアカウントのシークレットリカバリーフレーズを置き換えてください。また、RPCのURLは、polygonが提供する技術ドキュメントのURLだとデプロイに失敗したため、このURLを利用しています。今回は、polygonのtestnetである、mumbaiというネットワークにデプロイします。
networks: {
...
matic: {
provider: () => new HDWalletProvider(mnemonic, `https://matic-mumbai.chainstacklabs.com/`),
network_id: 80001,
confirmations: 2,
timeoutBlocks: 2000,
skipDryRun: true
}
},
上記の設定をした上で、以下のコマンドでデプロイできます。イーサリアムのブロックチェーンにデプロイするのと作業的にはほとんど変わりません。ただ、一つだけ注意点は、デプロイするアカウントのウォレットに、該当するネットワークのMATICトークンを事前に入れておく必要があります(コントラクトのデプロイ時にガス代としてMATICが差し引かれます)
$ truffle migrate --network matic
フロントエンドの改修はほとんど必要がありません。従来のDAppsのように、metamaskをproviderとして web3オブジェクトを作るようにしておけばOKです。ただし、DAppsを利用する際に、polygonのネットワークに接続するようにしておく必要があります。もしかしたら、Polygonのmainnetだと、イーサリアムのメインネットのままで良かったりするかもしれません。が、mumbaiで検証する場合は、当然 mumbai ネットワークに切り替えておく必要があります。
ユーザーの使用感
検証用のアプリケーションでは、NFTを表現するスマートコントラクトと、売買用のスマートコントラクトがあります。これらをpolygonにデプロイして、クライアントアプリケーションを立ち上げて動作を確認しました。
結果、polygon移行に必要な作業はほとんど発生しませんでした。最初のスマートコントラクトのデプロイだけです。
以下が、NFTのスマートコントラクトとやり取りが発生するためにガス代を支払わなければならないときの、metamaskのポップアップですが、ガス代としてMATIC建てで請求されているのが確認できます。非常にシームレスにpolygonに移行できているのがわかります。
ちなみに、このトランザクションはNFTの扱いの権限を第三者に委託する手続きなのですが、ガス代が 0.00195 MATIC 請求されています。1 MATICは、2USD程度なので 非常に安価であることがわかります。
まとめ
イーサリアムの課題を解決する次世代新興ブロックチェーンとして、polygonについて簡単な説明と、実際のDAppsの移行手順を通じて、その使用感を簡単にお伝えしました。
polygonによって、イーサリアムのスケーラビリティ問題とガス代問題が解決されるため、非常に注目したい技術だと思います。今後、どれぐらいpolygonがイーサリアムのDAppsに普及するのか注視していきたいと思います。