Solidity 入門: NFT プログラミング (ERC721)
May 02, 2022このページはこんな人におすすめ
- NFT のプログラミングを学習したい
- Solidity を学びたい
- 簡単なスマートコントラクトの作り方を知りたい
- Web3 エンジニアになりたい
このページでは Solidity by Example のサンプルコードを使ってスマートコントラクトを作る方法を解説します。
以下のページでほかのサンプルコードも解説しています。
- はじめてのイーサリアム Dapps 開発
- NFT プログラミング (ERC721)
- オラクルの基本的な使い方(Chainlink Data Feeds)
- Merkle Proof(マークルツリーと Keccak256))
- 定義したイベントを発行してブロックチェーンに記録
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
を作ります。
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からダウンロードできます。