使用Candy Machine V2在Solana上发行NFT

  • faria.chen
  • 更新于 2022-05-31 14:40
  • 阅读 4673

这个教程会教大家如何在Solana上发行带有Whitelist功能的NFT,使用到的工具有Candy Machine V2, SPL Tokens和Gumdrop。

这个教程会教大家如何在Solana上发行带有Whitelist功能的NFT,使用到的工具有Candy Machine V2, SPL Tokens和Gumdrop。

简单描述下整的逻辑:

  1. 先创建SPL Token
  2. 使用Candy Machine V2创建NFT
  3. 使用Gumdrop把SPL Token投放给白名单用户
  4. 用户去Candy Machine前端mint NFT,一个SPL Token换一个NFT

详细交互的逻辑如下所示:

1、环境设置

需要用到的工具如下所示,版本可以不用刻意对齐:

$ git version
git version 2.34.1

$ node --version
v16.13.1

$ yarn --version
1.22.17

$ ts-node --version
v10.4.0

$ solana --version
solana-cli 1.8.11 (src:423a4d65; feat:2385070269)

2、设置环境变量

# Environment
export ENV='devnet'
export URL='https://api.devnet.solana.com'
export KEYPAIR="$HOME/.config/solana/devnet.json"
export RPC='https://api.devnet.solana.com'

# Candy Machine
export EXTRAS='./extras'
export CONFIG="$EXTRAS/config.json"
export WHITELIST="$EXTRAS/whitelist.json"

# Collection
export ASSETS="$EXTRAS/assets"

3、创建钱包

创建一个钱包,并获取2 sol的空投,用于支付MINT费用并支付GAS

solana config set --url $URL
solana config set --keypair $KEYPAIR

solana-keygen new --outfile $KEYPAIR
solana airdrop 2 --keypair $KEYPAIR

记录下钱包的public key,后续会用到,不过也可以用下面的命令查钱包public key:

solana-keygen pubkey
或者
solana address

4、创建SPL Token

白名单用户会收到SPL Token,这个SPL Token在mint NFT的时候做交换:

spl-token create-token --decimals 0
# 把SPL-Token的id保存下来:
export SPL_TOKEN="<YOUR NEW TOKEN JUST CREATED>"

mint 10个token,然后把mint的权限关闭:

spl-token create-account $SPL_TOKEN
spl-token mint $SPL_TOKEN 10

# Consider disabling the mint when you're done
spl-token authorize $SPL_TOKEN mint --disable

对于mainnet来说,还需要注册token,当前在devnet,不需要这个步骤。

5、配置Candy Machine

下载Candy Machine的代码,并安装相关依赖:

git clone 'git@github.com:metaplex-foundation/metaplex.git'

cd metaplex
yarn install --cwd ./js/

创建extras目录,并创建Candy Machine的配置文件config.json

mkdir extras
touch ./extras/config.json

config.json的内容如下所示:

{
  "price": 0.5,
  "number": 10,
  "gatekeeper": null,
  "solTreasuryAccount": "<YOUR WALLET ADDRESS>",
  "splTokenAccount": null,
  "splToken": null,
  "goLiveDate": "30 Jan 2022 00:00:00 UTC",
  "endSettings": null,
  "whitelistMintSettings": {
    "mode": {
      "burnEveryTime": true
    },
    "mint": "<SPL TOKEN>",
    "presale": true,
    "discountPrice": 0.33
  },
  "hiddenSettings": null,
  "storage": "arweave",
  "ipfsInfuraProjectId": null,
  "ipfsInfuraSecret": null,
  "awsS3Bucket": null,
  "noRetainAuthority": false,
  "noMutable": false
}

将下述的几个参数修改为你自己的值:

  1. solTreasuryAccount :修改为第3步中钱包的public key。
  2. goLiveDate :可以进行公开mint的时间,whitelist可以在这个时间之前
  3. whitelistMintSettings.mint :SPL Token ID

