見出し画像

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
}

config.json

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"}
}

0.json

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 について (本家)

その他参照した記事

Webフロントを作る場合に使えそうなもの (未検証)


この記事が気に入ったらサポートをしてみませんか?