Core Candy Machine

アセットの準備

アセットファイル

アセットを作成するには、アセットデータで使用するために準備・アップロードする必要があるいくつかの異なるファイルが必要です。 これらには以下が含まれます:

  • 画像とアニメーションファイル。
  • JSONメタデータファイル。

アセットタイプ

アセットは以下のカテゴリをサポートしています:

  • image
  • video
  • audio
  • vr
  • html

画像の準備

画像に関する固有のルールはありませんが、可能な限りweb deliverableになるように画像を最適化することがベストプラクティスです。すべてのユーザーが超高速のブロードバンド接続にアクセスできるわけではないことを考慮する必要があります。ユーザーはインターネットへのアクセスが希少な遠隔地にいる可能性があるため、8mbの画像を表示させようとするとプロジェクトでの体験に影響を与える可能性があります。

アセットのタイプがaudiovideohtml、またはvrであっても、これらの他のアセットタイプの読み込みをサポートしていない可能性があるウォレットやマーケットプレイスなどの領域でフォールバックとして使用されるため、画像を準備する価値があります。

アニメーションファイルの準備

アニメーションファイルは、残りのアセットカテゴリタイプaudiovideovrhtmlで構成されます。

ここでも画像ファイルの準備と同じことが適用されます。ファイルサイズとユーザーの予想ダウンロードサイズを考慮する必要があります。

以下のファイルタイプは、ほぼすべての主要なウォレットとマーケットプレイスで動作することがテスト・確認されています。

  • video (.mp4)
  • audio (.wav, .mp3)
  • vr (.glb)
  • html (.html)

JSONメタデータの準備

JSONメタデータファイルは、NFT、pNFT、cNFTの他のMetaplex標準で使用されているものと同じToken Standardに従います。

FieldTypeDescription
namestringName of the asset.
descriptionstringDescription of the asset.
imagestringURI pointing to the asset's logo.
animation_urlstringURI pointing to the asset's animation.
external_urlstringURI pointing to an external URL defining the asset — e.g. the game's main site.
attributesarrayArray of attributes defining the characteristics of the asset.
  • trait_type (string): The type of attribute.
  • value (string): The value for that attribute.
propertiesobjectAdditional properties that define the asset.
  • files (array): Additional files to include with the asset.
    • uri (string): The file's URI.
    • type (string): The file's type. E.g. image/png, video/mp4, etc.
    • cdn (boolean, optional): Whether the file is served from a CDN.
  • category (string): A media category for the asset. E.g. video, image, etc.

画像とメタデータのジェネレータ

アートレイヤーとプロジェクトに関する基本情報をジェネレータに提供すると、指定されたパラメータに基づいてx個のアセット画像とJSONメタデータの組み合わせを生成してくれる自動化されたスクリプトやウェブサイトがいくつかあります。

名前タイプ難易度要件無料
nftchefscript⭐⭐⭐⭐JS knowledge
hashlipsscript⭐⭐⭐⭐JS knowledge
Nft Art Generatorweb UI⭐⭐
buenoweb UIunknown

ファイルのアップロード

ストレージオプション

Arweave/Irys

「Arweaveネットワークは、データのためのBitcoinのようなものです:開かれた台帳の中の永続的で分散されたウェブ。」- arweave.org

Arweaveはそれ自身のブロックチェーンであるため、ファイルをArweaveに保存するためにはブリッジを使用する必要があります。IrysはSolanaとArweaveの間の仲介者として機能し、ARの代わりにSOLでストレージの支払いを行えるようにし、Arweaveチェーンへのデータアップロードを代行してくれます。

独自のSDKを通じて手動で実装するか、UMIプラグインを使用してIrys経由でArweaveにアップロードできます。

nftStorage

「私たちの低コストで使いやすいソリューションでNFTを保存してください。スマートコントラクトによって動力を与えられ、究極の透明性のための私たちのもうすぐオンチェーンになる基金によって支援される、検証可能な長期ストレージを保証することを目的としています。」- nftStorage

nftStorageはファイルをIPFS(InterPlanetary File System)ネットワークにアップロードします。

nftStorageにアップロードするには、彼らのAPIドキュメントに従うことができます。

セルフホスティング

AWS、Google Cloud、さらには独自のウェブサーバーで画像やメタデータをセルフホスティングすることも全く問題ありません。保存された場所からデータにアクセス可能で、CORSのようなものがブロックしていなければ問題ないはずです。セルフホストオプションをテストして、保存されたデータが表示可能であることを確認するために、いくつかのテスト用Coreアセットまたは小規模なCore Candy Machineを作成することをお勧めします。

