![見出し画像](https://assets.st-note.com/production/uploads/images/71393324/rectangle_large_type_2_f2c29b91453ced23064a0f8aa9db47e4.jpeg?width=1200)
Solana の Metaplex CandyMachine v2 で Devnet の NFT をミントする
DevnetでいくつかNFTを使って検証したいニーズがあったので、Metaplex の CandyMachine v2 を使ってNFTを作ってみた。
プログラムをデプロイしたり面倒だと思いこんでいたら、実はCLIツールで楽勝だった。検証用にちょこっとNFTを用意したい場合に便利に使えそう。
ここではとにかく手っ取り早く、最少の設定で検証に使うNFTを作ることに集中する。必須ではないパラメータは設定しない。
前提
試したのは Mac
Solana の CLI が利用できる
node.js がインストール済み
ts-node が使える (npm install -g ts-node)
手順
リポジトリ複製
$ git clone https://github.com/metaplex-foundation/metaplex.git testnft
パッケージ導入
$ cd testnft
$ cd js
$ yarn install
$ cd ..
作る一連のNFTを識別するアドレス(update_authority)を準備
生成後に公開鍵を確認し、後で使えるようにしておく。
$ solana-keygen new --outfile update_authority.json
$ solana address -k update_authority.json
作成したアドレスでトランザクションを実行できるようにエアドロ取得
$ solana config set -u devnet
$ solana airdrop -k update_authority.json 1
$ solana balance -k update_authority.json
config.json を作る
$ vi config.json
下記の JSON を貼り付けて、次の4箇所のみ編集。
price: NFTの価格。検証用なので 0.01 SOL。
number: ミントできるようにするNFTの数
solTreasuryAccount: update_authority 用に作った公開鍵
goLiveDate: すぐ開始できるように現在日時か過去日時
{
"price": 0.01,
"number": 5,
"gatekeeper": null,
"solTreasuryAccount": "【update_authority の公開鍵】",
"splTokenAccount": null,
"splToken": null,
"goLiveDate": "1 Feb 2022 13:00:00 GMT",
"endSettings": null,
"whitelistMintSettings": null,
"hiddenSettings": null,
"storage": "arweave",
"ipfsInfuraProjectId": null,
"ipfsInfuraSecret": null,
"awsS3Bucket": null,
"noRetainAuthority": false,
"noMutable": false
}
NFTの画像とメタデータ用のJSONファイルを準備
asset ディレクトリを作る
$ mkdir asset
asset ディレクトリの中に、「N.png」と「N.json」を config.json の number で指定した数ぶん作成する。
Nは0開始の連番。5個の場合は 0.png 〜 4.png と 0.json 〜 4.json を作る。
検証用なので画像は全部同じでもOK。
N.json では NFT の名前や連番の箇所を調整する。
検証に関係しない限りパラメータは適当でよい。
{
"name": "【NFT名】 #0001 ",
"symbol": "【シンボル】",
"description": "【NFTの説明】",
"seller_fee_basis_points": 500,
"image": "0.png",
"attributes": [],
"properties": {
"creators": [{"address": "【update_authority の公開鍵】", "share": 100}],
"files": [{"uri": "0.png", "type": "image/png"}]
},
"collection": {"name": "collection", "family": "family"}
}
5個作ったあとはこうなる。
$ ls asset
0.json 0.png 1.json 1.png 2.json 2.png 3.json 3.png 4.json 4.png
アップロード(Arweaveに)
細かいことは CLI が内部でやってくれる。Arweave に支払うストレージ費用がどう捻出されているのかは謎。
$ ts-node js/packages/cli/src/candy-machine-v2-cli.ts upload -k update_authority.json -e devnet -cp config.json asset/ -c cache
これだけで自動的に作った asset の画像やメタデータ用の JSON をアップロードしてくれる。
ここまでで、もう CandyMachine は完成。ミントできるようになった。
検証で使いたいアカウントでミント
update_authority のアカウントにミントしたいわけではないので、CLIで使うウォレットの鍵を指定。(〜/.config/solana/id.json) トランザクション実行して、ミントしたいウォレットならなんでもよい。
$ ts-node js/packages/cli/src/candy-machine-v2-cli.ts mint_one_token -k ~/.config/solana/id.json -e devnet -cp config.json -c cache
コマンド出力に Tx のハッシュが出るので Solana Explorer などで確認。ウォレットの中を Phantom などで確認しても良い。
メモ
config.jsonについて (本家)
画像・メタデータ用の JSON について (本家)
その他参照した記事