可以看到hitelistMintSettings.discountPrice的价格是0.33sol(白名单预售的价格),price是0.5sol(公售的价格)。

可以在official docs查看更多配置的信息。

6、准备assets数据

作者给大家准备了demo数据,一共10个图片NFT及其metadata文件:

wget -O 'assets.tar.gz' https://github.com/epomatti/cmv2-whitelist/blob/main/assets.tar.gz?raw=true
tar -xzf assets.tar.gz --directory $EXTRAS

7、创建Candy Machine

使用下面的命令可以创建Candy Machine,并上传NFT数据:

ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts upload \
  --env $ENV \
  --keypair $KEYPAIR \
  --config-path $CONFIG \
  --rpc-url $RPC \
  $ASSETS

这里要记录下Candy Machine的ID,后续要用到,这个ID也可以在当前目录.cache/devnet-temp.json文件里查到,program.candyMachine字段的value。

NFT的数量不可变更,上线主网的时候注意检查下

上传成功后可以用下述命令可以检查是否上传正确:

ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts verify_upload \
  --env $ENV \
  --keypair $KEYPAIR \
  --rpc-url $RPC

出现了下面的输出,就可以继续啦:

uploaded (10) out of (10) ready to deploy!

8、创建Gumdrop

创建 whitelist.json 文件,里面有所有的白名单用户信息:

touch ./extras/whitelist.json

文件的内容信息如下,把handle改成白名单用户的address,amount是用户可mint的NFT数量:

[
  {
    "handle": "<USER WALLET>",
    "amount": 1
  },
  {
    "handle": "<USER WALLET>",
    "amount": 3
  },
]

创建gumdrop:

ts-node ./metaplex/js/packages/cli/src/gumdrop-cli.ts create \
  --env $ENV \
  --keypair $KEYPAIR \
  --rpc-url $RPC \
  --claim-integration "transfer" \
  --transfer-mint $SPL_TOKEN \
  --distribution-method "wallets" \
  --otp-auth "disable" \
  --distribution-list $WHITELIST

部署到mainnet的时候,要配置--host参数,目前在devnet不需要配置。

9、使用URL去Claim SPL Token

.log/devnet/2S25ZJmjdnquuRJBs2YZMLcLUeTVzRGXh63V94FYKhS4/ 目录下有三个文件:

.log/devnet/2S25ZJmjdnquuRJBs2YZMLcLUeTVzRGXh63V94FYKhS4/
├── id.json
├── resp.json
└── urls.json

其中打开urls.json文件的url字段打开,白名单用户就可以申领Token。

Distributor是Gumdrop生成的一个地址,要注意右上角一定要在DEVNET上,然后就可以claim了,成功后可以在收藏品里看到未知的Token。

10、创建前端mint页面

前端页面地址在./metaplex/js/packages/candy-machine-ui ,创建环境变量和配置文件:

export CANDYUI='./metaplex/js/packages/candy-machine-ui'

cp "$CANDYUI/.env.example" "$CANDYUI/.env"

编辑.env文件:

REACT_APP_CANDY_MACHINE_ID=<YOUR CANDY MACHINE PROGRAM ID>
REACT_APP_SOLANA_NETWORK=devnet
REACT_APP_SOLANA_RPC_HOST=https://api.devnet.solana.com

安装并启动mint前端:

yarn --cwd $CANDYUI install
yarn --cwd $CANDYUI start

如果你忘了Candy Machine ID,可以使用下面的命令获取:

ts-node ./metaplex/js/packages/cli/src/candy-machine-v2-cli.ts show \
  --env $ENV \
  --keypair $KEYPAIR \
  --rpc-url $RPC

11、Mint NFT

$$

$$

打开http://localhost:3000/就可以看到MINT页面了:

Mint之后在Fantom的藏品里就可以看到NFT了,我自己mint了3个NFT。

Reference

英文版

点赞 3
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
faria.chen
faria.chen
江湖只有他的大名,没有他的介绍。