Solana MetaplexのMetadataが、どういう出力になるのか、Phantomがどういう単位でNFTをグルーピングしているのかわからなかったため、検証した。
(特に、Metaplexでcollectionのname, familyを指定する場所がなかったので、どのような出力になるのかが気になった)
Agenda
Metaplex Storefront を利用した場合
MetaplexのStorefrontでNFT作成した場合の検証。
Storefront: metaplex/js yarn startで立ち上がる画面。
Master Edition
結果
- Mint元になるオリジナルNFTで、Metaplex上は「NFT0」と表示
- Mutable(=変更可)
- collectionは出力されない
https://solscan.io/token/Cm6rGyudSYA8RNGTaia8xeAszLYAFsLZBcan4474kPhq?cluster=devnet#metadata
{
"name": "вальдемар",
"symbol": "",
"description": "вальдемар",
"seller_fee_basis_points": 100,
"image": "https://www.arweave.net/37v8c5w1OSmF-1NAcUriBr0F_gcwWWsyPYGfpx7n6P4?ext=jpg",
"attributes": [],
"external_url": "",
"properties": {
"files": [
{
"uri": "https://www.arweave.net/37v8c5w1OSmF-1NAcUriBr0F_gcwWWsyPYGfpx7n6P4?ext=jpg",
"type": "image/jpeg"
}
],
"category": "image",
"creators": [
{
"address": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg",
"share": 100
}
]
}
}
Edition
結果
- Master EditionからMintしたNFTで、Metaplex上は「1 of 1」のように表示
- Not Mutable(変更不可)
- collectionは出力されない
https://solscan.io/token/GPozydbUXby6eLd1p9FNrRGqV1q6VTdBcUKS5cMu79Tp?cluster=devnet#metadata
{
"name": "вальдемар",
"symbol": "",
"description": "вальдемар",
"seller_fee_basis_points": 100,
"image": "https://www.arweave.net/37v8c5w1OSmF-1NAcUriBr0F_gcwWWsyPYGfpx7n6P4?ext=jpg",
"attributes": [],
"external_url": "",
"properties": {
"files": [
{
"uri": "https://www.arweave.net/37v8c5w1OSmF-1NAcUriBr0F_gcwWWsyPYGfpx7n6P4?ext=jpg",
"type": "image/jpeg"
}
],
"category": "image",
"creators": [
{
"address": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg",
"share": 100
}
]
}
}
Candy Machine v2 を利用した場合
CLIでMetadataと素材を作成して、FrontendでMintした場合の検証。
CLI: candy-machine-v2-cli.ts
Frontend: candy-machine-ui
collection指定
結果
- collectionのnameとfamilyが出力される
- 実行手順: How to Deploy an NFT on Solana Using Candy Machine V2
https://solscan.io/token/3ngy8R3AyGnyhLYznpz7GWicErJJhe64MYtRpsjPZCkV?cluster=devnet#metadata
{
"name": "Number #0003",
"symbol": "NB",
"description": "Collection of 10 numbers on the blockchain. This is the number 3/10.",
"seller_fee_basis_points": 500,
"image": "https://www.arweave.net/kDYPnckFwUQxEHkk16yr0D4EkJVusaEOcIpeW8gg8aE?ext=png",
"attributes": [
{
"trait_type": "Layer-1",
"value": "0"
},
{
"trait_type": "Layer-2",
"value": "0"
},
{
"trait_type": "Layer-3",
"value": "0"
},
{
"trait_type": "Layer-4",
"value": "3"
}
],
"properties": {
"creators": [
{
"address": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg",
"share": 100
}
],
"files": [
{
"uri": "https://www.arweave.net/kDYPnckFwUQxEHkk16yr0D4EkJVusaEOcIpeW8gg8aE?ext=png",
"type": "image/png"
}
]
},
"collection": {
"name": "numbers",
"family": "numbers"
}
}
読込元Metadataファイル(2.json)
{
"name": "Number #0003",
"symbol": "NB",
"description": "Collection of 10 numbers on the blockchain. This is the number 3/10.",
"seller_fee_basis_points": 500,
"image": "2.png",
"attributes": [
{"trait_type": "Layer-1", "value": "0"},
{"trait_type": "Layer-2", "value": "0"},
{"trait_type": "Layer-3", "value": "0"},
{"trait_type": "Layer-4", "value": "3"}
],
"properties": {
"creators": [{"address": "HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg", "share": 100}],
"files": [{"uri": "2.png", "type": "image/png"}]
},
"collection": {"name": "numbers", "family": "numbers"}
}
collectionを空指定
結果
- collectionは出力されるが空
- 実行手順: Candy Machine v2 - Getting Started
https://solscan.io/token/DT6ocLTqhBeCzGzFH2m8skYhUDky8bb9NpvMs7Lg5vH8?cluster=devnet#metadata
{
"name": "2",
"symbol": "",
"image": "https://www.arweave.net/ksDLX2149o0HbyIubHs2k-8EmYTVBOyNGKcw_JVR6q8?ext=png",
"properties": {
"files": [
{
"uri": "https://www.arweave.net/ksDLX2149o0HbyIubHs2k-8EmYTVBOyNGKcw_JVR6q8?ext=png",
"type": "image/png"
}
],
"category": "image",
"creators": []
},
"description": "",
"seller_fee_basis_points": 500,
"attributes": [
{
"trait_type": "background",
"value": "light-blue"
},
{
"trait_type": "eyes",
"value": "star-eyes"
},
{
"trait_type": "mouth",
"value": "triangle-mouth"
},
{
"trait_type": "face",
"value": "teal-face"
}
],
"collection": {}
}
{
"name": "2",
"symbol": "",
"image": "1.png",
"properties": {
"files": [
{
"uri": "1.png",
"type": "image/png"
}
],
"category": "image",
"creators": []
},
"description": "",
"seller_fee_basis_points": 500,
"attributes": [
{
"trait_type": "background",
"value": "light-blue"
},
{
"trait_type": "eyes",
"value": "star-eyes"
},
{
"trait_type": "mouth",
"value": "triangle-mouth"
},
{
"trait_type": "face",
"value": "teal-face"
}
],
"collection": {}
}
Phantom
グルーピングの基本ルール
意訳すると、「Phantom上でNFTを表示するときは、まずCreatorsのアドレスをもとにグルーピングする。そのあと、ベストエフォートで各項目をチェックしてグルーピング名を決める。」とのこと。
引用:Phantom Grouping Non-Fungible Tokens
Grouping Non-Fungible Tokens
Phantom groups non-fungible tokens by the first verified creator's address in the creators array found on the on-chain metadata.
When a group is created, a best-effort process is used to determine that group’s name. That is because not every collection includes all the uri schema json key / value pairs. The following data is therefore used in descending order of preference:
1. collection.name
2. collection.family
3. external_url (parsed to remove url parts)
4. name (of a single collectible)
5. symbol
6. address of the first verified creator in the creators array (also used to group the collection)
Please add the above mentioned data if you are a creator and want your collection to be displayed properly in Phantom.
Candy Machine v2で作成した場合
Candy Machine v2 で、まったく同じ内容で2セット(10件のNFT x 2回デプロイ)をデプロイしたところ、1つにグルーピングされずにわかれてしまった。
Candy Machine v2 で作成したNFTを見てみると、Creatorsに身に覚えないのないアドレスが先頭にセットされている。
原因はおそらくこれで、Creatorsに Candy Machine v2 用のPDAアカウント(ユーザーの代わりに実行してくれるエスクローの仕組み)が自動的にセットされてしまうと思われ、別物のコレクションとして認識されたのではと推測している。
(Candy Machineの設定で対応できそうなものだが、調べても解決方法わからず。config.jsonやassetsの.jsonもいろいろ変更してみたがダメだった)
MetaplexのStorefrontだと、Creatorsに余計なアドレスが紐付かないため、自身で作成したNFTだと、1つにグルーピングされる。しかし、コレクション指定する方法がないようなので、常に1つにグルーピングされてしまうっぽい。