OpenSeaがガス代無料でNFTのMintを可能にしている仕組みが判明!!(プログラミングは謎解きだ)
シンギュラリティ・ソサエティ代表の中島が、今猛烈にハマっている技術がこれだ!そしてこれがWEB3.0の時代に必須な技術になると確信しているようです。そんな中「プログラムの謎解き」が出来たので解説。
OpenSea上にPolygonで作ったNFT collectionをトークンゲートにしたDappを作るのにとても苦労した。その過程で、OpenSeaがGAS代無料でNFTのMintを可能にしている仕組みが判明した!
トークンゲートを作るに当たって、通常のNFT(ERC-721)であれば、balanceOf(address _owner)を呼べば、接続されたウォレットに、そのコレクションのNFTがいくつ入っているかがすぐに分かる。
しかし、OpenSeaでPolygonで作ったNFTは、ERC-721 ではなくERC-1155なので、その手が使えない。あるのは、balanceOf(address owner, uint256 _id) と function balanceOfBatch( address[] _owners, uint256[] _ids) のみ。どちらも id が必要。
Polyscan で調べてみると、トランザクション履歴に私の見覚えがないものが沢山ならんでいる。なんじゃこれ!と思って、他の人がリスティングしている Polygon NFT を調べると、コントラクトアドレスが同じ。
つまり、OpenSeaは、Polygon用には一つのコントラクトだけをデプロイし、全てのNFTはそのコントラクトの中でMintしている。これにより、GAS代を極端に節約し、無料で提供することが出来ているのだ。
そこで困ったのがトークンゲート。MintしたNFTのid全てをbalanceOfBatch()に渡す必要がある。そこでMintしたNFTのidを調べてみると、ある規則があることが判明した。Mintするたびに、0x010000000000 づつ増えているのだ。
この規則を使えば、これまでにMintした全てのNFTのidのArrayを作ることができ、それをbalanceOfBatch()に渡して、結果を reduce すれば、トークンゲートが出来る。
こんな謎解きを一緒に楽しめる場をSlack上に作っているので、興味のある人は @snakajima までDMを下さい。最低限、クリプトゾンビは制覇し、自分でDappを作り始めたエンジニア限定です。
おわりに
シンギュラリティ・ソサエティでは、テクノロジーがどのように社会に影響を与えるか、様々な議論をしています。 DAOなどに代表されるブロックチェーンやスマートコントラクトのテクノロジーは、社会や経済の仕組みをコード化し、透明且つ効率に仕組みに刷新する可能性を秘めています。
現在、シンギュラリティ・ソサエティでは、DAOやDeFi、Smart Contractなどの勉強や開発、NounsDAOへのプロポーザルプロジェクトなど、Web3の活動も行っています。今後もこれらに関する記事を発信していきますのでお楽しみに!