Solana Metaplex Candy Machine v2チュートリアルのハマりポイント

MetaplexのCLI Candy Machine v2 のチュートリアルのハマりポイント。

verifyするとnot all NFTs checked outエラー

現象

% ts-node ./js/packages/cli/src/candy-machine-v2-cli.ts verify_upload \
    -e devnet \
    -k ~/.config/solana/id.json \
    -c example

wallet public key: HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg
Key size 2
Looking at key  0
Looking at key  9
/Users/user/Documents/Programming/Blockchain/metaplex/js/packages/cli/src/candy-machine-v2-cli.ts:409
      throw new Error(
            ^
Error: not all NFTs checked out. check out logs above for details
    at Command.<anonymous> (/Users/user/Documents/Programming/Blockchain/metaplex/js/packages/cli/src/candy-machine-v2-cli.ts:409:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

原因

.DS_Storeを削除する、.cacheのonChainをfalseにする、などいろいろなアドバイスがあったが、自分の場合は凡ミスで、アップロード対象データが間違っていたようだった。
ちゃんと意味がわかっていなかったが、チュートリアルの Preparing your Assets は、0〜9まで襦袢に作成する必要があるっぽい。0と9だけ作成した結果、失敗になっていた。

公式サイトにも注意事項として「順番をスキップするな」と書かれていた。

It is important to double check that you do not skip any indices, e.g., 0.png, 2.png, 3.png (missing 1.png). Otherwhise you will experience problems when minting your collection.

対応

上記で紹介されているデータは作成せずに、GitHubからアセットをDLしたほうがよい。

アセットの場所:

Metaplex example-assets

または

docs.metaplex.com/assets(zip)

この中身を自身のassetsにコピペしたあとに、再度uploadしてverify_uploadすると処理が通る。

uploadするとError: The arweave-sol storage option only works on mainnet

現象

Devnetを指定してuploadoするとarweave-solはmainnet限定の旨でエラー。

ts-node ./candy-machine-v2-cli.ts upload

candy-machine-v2-cli.ts:103
      throw new Error(
            ^
Error: The arweave-sol storage option only works on mainnet. For devnet, please use either arweave, aws or ipfs

原因

エラーの説明どおり、Devnetはarweave, aws, ipfsを指定してほしいとのこと。

対応

uploadで指定するconfig.jsonのstorageを修正する。

【修正前】

{
    "price": 1.0,
    "number": 10,
    "gatekeeper": null,
    "solTreasuryAccount": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg",
    "splTokenAccount": null,
    "splToken": null,
    "goLiveDate": "25 Dec 2021 00:00:00 GMT",
    "endSettings": null,
    "whitelistMintSettings": null,
    "hiddenSettings": null,
    "storage": "arweave-sol",
    "ipfsInfuraProjectId": null,
    "ipfsInfuraSecret": null,
    "awsS3Bucket": null,
    "noRetainAuthority": false,
    "noMutable": false
}

【修正後】

{
    "price": 1.0,
    "number": 10,
    "gatekeeper": null,
    "solTreasuryAccount": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg",
    "splTokenAccount": null,
    "splToken": null,
    "goLiveDate": "25 Dec 2021 00:00:00 GMT",
    "endSettings": null,
    "whitelistMintSettings": null,
    "hiddenSettings": null,
    "storage": "arweave",
    "ipfsInfuraProjectId": null,
    "ipfsInfuraSecret": null,
    "awsS3Bucket": null,
    "noRetainAuthority": false,
    "noMutable": false
}

新しくアップロードしたが更新されない(Uploading Size 0 undefined)

現象

新しく画像を追加して upload したところ、「Uploading Size 0 undefined」と表示されてなにも起きない。

% ts-node ./candy-machine-v2-cli.ts upload \
    -e devnet \
    -k ~/.config/solana/id.json \
    -cp /Users/user/Desktop/temp/quicknode-nft/dev/config.json \
    -c example \
    /Users/user/Desktop/temp/quicknode-nft/dev/assets

wallet public key: HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg
WARNING: The "arweave" storage option will be going away soon. Please migrate to arweave-bundle or arweave-sol for mainnet.

Beginning the upload for 10 (img+json) pairs
started at: 1643882668256
config for a candy machine with publickey: 7JWjvuihXHmLAUsii8sRBKTLV9NtUHz2fLPZKcLMwNpj has been already initialized
Uploading Size 0 undefined
Done. Successful = true.

原因

すでにuploadとverify_uploadが実行済のため(と思われる)。

対応

公式ドキュメントが見つからなかったので、正しい方法かわからないが、uploadしたときに生成される.cache配下を削除してから、再度uploadしたら解決した。

以下ファイルを削除する。ファイル名はノードサーバーやキャッシュ名(-cオプション)によって異なる。以下は「-e devnet -c example」のオプションでuploadした場合。

js/packages/cli/src/.cache/devnet-example.json

{
    "program": {
        "uuid": "ELvb8z",
        "candyMachine": "ELvb8zc75Ko2ay62EDax6ydUBQBLUJtMusVZ56fKsv5y"
    },
    "items": {
        "0": {
            "link": "https://arweave.net/2dhq3l8ATJvu4-xRkpCbUMOLTLV64OO6zwwCnPxzzM8",
            "name": "Number #0001",
            "onChain": true,
            "verifyRun": true
        },
        "1": {
            "link": "https://arweave.net/FWzqeE7MBJsKzHhJ20NIhjZX1wxyodC0c_lkSm_gcMI",
            "name": "Number #0002",
            "onChain": true,
            "verifyRun": true
        },
        "2": {
            "link": "https://arweave.net/S8BhBFjZG5d9osnCqAUrYhukp4rO3x3ER6f5ZRPT8zU",
            "name": "Number #0003",
            "onChain": true,
            "verifyRun": true
        },
        "3": {
            "link": "https://arweave.net/4S1y2ULQwRDKO8uxy_29L5DfZLbDVFlkCRhEIhOD-tI",
            "name": "Number #0004",
            "onChain": true,
            "verifyRun": true
        },
        "4": {
            "link": "https://arweave.net/8_L_fXa4kQX_VmFVB5xr9GTp_TtHyKeNY1hnkn3U2-I",
            "name": "Number #0005",
            "onChain": true,
            "verifyRun": true
        },
        "5": {
            "link": "https://arweave.net/dN20ja2LUezvHajaOocKDby4Bue7k6E6yYMyX6hikbo",
            "name": "Number #0006",
            "onChain": true,
            "verifyRun": true
        },
        "6": {
            "link": "https://arweave.net/AVpXIoeJ-1djfGK4DZ-Jsl8MdTlEyI-ke_CelT6Mubg",
            "name": "Number #0007",
            "onChain": true,
            "verifyRun": true
        },
        "7": {
            "link": "https://arweave.net/m5KBL1oKu2RH6Dp72t3LmHpPRQY33-jC9NBlpMoIoLM",
            "name": "Number #0008",
            "onChain": true,
            "verifyRun": true
        },
        "8": {
            "link": "https://arweave.net/7E1aFHvW55HzzegT6qnw9mH8DDlJev3ODJmlIq-KCP8",
            "name": "Number #0009",
            "onChain": true,
            "verifyRun": true
        },
        "9": {
            "link": "https://arweave.net/aKNmtpJE3ovs7To4SLaNEvqYXzXkd3D4TGW8VX9mut0",
            "name": "Number #0010",
            "onChain": true,
            "verifyRun": true
        }
    },
    "env": "devnet",
    "cacheName": "example"
}

キャッシュ名(-cオプション)を変更する方法でも解決できる可能。
「-c example」を「-c example2」のようにするだけ。

NFTs (10) is smaller than the uploaded one (1)エラー

現象

verify_uploadすると、数が少ないというエラーが表示される。

 % ts-node ./candy-machine-v2-cli.ts verify_upload \
    -e devnet \
    -k ~/.config/solana/devnet.json \
    -c example
wallet public key: DnaTH4s3NvKZbsbbvaT7JLy8XBAJPCbZiCmMQNUGrHdd
Key size 1
Looking at key  0
uploaded (1) out of (10)
/Users/user/Desktop/temp/metaplex-master/js/packages/cli/src/candy-machine-v2-cli.ts:426
      throw new Error(
            ^
Error: predefined number of NFTs (10) is smaller than the uploaded one (1)
    at Command.<anonymous> (/Users/user/Desktop/temp/metaplex-master/js/packages/cli/src/candy-machine-v2-cli.ts:426:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

原因

assetsの中身がconfig.jsonで指定した数よりも少ないため。

対応

案1:config.jsonのnumberをアップロードしたい数にあわせる。もし、2件だけだったら、「"number": 2」になる。
案2:assetsの数をconfig.jsonのnumberと同じ数だけにする。もし、2件だけだったら、0.json, 0.png, 1.json, 1.png の4ファイルのみになる。