メインコンテンツまでスキップ

lesson-3_NFTをdevnetにデプロイしよう

🛫 Candy Machine と NFT を devnet に接続する

本プロジェクトのメインパートです。Candy MachineとNFTをdevnetに持ち込みます。

Candy Machine v2から、このプロセスが大幅に簡素化されました。

sugarコマンドで、以下を実行できます。

1. NFTを Arweave(分散型ファイルストア)にアップロードし、Candy Machineの構成を初期化する

2. MetaplexのコントラクトでCandy Machineを作成する

3. Candy Machineを、価格、番号、開始日、そのほか諸々の設定を実施する

🔑 Solana キーペアの設定

アップロードするためには、ローカルのSolanaキーペアを設定する必要があります。

※ 過去にこの作業したことがある場合は、引き続き以下の手順に従ってください。

NFTをSolanaにアップロードするためには、コマンドラインで作業するための「ローカルウォレット」が必要になります。

ウォレットは基本的に公開鍵と秘密鍵の「キーペア」であり、ウォレットがなければSolanaと通信できません。

これは以下のコマンドを実行できます。

※パスフレーズの入力を求められたら、Enterキーを押して空にしておくとよいでしょう。

solana-keygen new --outfile ~/.config/solana/devnet.json

ここから、このキーペアをデフォルトのキーペアとして設定できます。

solana config set --keypair ~/.config/solana/devnet.json

ここで、solana config getを実行すると、次のようにdevnet.jsonKeypairPathとして表示されます。

Config File: /Users/任意のフォルダ名/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: /Users/任意のフォルダ名/.config/solana/devnet.json
Commitment: confirmed

下記コマンドでSolanaの仮想通貨であるSOLの保有数を確認できます。

solana balance

0SOLと出力されます。

SOLなしではSolanaにデータをデプロイできません。

ブロックチェーンにデータを書き込むには、コストがかかります。

現在devnet上にいるので、偽のSOLを自分自身に与えることができます。

下記コマンドを実行します。

solana airdrop 2

もう一度solana balanceを実行して、2 SOLと表示されるはずです。

※ 偽のSOLが不足した場合は、上記のコマンドを再度実行してください

🎂 Candy Machine を構築する

Candy Machineにどのような動作をさせるかを伝えるには、設定が必要です。

Section2 Lesson1の環境構築でインストールしたsugarコマンドを用いて、設定ファイルを作成しましょう。設定ファイルは、アセット数、使用するクリエイター、適用する設定などの値で、キャンディマシンをどのように構成するかをSugarに指示します。それでは、下記コマンドを実行してください。

sugar config create

いくつかの質問に答えていきます。下記の例は質問とその入力例になります。詳しくは公式ドキュメントを参考にしてください。

# 入力例
✔ Found 3 file pairs in "assets". Is this how many NFTs you will have in your candy machine? #「y」を入力
✔ Found no symbol in your metadata file. Is this value correct? #「y」を入力
✔ What is the seller fee basis points? #「500」を入力
✔ Do you want to use a sequential mint index generation? We recommend you choose no. #「n」を入力
✔ How many creator wallets do you have? (max limit of 4) #「1」を入力
✔ Enter creator wallet address #1 · $ solana address で取得したアドレスを入力
✔ Enter royalty percentage share for creator #1 (e.g., 70). Total shares must add to 100. · 「100」を入力
✔ Which extra features do you want to use? (use [SPACEBAR] to select options you want and hit [ENTER] when done) · #「Enter」を押す
✔ What upload method do you want to use? #「Bundlr」を選択
✔ Do you want your NFTs to remain mutable? We HIGHLY recommend you choose yes. #「y」を入力

[2/2] 📝 Saving config file

Saving config to file: "config.json"

Successfully generated the config file. 🎉

✅ Command successful.

config.jsonファイルがプロジェクトのルートに作成されたことを確認しましょう。

次に、assets内のファイルをBundler経由でArweaveにアップロードします。

sugar upload

assetsディレクトリの各アセットがArweaveにアップロードされ、そのURIがキャッシュファイルに保存されました。

アップロード終了時に生成されるcache.logファイル内のimage_linkmetadata_linkにアクセスしてみましょう。前のレッスンで準備したNFT画像やメタデータが表示されたでしょうか?

なお、この時点では、cache.jsonファイルの最初に記載されているcandyMachineに関する値は空です。

次に、Candh Machineをデプロイします。

sugar deploy
# 実行例
sugar deploy

[1/3] 📦 Creating collection NFT for candy machine
Collection mint ID: FTE4mtHZPexDUeVsq4Zmc7GoKXx8rCJkceFSK1YAU7DW

[2/3] 🍬 Creating candy machine
Candy machine ID: 6PLikotuLDHonQanV1Uk8xekSkyTvthYbtSPVTXV2rEU

[3/3] 📝 Writing config lines
Sending config line(s) in 1 transaction(s): (Ctrl+C to abort)
[00:00:02] Write config lines successful █████████████████████████████████████████████████████████████████ 1/1

✅ Command successful.

デプロイ完了後、再度cache.jsonファイルを開いてみましょう。デプロイ前は空だったcandyMachineの値が設定されていることが確認できます。なお、この時点では、candyGuardの値は空です。

また、以下のコマンドを実行するとCandy Machineのデプロイに成功したかを再確認することができます。

sugar verify

価格や開始日などのコンフィギュレーションをどこで設定するのか気になりますよね。そこで、キャンディマシンV3では、ガードの出番です。

config.jsonファイルを更新します。初期設定ではnullが設定されている"guards"を以下のように更新しましょう。

"guards": {
"default": {
"solPayment": {
"value": 0.1,
"destination": "WALLET_ADDRESS_TO_PAY_TO"
},
"startDate": {
"date": "2023-01-01T00:00:00Z"
}
}
}
  • solPaymentは、宛先のウォレット(destination)に0.1 SOL(value)の支払いを要求します。
  • startDateは、設定した日付(ここでは2023年01月01日00:00:00)より前のミントを許可しないように制限します。

destinationの値は、SOLを受け取るアドレスを設定しましょう。

これでドロップ開始時刻を設定することができました。それでは、以下のコマンドを実行してガードの設定を適用しましょう。

sugar guard add

コマンド実行後、再度cache.jsonファイルを開いてみましょう。candyGuardの値が設定されていることが確認できます。

現在のガード設定を確認するには、以下のコマンドを実行します。

sugar guard show

なお、ガードの設定を更新したい場合は、ファイルを更新後にアップロードコマンドを実行する必要があります。

sugar guard update

Candy Machineの構築とデプロイが成功したので、次はブラウザからミントができるようにしましょう!

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#solanaで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨

1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット

おめでとうございます! セクション2は終了です!

ぜひ、ターミナルの出力結果をコミュニティに投稿してください!

あなたの成功をコミュニティで祝いましょう 🎉

次のレッスンでは、WebアプリケーションからCandy Machineを呼び出していきます!