smacon.dev logo

Solidity 入門: NFT プログラミング (ERC721)

このページはこんな人におすすめ

  • NFT のプログラミングを学習したい
  • Solidity を学びたい
  • 簡単なスマートコントラクトの作り方を知りたい
  • Web3 エンジニアになりたい

このページでは Solidity by Example のサンプルコードを使ってスマートコントラクトを作る方法を解説します。

以下のページでほかのサンプルコードも解説しています。

Hardhat を使ったことがない方は以下の記事も合わせてご覧ください。

事前準備

今回はテスト版の OpenSea がある Rinkeby にデプロイします。 JavaScript の開発ツールである npm と npx をインストールした環境で開発します。

  • npm & npx コマンド
  • テストネット Rinkeby の ETH トークン

Rinkeby のエンドポイントと秘密鍵を環境変数で設定しておきます。

  • RINKEBY_PRIVATE_KEY: ウォレットの秘密鍵
  • RINKEBY_RPC_URL: Rinkeby の RPC エンドポイント

環境変数の使い方については以下の記事をご覧ください

Hardhat の使い方: Ethereum のテストネットにデプロイしよう!

新しい Hardhat プロジェクトを作る

erc721 というディレクトリを作り npm パッケージの hardhat をインストールします。

mkdir erc721
cd erc721
npm init -y
npm i --save-dev hardhat

Hardhat のサンプルプロジェクトを作ります。

npx hardhat

Create a sample projectを選択して、すべて Yes で回答します。

? What do you want to do? …
❯ Create a sample project
  Create an empty hardhat.config.js
  Quit

コーディング

以下の 3 つのファイルを作ります。

  • hardhat.config.js
  • contracts/erc721.sol
  • scripts/deploy.js

hardhat.config.js

require("@nomiclabs/hardhat-waffle");

const RINKEBY_PRIVATE_KEY = process.env.RINKEBY_PRIVATE_KEY;
const RINKEBY_RPC_URL = process.env.RINKEBY_RPC_URL;

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  solidity: "0.8.6",
  networks: {
    rinkeby: {
      url: `${RINKEBY_RPC_URL}`,
      accounts: [`${RINKEBY_PRIVATE_KEY}`],
    },
  },
};

contracts/erc721.sol

Solidity by Example のサンプルコードを丸ごとコピペして contracts/erc721.sol を作ります。

Solidity by Example (ERC721)

secripts/deploy.js

const hre = require("hardhat");

async function main() {
  const Factory = await hre.ethers.getContractFactory("ERC721");
  const contract = await Factory.deploy();
  await contract.deployed();

  console.log("Contract deployed to:", contract.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

コンパイル&デプロイ

以下のコマンドでコンパイルします。

npx hardhat compile

以下のように表示されればコンパイル成功です。

Compiled 1 Solidity file successfully

環境変数を設定した状態で以下のコマンドでデプロイします。

# 環境変数を書いたファイルを読み込む
source env.txt

# デプロイ
npx hardhat run scripts/deploy.js --network rinkeby

以下のように表示されれば、デプロイ成功です。

Contract deployed to: 0x2789eE319C74dd5bd9b3E46E2B89Ba2E07cC7D88

確認

Rinkeby の Etherscan でデプロイしたコントラクトを確認してみましょう。

https://rinkeby.etherscan.io/address/0x2789eE319C74dd5bd9b3E46E2B89Ba2E07cC7D88

このページで実際に使ったソースコードはGitHubからダウンロードできます。

こちらもおすすめ