UMIでのファイルアップロード

Umiには、プラグインを通じてアップロードプロセスを支援するいくつかのプラグインがあります。現時点で以下のプラグインがサポートされています:

  • Irys
  • AWS

UMIでIrys経由でArweaveにアップロード

UMIでファイルをアップロードすることについてより詳しく見るには、Umi Storageを参照してください。

UMIでIrys経由でArweaveにファイルをアップロード

import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys'
const umi = createUmi("https://api.devnet.solana.com").use(irysUploader())
const uriUploadArray = await umi.uploader.upload([myFile1, myFile2])
console.log(uriUploadArray)

JSONメタデータファイルに画像URIを割り当て

選択したストレージメディアにすべてのimgファイルをアップロードしたら、すべての画像URIをJSONメタデータファイルに配置する必要があります。

アセットコレクションが1000のアセットを持っている場合、1000の画像/アニメーションメディアをストレージプラットフォームにアップロードし、各画像/アニメーションメディアがどこに保存されたかを示すデータセット/ログ/方法を受け取る必要があります。選択したアップロードプラットフォームがバッチアップロードをサポートしていない場合、単一ループでアップロードする必要があり、リンクを手動でログ・保存する必要があるかもしれません。

この時点での目標は、メディアが保存されている場所のURIの完全なリストを持つことです。

[
https://example.com/1.jpg
https://example.com/2.jpg
...
]

アップロードされたメディアのインデックスURIリストを使用して、JSONメタデータファイルをループし、適切な場所にURIを追加する必要があります。

画像URIはimage:フィールドに、そしてproperties: files: []配列にも挿入されます。

{
"name": "My Nft #1",
"description": "This is My Nft Collection",
"image": "https://example.com/1.jpg", <---- ここに入力。
...
"properties": {
"files": [
{
"uri": "https://example.com/1.jpg",
"type": "image/jpg"
}, <---- files配列にオブジェクトエントリを作成。
]
}
}

JSONメタデータファイルのアップロード

この時点で、以下のような形のJSONメタデータファイルのフォルダがマシン上にローカルで構築されているはずです:

1.json

{
"name": "My Nft #1",
"description": "This is My Nft Collection",
"image": "https://example.com/1.jpg",
"external_url": "https://example.com",
"attributes": [
{
"trait_type": "trait1",
"value": "value1"
},
{
"trait_type": "trait2",
"value": "value2"
}
],
"properties": {
"files": [
{
"uri": "https://example.com/1.jpg",
"type": "image/jpg"
}
],
"category": "image"
}
}

すべてのJSONメタデータを選択したストレージメディアにアップロードし、将来の使用のためにすべてのURIを再度ログに記録する必要があります。

コレクションアセットの作成

Core Candy Machine作成の準備の最後のステップは、Core Candy Machineがユーザーがコア Candy Machineから購入するすべてのアセットをグループ化するために使用できるCoreコレクションを作成することです。これにはmpl-coreパッケージが必要です。

Coreコレクションを作成するために必要なデータを持つために、前のステップのように画像をアップロードし、JSONメタデータを準備・アップロードする必要があります。

以下の例では、プラグインのない基本的なCoreコレクションを作成します。利用可能なプラグインのリストとより高度なCoreコレクション作成を表示するには、CoreのCollection Managementでドキュメントを参照してください。

MPL Coreコレクションを作成

import { generateSigner, umi } from '@metaplex-foundation/umi'
import { createCollectionV1 } from '@metaplex-foundation/mpl-core'
const mainnet = 'https://api.mainnet-beta.solana.com'
const devnet = 'https://api.devnet.solana.com'
const keypair = // keypairを割り当て
const umi = createUmi(mainnet)
.use(keypairIdentity(keypair)) // 選択したidentity signerを割り当て。
.use(mplCore())
const collectionSigner = generateSigner(umi)
await createCollectionV1(umi, {
collection: collectionSigner,
name: 'My Collection',
uri: 'https://example.com/my-collection.json',
}).sendAndConfirm(umi)

まとめ

この時点で、Core Candy Machineを作成するために必要なすべての準備を完了しているはずです。

  • 画像とその他のメディアファイルをアップロード。
  • JSONメタデータファイルに画像とメディアファイルのURIを割り当て。
  • JSONメタデータファイルをアップロードし、URIを保存。
  • Coreコレクションを作成。