はじめに
SolanaでNFTを作成する場合、Metaplexと呼ばれるプラットフォームがよく使われています。
https://www.metaplex.com
Metaplexが提供しているCandy Machineというスマートコントラクトを使って、ジェネレーティブNFTコレクションを作成し、ミントページでミントするまでを実施したいと思います。
また、今回はMacOSを前提としています。
アセットを用意する
まずはアセットを用意します。アセットはHashlipsというOSSを使って簡単に作成することができます。
GitHub - HashLips/hashlips_art_engine: HashLips Art Engine is a tool used to create multiple different instances of artworks based on provided layers.
作成方法については、HashlipsのReadmeに記載されていますが、後日別記事で解説しようと思います。
今回は以下のように# 0 ~ # 4の5組のアセットを用意しました。
Candy Machineを利用するためには、0からの連番でアセットを用意する必要があります。
pngファイル ➡︎ NFTの画像
jsonファイル ➡︎ メタデータ
pngとjsonのファイルの組は1つのフォルダ内にまとめて格納する必要があります。
Solana CLIのインストール
ウォレットの作成や、SOLエアドロップのためにSolana CLIをインストールします。
sh -c "$(curl -sSfL https://release.solana.com/v1.14.13/install)"
バージョンについては日々アップデートされるので、インストールする際は以下を参照した方がいいと思います。
Install the Solana Tool Suite | Solana Docs
ウォレットを作成する
以下コマンドを実行して、ウォレットを作成します。
solana-keygen new --outfile ./my-keypair.json
カレントディレクトリにmy-keypair.jsonというファイルが作成されます。これは、決して他人に渡したり、中身を教えてはいけないファイルになります。
もし渡してしまうと、ウォレット内のトークンを全て奪われることになります。
以下コマンドで作成されたウォレットのアドレスを確認することができます。
solana-keygen pubkey ./my-keypair.json
私の場合、
7ZsTkwHmm4WutDaoEjf5kyptBqbDzBo4TSo1GCn2U1We
が表示されたので、上記が作成されたウォレットのアドレスということになります。
SOLエアドロップ
Solanaには以下の3つのネットワークが用意されています。
- Mainnet Beta
- Devnet
- Testnet
Mainnet Betaは本番環境なので、本物のトークンが利用されます。それに対し、DevnetとTestnetは偽物のトークンが利用され、ネイティブトークンであるSOLも自由にエアドロップできます。
以下コマンドでSOLをエアドロップできます。
solana airdrop 1 7ZsTkwHmm4WutDaoEjf5kyptBqbDzBo4TSo1GCn2U1We
以下で確認すると、1SOLと表示され、きちんとエアドロップができていることを確認できます。
solana balance 7ZsTkwHmm4WutDaoEjf5kyptBqbDzBo4TSo1GCn2U1We
SOLはNFTコレクションを作成するためのトランザクション費用として利用します。
Sugar インストール
SugarはCandy Machineをブロックチェーン上に作成するためのCLIツールになります。
これもMetaplexが提供しています。
以下コマンドでSugarをインストールできます。
bash <(curl -sSf https://sugar.metaplex.com/install.sh)
バージョンが確認できれば成功です。
sugar --version
Candy Machineを作成する
Candy Machineを作成するために、まずconfigファイルが必要になります。
configファイルの例です。
{
"price": 0.1,
"number": 5,
"symbol": "YC",
"sellerFeeBasisPoints": 1000,
"gatekeeper": null,
"solTreasuryAccount": "6HUmXhXWRX7VJfuSpx788MUZ2EFRSFM2uxX5yF6yhW6r",
"splTokenAccount": null,
"splToken": null,
"goLiveDate": "2023-01-28T15:00:00.000Z",
"endSettings": null,
"whitelistMintSettings": null,
"hiddenSettings": null,
"uploadMethod": "bundlr",
"shdwStorageAccount": null,
"retainAuthority": true,
"isMutable": true,
"creators": [
{
"address": "6HUmXhXWRX7VJfuSpx788MUZ2EFRSFM2uxX5yF6yhW6r",
"share": 100
}
]
}
各項目の説明は以下に記載があります。
Configuration | Metaplex Docs
今回のconfigファイルの内容をざっくりと説明すると、以下のような形になります。
- NFT総数: 5
- NFTコレクションのシンボル: YC
- 値段: 0.1SOL
- 売り上げ送付先アドレス: 6HUmXhXWRX7VJfuSpx788MUZ2EFRSFM2uxX5yF6yhW6r
- ミント開始時刻: 2023-1-29 15:00 UTC
- 2次流通手数料: 10%
- クリエイターアドレス: 6HUmXhXWRX7VJfuSpx788MUZ2EFRSFM2uxX5yF6yhW6r
assetsとconfigファイルが格納されているディレクトリ内で
Candy Machineを作成します。
sugar launch -c config.json assets
途中で
Do you want to continue without automatically setting the candy machine collection? (y/n)
と聞かれますが、yで大丈夫です。
以下メッセージが表示されたらOKです。
[1/2] 🍬 Creating candy machine
Candy machine ID: oBfU65CacdQ6PERbwtEhAbLma8yZbGTfxH19SKzhr7o
~~省略~~
Verification successful. You're good to go!
今回はアドレスがoBfU65CacdQ6PERbwtEhAbLma8yZbGTfxH19SKzhr7oのCandy Machineが作成されました。
Phantom インストール
ミントページでNFTをミントするためには、ブラウザにウォレット拡張機能をインストールする必要があります。
SolanaではPhantomが最もポピュラーなので、Phantomを使います。
以下からお使いのブラウザにPhantomをインストールします。
Phantom - A friendly Solana wallet built for DeFi & NFTs
作成したウォレットをPhantomにインポートするために、以下コマンドでmy-keypair.jsonの内容を出力します。改めてですが、出力された内容は他人に知られてはいけない内容です。
cat ./my-keypair.json
Phantom > Settings > Add / Connect Wallet > Import private key
を選択し、出力されたプライベートキーを入力したら、ウォレットをimportできます。
ただ、importされた直後はMainnet Betaに接続されている状態なので、
Phantom > Settings > Developer Settings > Devnet
を選択して、Devnetに接続します。
Devnetの残高が確認できたらOKです。
ミントページの作成
ミントページもMetaplexがOSSとして公開してくれています。
GitHub - metaplex-foundation/candy-machine-ui: Reference minting UI implementation for the Metaplex Candy Machine Program
レポジトリをクローンしてきます。
git clone https://github.com/metaplex-foundation/candy-machine-ui.git
ディレクトリを移動し、モジュールをインストール
cd candy-machine-ui
yarn install
envファイルを用意
cp .env.example .env
Candy Machineアドレスを設定
vi .env
REACT_APP_CANDY_MACHINE_IDを置換する
REACT_APP_CANDY_MACHINE_ID= oBfU65CacdQ6PERbwtEhAbLma8yZbGTfxH19SKzhr7o
REACT_APP_SOLANA_NETWORK=devnet
REACT_APP_SOLANA_RPC_HOST=https://metaplex.devnet.rpcpool.com/
SKIP_PREFLIGHT_CHECK=true
ミントページ起動
yarn start
起動完了したら、localhost:3000でアクセスできます。
Phantom接続
接続したらMintボタンが表示されます。
Mintボタンを押したら、Phantomの認証ボタンが表示されるので、認証します。
Mintが成功したら、PhantomからミントされたNFTを確認できます。
Solscanでミントトランザクションを確認できます。
https://solscan.io/tx/2S1RcytLGw7bvpM2ET9rNuikzaFS86Tc5MzYCYdsggtZwTdn3m9NEsviAwnpQFPBCLodiXTCAMxVUtJ2Xb9aLyCT?cluster=devnet
最後に
以上、SolanaでNFTコレクションを作成して、ミントページでミントするまでをやってみました。
今回は極シンプルな構成でしたが、実際にNFTコレクションをローンチするとなると、ミントフェーズを分けたり、ホワイトリスト設定をしたりということが必要になってきます。
ここについては、時間があれば別記事で解説したいと思います。