見出し画像

Soneiumで、ERC721aをデプロイしてVerify & Publishする

1. 概要と事前準備

Soneiumのテストネットに、ERC721aのコントラクトをデプロイして検証&公開する方法を紹介します。

これを実施することで、公開したコントラクトからNFTをミントすることができます。

事前にSoneiumをメタマスクに追加する必要があります。

またAlchemyに登録して、MinatoのHTTPSを取得します。


この記事では、ERC721aを実装していきます。
ERC721aは、NFT規格であるERC721をAzukiプロジェクトが改良したバージョンです。

複数のNFTを一度にミントする際のガス代を節約できるため、ジェネラティブNFTとの相性が良いです。

ERC721aについては、こちらの記事が参考になります。

2. コントラクトの開発

作業用のディレクトリを作成します。

mkdir contracts


作成したディレクトリにHardhatをインストールします。
プロジェクトは、TypeScriptを選択します。


ERC721aをインストールします。

npm install erc721a


contractsディレクトリにCollection.solを作成します。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {ERC721A} from "erc721a/contracts/ERC721A.sol";

contract Collection is ERC721A {
    constructor() ERC721A("GenerativeEyes", "GES") {}

    function _baseURI() internal pure override returns (string memory) {
        return
            "https://purple-gentle-elephant-417.mypinata.cloud/ipfs/QmanZa6UNWX4bRUXu3gVeKm7TqfdTPvwud2fMANLerYPNb/";
    }

    function tokenURI(
        uint256 tokenId
    ) public pure override returns (string memory) {
        return
            string(abi.encodePacked(_baseURI(), _toString(tokenId), ".json"));
    }

    function mint(uint256 quantity) public {
        _mint(msg.sender, quantity);
    }
}


デプロイするコードを作成します。
ignition/modulesディレクトリに、Collection.tsを作成します。

import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";

const CollectionModule = buildModule("CollectionModule", (m) => {
  const Collection = m.contract("Collection");

  return { Collection };
});

export default CollectionModule;


hardhat.config.tsを以下のように修正します。
事前準備で取得したAlchemyのURLとメタマスクのシークレットキーを設定します。

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config: HardhatUserConfig = {
  solidity: "0.8.27",
  networks: {
    minato: {
      url: "AlchemyのURL",
      accounts: ["メタマスクのシークレットキー"],
    }
  },
  etherscan: {
    apiKey: {
      'minato': 'empty'
    },
    customChains: [
      {
        network: "minato",
        chainId: 1946,
        urls: {
          apiURL: "https://explorer-testnet.soneium.org/api",
          browserURL: "https://explorer-testnet.soneium.org"
        }
      }
    ]
  }
};

export default config;


作成したスクリプトでデプロイします。

npx hardhat ignition deploy ./ignition/modules/Collection.ts --network minato --deployment-id minato-deployment

✔ Confirm deploy to network minato (1946)? … yes
[ CollectionModule ] Nothing new to deploy based on previous execution stored in ./ignition/deployments/chain-1946

Deployed Addresses

CollectionModule#Collection - 0xD9AB32810421b3147583e44AB2352D97FeE5e7f5


explorerから、出力されたコントラクトアドレスを検索します。


コントラクトがデプロイできました。


Verify & Publishしてコントラクトを公開します。

npx hardhat ignition verify minato-deployment


explorerをブラウザ更新するとコントラクトが公開されているのが確認できます。


ミント関数を実行します。
Write Contractに移動してウォレットを接続します。


引数にミントしたいNFTの数量を入れて、Writeを実行します。


トランザクションを確認するとミント関数が成功しています。


それぞれの関数については、ERC721aのドキュメントに記載されています。


メタマスクを開くとミントしたNFTが表示されました!


参考にした記事


いいなと思ったら応援しよう!