Solidity 入門: NFT プログラミング (ERC721)
May 02, 2022このページはこんな人におすすめ
- NFT のプログラミングを学習したい
- Solidity を学びたい
- 簡単なスマートコントラクトの作り方を知りたい
- Web3 エンジニアになりたい
このページで実際に使ったソースコードはGitHubからダウンロードできます。
Solidity by Example のサンプルコードを使ってスマートコントラクトを作る方法を解説します。
事前準備
今回はテスト版の OpenSea がある Rinkeby にデプロイします。 JavaScript の開発ツールである npm と npx をインストールした環境で開発します。
- npm & npx コマンド
- テストネット Rinkeby の ETH トークン
Rinkeby のエンドポイントと秘密鍵を環境変数で設定しておきます。
RINKEBY_PRIVATE_KEY: ウォレットの秘密鍵RINKEBY_RPC_URL: Rinkeby の RPC エンドポイント
環境変数の使い方については以下の記事をご覧ください
Hardhat でテストネットにスマートコントラクトをデプロイしよう!
新しい Hardhat プロジェクトを作る
erc721 というディレクトリを作り npm パッケージの hardhat をインストールします。
mkdir erc721
cd erc721
npm init -y
npm i --save-dev hardhatHardhat のサンプルプロジェクトを作ります。
npx hardhatCreate 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