这个教程会教大家如何在Solana上发行带有Whitelist功能的NFT,使用到的工具有Candy Machine V2, SPL Tokens和Gumdrop。
这个教程会教大家如何在Solana上发行带有Whitelist功能的NFT,使用到的工具有Candy Machine V2, SPL Tokens和Gumdrop。
简单描述下整的逻辑:
详细交互的逻辑如下所示:
需要用到的工具如下所示,版本可以不用刻意对齐:
$ 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)
# 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"
创建一个钱包,并获取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
白名单用户会收到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,不需要这个步骤。
下载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
}
将下述的几个参数修改为你自己的值:
solTreasuryAccount
:修改为第3步中钱包的public key。goLiveDate
:可以进行公开mint的时间,whitelist可以在这个时间之前whitelistMintSettings.mint
:SPL Token ID可以看到hitelistMintSettings.discountPrice的价格是0.33sol(白名单预售的价格),price是0.5sol(公售的价格)。
可以在official docs查看更多配置的信息。
作者给大家准备了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
使用下面的命令可以创建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!
创建 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不需要配置。
.log/devnet/2S25ZJmjdnquuRJBs2YZMLcLUeTVzRGXh63V94FYKhS4/ 目录下有三个文件:
.log/devnet/2S25ZJmjdnquuRJBs2YZMLcLUeTVzRGXh63V94FYKhS4/
├── id.json
├── resp.json
└── urls.json
其中打开urls.json文件的url字段打开,白名单用户就可以申领Token。
Distributor是Gumdrop生成的一个地址,要注意右上角一定要在DEVNET上,然后就可以claim了,成功后可以在收藏品里看到未知的Token。
前端页面地址在./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
$$
$$
打开http://localhost:3000/就可以看到MINT页面了:
Mint之后在Fantom的藏品里就可以看到NFT了,我自己mint了3个NFT。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!