SPLトークンをwhitelistトークンとして使用してしまうと、以下のようにPhantom walletでFTではなくてNFTとして扱われてしまいます。
理由については、Phantom walletの公式Docに書いてます。
If the total mint supply is greater than 1 and the mint has 0 decimals, Phantom will consider the token to be a
FungibleAsset
.Deeple訳:ミントの総供給量が1より大きく、ミントの小数点以下が0の場合、PhantomはそのトークンをFungibleAssetと見なします。
なので「だったら最初からSPLトークンにmetadataを付けてNFTとしてWhitelistトークンを発行したらいいじゃん」っていうことでその方法についてメモ。
方法としては恐らく以下の2つがあります。
- SPLトークンを作って、そのSPLトークンにmetadataを割り当てる
- 最初からmetadataが割り当てられたSPLトークンを作る
どうせなので両方書きたいと思います。
1.の方法
まず、SPLトークンを発行します。
ここでは100個発行するものとします。
$ spl-token create-token --decimals 0 Creating token 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD Signature: egXzpHNnFFraR6trLREeHJCAS3mGx2wN5KFaMWauLXS47tMgVrJFMKnGviX5og8Dy4vWZ6xdVvsh6xujSzmAnxw $ spl-token create-account 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD Creating account AuPc8HfB24PkDkpYK4yijyzdPytzf4YmgvNopij4rFYE Signature: 3QiDYnSGiPL3ZxMPq9zeaDCLfoBdNXbtyMt1ZS1vgHMuBRa2QB8PUbZ5E9YnmjErQW4SZm68SJSahGtcrN2yGZKu $ spl-token mint 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD 100 Minting 100 tokens Token: 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD Recipient: AuPc8HfB24PkDkpYK4yijyzdPytzf4YmgvNopij4rFYE Signature: 22ECx1TRTLcoN81DsA9t4wZLCJ8xJw2mrepqHxED5YsWgRM3AngkjRpaPnhkmmpbZUuNUcqm1SL5kDii5tz3LNGo
※ピンク文字列がSPLトークンのmintアドレスです
次にmetadata用のJSONファイルを作ります。
ですがその前にJSONファイルに載せるための画像をArweaveにアップしておきます。以下の記事を参考に。
ここでは以下の画像を使うものとします。
アップロードした結果のURLがこちら👇になります。
https://arweave.net/F2KJcKU7yhc_2ulFdxnACeWUpmGgB9OUozdpibBsYRY
これを元に、metadata用のJSONファイルを作ります👇
{ "name": "AZITO WL", "symbol": "AZWL", "description": "AZITO WL DAYO", "image": "https://arweave.net/ygKlj2V-8hV312p0mneP4EkM3fJUXN87f9uQV-bM1w4", "seller_fee_basis_points":0, "properties": { "creators": [{ "address": "AzAdm1qrYije9d6WgVxV1pTj9eopWjYLQzVwPhxmEahq", "share": 100 }] } }
このJSONファイルも同じようにArweaveにアップロードします。
アップロードした結果がこちら👇です。
https://arweave.net/CTIAOf1GVxzB8430Ba0L7y37r1RTN2tWU4xqtlB3060
このURLを使って、以下のコマンドでmetadataとSPLトークンを紐づけます。
ts-node ~/metaplex/js/packages/cli/src/cli-nft.ts create-metadata --keypair <PATH_TO_KEYPAIR> --mint 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD --uri https://arweave.net/CTIAOf1GVxzB8430Ba0L7y37r1RTN2tWU4xqtlB3060
- <PATH_TO_KEYPAIR>:Solana秘密鍵のパス
これでSolana Explorerなどで確認すると、きちんと反映されているのが確認できます。
https://explorer.solana.com/address/2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD?cluster=devnet
2.の方法
1.の方法と同じように、metadataのJSONファイルを作って、Arweaveにアップロードします。
そして、そのURLを元に以下のコマンドを実行するだけです。
ts-node ~/metaplex/js/packages/cli/src/cli-nft.ts mint --keypair <PATH_TO_KEYPAIR> --url <METADATA_URL> --max-supply 100
配布
Whitelistトークンの作成ができたら、あとはWhitelistを配りたいユーザーに、トークンを配るだけです。
以下のコマンドで配布できます。
spl-token transfer --fund-recipient --allow-unfunded-recipient <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
例えば、64sMDiJPDhw7bU7yitrCL8gySHJDze8doH67m3bAWADrというアドレスに対して、2個のトークンを送ります。
spl-token transfer --fund-recipient --allow-unfunded-recipient 2PzS3QmWY4yS1HTuMNp2yBw2sEge7D1ioJF9bb3pZ4SD 2 64sMDiJPDhw7bU7yitrCL8gySHJDze8doH67m3bAWADr
64sMDiJPDhw7bU7yitrCL8gySHJDze8doH67m3bAWADrのアドレスをPhantom walletで見てみると、このようにきちんと画像も表示されます。
あと最後になりますが、この方法で発行したトークンはNFTではなくてFungibleAssetと呼ばれる分類になるみたいです。
参考:https://docs.metaplex.com/programs/token-metadata/token-standard
おわり
コメント