SolanaでNFTを作成する方法

Last updated June 18, 2024

これは、Metaplex Token Metadataプロトコルを使用してSolanaブロックチェーンでNFTを作成する方法の初期ガイドです。

前提条件

  • お好みのコードエディタ(Visual Studio Codeを推奨)
  • Node 18.x.x以上

初期セットアップ

このガイドでは、単一ファイルスクリプトに基づいたJavaScriptを使用してNFTを作成する方法を説明します。ニーズに合わせて関数を変更および移動する必要があるかもしれません。

初期化

お好みのパッケージマネージャー(npm、yarn、pnpm、bun)で新しいプロジェクトを初期化し(オプション)、プロンプトが表示されたら必要な詳細を入力することから始めます。

npm init

必要なパッケージ

このガイドに必要なパッケージをインストールします。

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
2import { generateSigner, percentAmount } from '@metaplex-foundation/umi';
3import {
4 mplTokenMetadata,
5 createNft,
6 fetchDigitalAsset,
7} from '@metaplex-foundation/mpl-token-metadata';
8
9// Create Umi instance with the Token Metadata plugin
10const umi = createUmi('https://api.devnet.solana.com')
11 .use(mplTokenMetadata());
12
13// Connect your wallet (keypair or wallet adapter)
14// For keypair: umi.use(keypairIdentity(keypair))
15// For wallet adapter: umi.use(walletAdapterIdentity(wallet))
16
17// Generate a new mint keypair
18const mint = generateSigner(umi);
19
20// Create an NFT
21await createNft(umi, {
22 mint,
23 name: 'My NFT',
24 uri: 'https://example.com/my-nft.json',
25 sellerFeeBasisPoints: percentAmount(5.5),
26}).sendAndConfirm(umi);
27
28// Fetch the NFT data
29const asset = await fetchDigitalAsset(umi, mint.publicKey);
30
31console.log('NFT created successfully!');
32console.log('Mint address:', mint.publicKey);
33console.log('Name:', asset.metadata.name);
34console.log('URI:', asset.metadata.uri);

SDKのセットアップ

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
2import { generateSigner, percentAmount } from '@metaplex-foundation/umi';
3import {
4 mplTokenMetadata,
5 createNft,
6 fetchDigitalAsset,
7} from '@metaplex-foundation/mpl-token-metadata';
8
9// Create Umi instance with the Token Metadata plugin
10const umi = createUmi('https://api.devnet.solana.com')
11 .use(mplTokenMetadata());
12
13// Connect your wallet (keypair or wallet adapter)
14// For keypair: umi.use(keypairIdentity(keypair))
15// For wallet adapter: umi.use(walletAdapterIdentity(wallet))
16
17// Generate a new mint keypair
18const mint = generateSigner(umi);
19
20// Create an NFT
21await createNft(umi, {
22 mint,
23 name: 'My NFT',
24 uri: 'https://example.com/my-nft.json',
25 sellerFeeBasisPoints: percentAmount(5.5),
26}).sendAndConfirm(umi);
27
28// Fetch the NFT data
29const asset = await fetchDigitalAsset(umi, mint.publicKey);
30
31console.log('NFT created successfully!');
32console.log('Mint address:', mint.publicKey);
33console.log('Name:', asset.metadata.name);
34console.log('URI:', asset.metadata.uri);

NFTの作成

画像のアップロード

最初に行う必要があるのは、NFTを表す画像をアップロードすることです。これはjpeg、png、またはgifの形式で行うことができます。

Umiには、Arweave、NftStorage、AWS、ShdwDriveなどのストレージソリューションにアップロードできるダウンロード可能なストレージプラグインが付属しています。このガイドの冒頭で、Arweaveブロックチェーンにコンテンツを保存するirysUploader()プラグインをインストールしました。

ローカルスクリプト/Node.js

この例では、Irysを使用してArweaveにアップロードするローカルスクリプト/node.jsアプローチを使用しています。別のストレージプロバイダーにファイルをアップロードしたい場合やブラウザからアップロードしたい場合は、別のアプローチを取る必要があります。ブラウザシナリオではfsのインポートと使用は機能しません。

Error: Could not load example "token-metadata/upload-assets"

Make sure the file exists at: src/examples/token-metadata/upload-assets/index.js

Cannot find module './token-metadata/upload-assets/index.js'

メタデータのアップロード

有効で動作する画像URIを取得したら、NFTのメタデータの作成を開始できます。

オフチェーンメタデータの標準は以下の通りです:

{
"name": "My NFT",
"description": "This is an NFT on Solana",
"image": "https://arweave.net/my-image",
"external_url": "https://example.com/my-nft.json",
"attributes": [
{
"trait_type": "trait1",
"value": "value1"
},
{
"trait_type": "trait2",
"value": "value2"
}
],
"properties": {
"files": [
{
"uri": "https://arweave.net/my-image",
"type": "image/png"
}
],
"category": "image"
}
}

フィールドの説明:

name

トークンの名前。

symbol

トークンの略称。Solanaの略称はSOLです。

description

トークンの説明。

image

以前アップロードしたimageUri(または画像のオンラインロケーション)に設定されます。

NFT vs pNFT

Token Metadataプログラムは、通常のNFTとpNFT(プログラマブルNon-Fungible Asset)の2種類のNFTをミントできます。 2つのタイプのNFTの主な違いは、一方はロイヤリティが強制され(pNFT)、もう一方はされない(NFT)ことです。

NFT

  • ロイヤリティ強制なし
  • 初期セットアップがより簡単で、将来的に作業しやすい

pNFT

  • 将来の開発に関してより多くのアカウントを扱う必要がある
  • ロイヤリティ強制
  • プログラマブル - プログラムが転送を行うことをブロックできるルールセットがある

NFTのミント

ここから、使用したいNFTミント命令のタイプ(NFTまたはpNFT)を選択できます。

NFT

1import { percentAmount, generateSigner } from '@metaplex-foundation/umi';
2import { createNft } from '@metaplex-foundation/mpl-token-metadata';
3
4// Assuming umi is set up with mplTokenMetadata plugin
5// See getting-started for full setup
6
7const mint = generateSigner(umi);
8
9// Create and mint an NFT in one step
10await createNft(umi, {
11 mint,
12 name: 'My NFT',
13 uri: 'https://example.com/my-nft.json',
14 sellerFeeBasisPoints: percentAmount(5.5),
15 // Optional: add to collection (must verify separately)
16 // collection: some({ key: collectionMint.publicKey, verified: false }),
17}).sendAndConfirm(umi);
18
19console.log('NFT created:', mint.publicKey);

pNFT

1import { percentAmount, generateSigner } from '@metaplex-foundation/umi';
2import { createProgrammableNft } from '@metaplex-foundation/mpl-token-metadata';
3
4// Assuming umi is set up with mplTokenMetadata plugin
5
6const mint = generateSigner(umi);
7
8// Create and mint a Programmable NFT in one step
9await createProgrammableNft(umi, {
10 mint,
11 name: 'My Programmable NFT',
12 uri: 'https://example.com/my-programmable-nft.json',
13 sellerFeeBasisPoints: percentAmount(5.5),
14 // Optional: add to collection (must verify separately)
15 // collection: some({ key: collectionMint.publicKey, verified: false }),
16}).sendAndConfirm(umi);
17
18console.log('Programmable NFT created:', mint.publicKey);

次のステップ

このガイドでは、基本的なNFTの作成方法を学びました。ここからToken Metadataプログラムに進んで、コレクションの作成、新しいNFTをコレクションに追加すること、そしてNFTで実行できるさまざまな操作を確認できます。