自分用に雑にNFTを作る
自分専用の簡易NFTを雑に作成できるようにしておくとTwitter Blue登録者などは気軽にアイコンへNFT設定できるようになったりして何かと便利。
そもそもNFTって何?という人は下記の記事を参照してほしい。
上記の記事でもNFTの発行方法について書いているが、以下では自分のためだけなのでより手を抜いて雑にNFTの実装/デプロイ/mintをする方法を記す。
※ちなみに下記の方法やコードを使って生じたトラブルに関しては一切責任は負えません。自己責任でお試しください。
事前準備
MetaMaskはインストールしておくこと。
また、NFT(ERC721)を実装するための環境構築は面倒なのでRemix - Ethereum IDEというWEB IDEを使う。これを使うと実装/デプロイが簡単にできるので小規模開発ならおすすめ。
メタデータファイルの準備
NFTのメタデータ(json)とアイコン画像を適当な場所に配置しておく。
画像を適当な場所に配置する。これは王道だとIPFSだけど正直自分用ならS3でもなんでもいい。個人的にはよくわからんIPFS事業者よりGitHubの方がハンドリング自由で場合によっては長生きする気がするのでこんな感じで、自分のGitHubページにディレクトリを掘って画像を配置した。
ファイル名としては0.jpg
とか数字の方が後々の管理コスト的には良いと思う。
メタデータファイルとしては下記。
{
"description": "icon for twitter",
"image": "https://yuheinakasaka.github.io/twitter-icons/assets/0.jpg",
"name": "@razokulover"
}
descriptionとnameはご自由に。imageのところは先ほどアップロードした画像のURLを指定すること。そして一番重要なのはこのファイル名をNFTのIDだけ(拡張子は無し)にすること。
- 正:
https://example.com/hoge/metadata/0
- 誤:
https://example.com/hoge/metadata/0.json
NFTのIDは0から順に1ずつ自動でインクリメントされていく。そしてそのIDと後ほど出てくる_baseURI()
に設定したURL情報を使って自動でNFTのURLが生成されることになる。
NFTの実装
画像とメタデータの準備ができたらあとは実装。まずRemix - Ethereum IDEを開く。
左ナビゲーションのファイルアイコンをクリック。FILE EXPLORER > WORKSPACESの+ボタンが見えるはずなのでクリック。するとCreate Workspaceというのが出てくるはず。そこでChoose a templateを選択しERC721というのを選ぶ。そのままOKをクリック。
するとcontractsやscriptsといったディレクトリやMyToken.sol(名前は違うことがあるかも)といったファイルが生成されているはず。
contracts/MyToken.solをMyNFT.solにリネームする。
そんでそのファイルに下記のコードをペタッと貼り付ける。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721, Ownable {
constructor() ERC721("MyNFT", "MNT") {}
function _baseURI() internal pure override returns (string memory) {
return "https://yuheinakasaka.github.io/twitter-icons/metadata/";
}
function safeMint(address to, uint256 tokenId) public onlyOwner {
_safeMint(to, tokenId);
}
}
重要なのは_baseURI()
のところ。ここで自分の場合は先ほどアップロードしたmetadataのディレクトリまでのURLを指定している。このコードを使う人はここを任意のmetadataのファイルがあるディレクトリのurlに差し替えればよい。
こうしておくことで後ほどNFTをmintした時にhttps://yuheinakasaka.github.io/twitter-icons/metadata/0
とかhttps://yuheinakasaka.github.io/twitter-icons/metadata/1
といったtokenURIでアクセスされるようにできる。
あとは一旦cmd + s
を叩くと自動でセーブされコンパイルもされるはず。
もし失敗した場合は左ナビゲーションのSolidity CompilerでCOMPILERのバージョンをソースコードのversion(上記の場合は0.8.9)に合わせてCompile MyNFT.solというボタンを押す。これでいけるはず。
NFTのデプロイ
左ナビゲーションのDEPLOY & RUN TRANSACTIONSを開く。
ENVIRONMENTをクリックしてInjected Provider - MetaMaskを選ぶ。この時自分のMetaMaskはテストネット(Goerliとか)にしておく。Goerliが見つからない場合はGörli Testnet 接続方法 - Qiitaでも見てうまいことやっておくこと。
この後のデプロイやmint時にテスト用のETHが必要になるが、Goerli用のfaucet(Goerli Faucet)あたりから取得しておく。
とりあえずENVIRONMENTは下記のようになってれば正解。
あとはCONTRACT(Compiled by Remix)がMyNFT - contracts/MyNFT.solとなっていることを確認してDeployをクリックする。するとMetaMaskが立ち上がるのでConfirmする。
数十秒経つとテストネットへのデプロイが完了となる。
NFTのMint
あとはNFTを自分のウォレットにMintするだけ。
先ほどのRemixのDEPLOY & RUN TRANSACTIONSのDeployボタンの下方にDeployed Contractsというのが出ていると思う。
こんな感じ↓
ここから先ほどデプロイしたContractへNFTのmintリクエストを飛ばすことで自分のウォレットにNFTを鋳造する。
オレンジ色のボタンの中にsafeMint
というのがあると思うのでそこの↓矢印をクリックする。するとto
とtokenId
という入力フォームが出てくるはず。
toには自分のウォレットアドレス、tokenIdには初めてなら0を入力する。
あとはtransactボタンを押す。するとMetaMaskが立ち上がるので間違いないか確認した上でConfirmする。
TESTNET Goerli (GTH) Blockchain Explorerの検索フォームに自分のウォレットアドレスを入れると自分のトランザクション履歴が閲覧できる。
そこでSafe Mintという履歴が表示されていれば成功。下記のような感じ。
OpenSeaのテストネットにも表示されるはず。
メインネットへ
上記デプロイ以降の作業をあとはテストネットのGoerliではなくメインネットに変更して行うだけでよい。これで晴れて自分の好きな画像を自分用のNFTとしてゲットできる。
必要経費
ブロックチェーンに何かを書き込んだりするにはガス代が必要。今回の場合はコントラクトのデプロイとNFTのMintにそれぞれガス代がかかる。
メインネットへデプロイするために必要なガス代は$60前後。mintするにも数十ドル。大体日本円で1万円いかないくらい。めちゃくちゃ高い。
まとめ
雑に自分用のNFTを実装/デプロイ/mintする方法を書いた。ローカルに環境作ったりする必要なくWeb IDEで完結するという点でだいぶ気楽にできる。
自分でコントラクトを作らなくてもミントできるサービスとかもあるだろうし、これが一番楽な方法というわけではないということには留意しておいてほしい。あくまで参考までに。
その他この記事に関する疑問や修正依頼などは@razokuloverへどうぞ。
リンク
-
Create NFTs with Openzeppelin ERC721 Smart Contract | by Henrique Centieiro | Level Up Coding
- Remixの画像が多いので参考になるかも
-
Contracts Wizard - OpenZeppelin Docs
- OpenZeppelin製のコントラクトメーカー。
-
yuheinakasaka.github.io/twitter-icons at master · YuheiNakasaka/yuheinakasaka.github.io
- 自分のmetadataと画像をおいているGitHubリポジトリ。
-
RazokuNFT | Address 0x804142c4a14b11fb19431635a306e106fa0f6902 | Etherscan
- 今回のコードの自分用。テストネットでしか試してないからGoerliのEtherscanのURLを貼っておく。 -
Smart Contractをverifyする
- Etherscanでコントラクトのコードを表示させる方法について。
-
@razokulover - RazokuNFT V2 | OpenSea
- NFTがちゃんとmintされているとOpenSeaのテストネット版でこんな感じで確認できる。
Discussion