Core Candy Machine

Core Candy Machineの作成

Last updated March 10, 2026

概要

create命令は、Solana上に新しいCore Candy Machineアカウントを初期化し、Coreコレクションにリンクして、アセットの保存と配布方法を定義します。

  • コア命令: @metaplex-foundation/mpl-core-candy-machinecreateが新しいCandy Machineアカウントをデプロイ
  • ストレージモード: プレフィックス圧縮された個別アセットデータ用のConfig Line Settings、またはシングルリビールプレースホルダー用のHidden Settingsを選択
  • ガードサポート: 作成時にガードをアタッチしてミントアクセス、支払い、スケジューリングを制御
  • 前提条件: Candy Machineを作成する前にCoreコレクションが存在する必要がある

ジャンプ先: 前提条件 · Candy Machineの作成 · 作成引数 · Config Line Settings · Hidden Settings · ガード付き作成 · 注意事項 · FAQ

前提条件

Core Candy Machineアセットをコレクション(新規または既存)に作成したい場合は、Core Candy Machineの作成時にCoreコレクションを提供する必要があります。

Candy Machineの作成

create関数は、新しいCore Candy Machineアカウントをデプロイし、Coreコレクションに割り当て、ミントに利用可能なアイテム総数を設定します。

CLI代替手段

MPLX CLIのインタラクティブウィザードを使用してCore Candy Machineを作成することもできます:

mplx cm create --wizard

ステップバイステップのガイダンス、アセット検証、自動デプロイを提供します。詳細はCLI Candy Machineドキュメントを参照してください。

Core Candy Machineの作成

// Candy Machineを作成します。
import { create } from '@metaplex-foundation/mpl-core-candy-machine'
import { generateSigner } from '@metaplex-foundation/umi'
const candyMachine = generateSigner(umi)
const createIx = await create(umi, {
candyMachine,
collection: collectionMint.publicKey,
collectionUpdateAuthority: umi.identity,
itemsAvailable: 1000,
authority: umi.identity.publicKey,
})
await createIx.sendAndConfirm(umi)

作成引数

create関数は、デプロイ時にCore Candy Machineを設定するために以下の引数を受け取ります。

Core Candy Machineの作成に使用される新しく生成されたキーペア/サイナー。

CandyMachine作成引数

名前タイプ
candyMachinesigner
authorityPda (オプション)publicKey
authority (オプション)publicKey
payer (オプション)signer
collectionpublicKey
collectionUpdateAuthoritysigner
itemsAvailablenumber
isMutableboolean
configLineSettingslink
hiddenSettingslink

authorityPdaフィールド

authorityPdaは、ミントされたアセットをコレクションに検証するために使用されるPDAです。このフィールドはオプションであり、省略された場合はデフォルトのシードに基づいて自動的に計算されます。

Authority

authorityPda: string

authorityフィールド

authorityは、Core Candy Machineの管理権限を持つウォレットまたはパブリックキーで、設定の更新やガードの管理が可能です。

authority

authority: string

payerフィールド

payerはトランザクションとレント費用を支払うウォレットです。省略された場合、現在のサイナーがデフォルトで使用されます。

authority

payer: publicKey

collectionフィールド

collectionは、Candy MachineがアセットをミントするCoreコレクションのパブリックキーです。

authority

collection: publicKey

collectionUpdateAuthorityフィールド

collectionUpdateAuthorityはコレクションの更新権限です。Candy Machineが作成されたアセットをコレクションに検証するためのデリゲートを承認できるよう、これは署名者である必要があります。

authority

collectionUpdateAuthority: signer

itemsAvailableフィールド

itemsAvailableフィールドは、Core Candy Machineからミント可能なアセットの総数を指定します。この値は作成時に設定され、Candy Machineアカウントのサイズを決定します。

itemsAvailable

itemsAvailable: number

isMutableフィールド

isMutableフィールドは、ミントされたアセットが作成後に更新可能かどうかを決定するブール値です。falseに設定すると、アセットメタデータはミント時に永久にロックされます。

isMutable

isMutable: boolean

Config Line Settingsフィールド

Config Line Settingsは、プレフィックス圧縮を使用して個別のアセット名とURIをオンチェーンに保存し、すべてのアセットにフル文字列を保存する場合と比較してCandy Machineのレントコストを大幅に削減します。

ランダム性

Config Line SettingsとHidden Settingsは相互に排他的です。一度に使用できるのは一つだけです。

アセットの「ランダム」ミントプロセスは完全に予測不可能ではなく、十分なリソースと悪意ある意図によって影響を受ける可能性があるため、リビールメカニズムにはHidden Settingsを利用することが推奨される場合があります。

アセットの名前とURIプレフィックスをCore Candy Machineに保存することで、すべてのアセットに同じ名前とURIを保存する必要がないため、保存に必要なデータが大幅に削減されます。

例えば、すべてのアセットがExample Asset #1からExample Asset #1000まで同じ命名構造を持っている場合、通常は文字列Example Asset #を1000回保存する必要があり、15,000バイトを占有します。

名前のプレフィックスをCore Candy Machineに保存し、Core Candy Machineが作成されたインデックス番号を文字列に追加することで、レント費用でこれらの15,000バイトを節約できます。

これはURIプレフィックスにも適用されます。

ConfigLineSettingsオブジェクト

ConfigLineSettings = {
prefixName: string;
nameLength: number;
prefixUri: string;
uriLength: number;
isSequential: boolean;
}

prefixNameフィールド

prefixNameはアセットの名前プレフィックスを保存し、ミント時にミントされたインデックスを名前の末尾に追加します。

アセットの命名構造がExample Asset #1の場合、プレフィックスはExample Asset #になります。ミント時にCore Candy Machineは文字列の末尾にインデックスを追加します。

nameLengthフィールド

nameLengthは、名前プレフィックスを除く、挿入される各アイテムの名前の最大長です。

例:

  • 1000アイテムを含むCandy Machine
  • 各アイテムの名前はExample Asset #X(Xは1から始まるアイテムのインデックス)

この場合、19文字を保存する必要があります。"My NFT Project #"で15文字、最高数の"1000"で4文字。prefixNameを使用する場合、nameLengthは代わりに4に削減できます。

prefixUriフィールド

prefixUriは、可変識別IDを除く、メタデータのベースURIです。

アセットのメタデータURIがhttps://example.com/metadata/0.jsonの場合、ベースメタデータURIはhttps://example.com/metadata/になります。

uriLengthフィールド

uriLengthは、prefixUriを除く、URIの最大長です。

例:

  • 20文字のベースURI https://arweave.net/
  • 最大43文字の一意の識別子

プレフィックスなしでは63文字の保存が必要になります。prefixUriを使用する場合、uriLengthhttps://arweave.net/の20文字分削減され、一意識別子の43文字になります。

isSequentialフィールド

isSequentialフィールドは、アセットが順次ミントされるか擬似ランダムにミントされるかを示します。falseに設定すると、Candy Machineは擬似ランダムな順序でミントします。Hidden Settingsはこのフィールドに関係なく常に順次ミントされます。

Config Line Settingsの例

configLineSettingsを適用してCore Candy Machineを作成する例を示します:

configLineSettingsでCore Candy Machineを作成

import { create } from '@metaplex-foundation/mpl-core-candy-machine'
const candyMachine = generateSigner(umi)
const coreCollection = publicKey('11111111111111111111111111111111')
const createIx = await create(umi, {
candyMachine,
collection: coreCollection,
collectionUpdateAuthority: umi.identity,
itemsAvailable: 5000,
configLineSettings: some({
prefixName: 'Example Asset #',
nameLength: 15,
prefixUri: 'https://example.com/metadata/',
uriLength: 29,
isSequential: false,
}),
})
await createIx.sendAndConfirm(umi)

Hidden Settingsフィールド

Hidden Settingsは、Core Candy Machineがすべてのバイヤーに同一のプレースホルダーアセットをミントするよう設定し、後日最終メタデータを割り当てる人気の「リビール」メカニズムを可能にします。Edition Guardと組み合わせることで、Core Editionの印刷もサポートします。

Config Line SettingsとHidden Settingsは相互に排他的です。Candy Machineを作成する際にどちらか一方を選択する必要があります。

Hidden Settings

hiddenSettings = {
name: string,
uri: string,
hash: Uint8Array,
}

Hidden Settingsのnameフィールド

nameはHidden Settingsが有効な状態でミントされるすべてのアセットに表示される名前です。Config Line Settingsのプレフィックスと同様に、Hidden SettingsのNameとURIには特別な変数を使用できることに注意してください。これらの変数は:

  • $ID$: これは0から始まるミントされたアセットのインデックスに置き換えられます。
  • $ID+1$: これは1から始まるミントされたアセットのインデックスに置き換えられます。

これを使用して、希望するアセットをリビールされたデータに一致させることができるようにする必要があります。

Hidden Settingsのuriフィールド

uriはHidden Settingsが有効な状態でミントされるすべてのアセットに表示されるメタデータURIです。通常、共有のプレースホルダーJSONファイルを指します。

Hidden Settingsのhashフィールド

hashはリビールデータの暗号化ハッシュ/チェックサムを保存し、最終的にリビールされたメタデータが元々コミットされた順序と一致することを誰でも検証できるようにします。これにより、ミント後にレアアセットを特定のホルダーに再配置するような改ざんを防止します。

リビールデータのハッシュ化

import crypto from 'crypto'
const revealData = [
{ name: 'Nft #1', uri: 'http://example.com/1.json' },
{ name: 'Nft #2', uri: 'http://example.com/2.json' },
{ name: 'Nft #3', uri: 'http://example.com/3.json' },
]
const string = JSON.stringify(revealData)
const hash = crypto.createHash('sha256').update(string).digest()
console.log(hash)

Hidden Settingsによる作成の例

Hidden SettingsでCandy Machineを作成

import { create } from '@metaplex-foundation/mpl-core-candy-machine'
import crypto from "crypto";
const candyMachine = generateSigner(umi)
const revealData = [
{ name: 'Nft #1', uri: 'http://example.com/1.json' },
{ name: 'Nft #2', uri: 'http://example.com/2.json' },
{ name: 'Nft #3', uri: 'http://example.com/3.json' },
]
const string = JSON.stringify(revealData)
const hash = crypto.createHash('sha256').update(string).digest()
const createIx = await create(umi, {
candyMachine,
collectionMint: collectionMint.publicKey,
collectionUpdateAuthority,
sellerFeeBasisPoints: percentAmount(10),
itemsAvailable: 5000,
hiddenSettings: {
name: "Hidden Asset",
uri: "https://example.com/hidden-asset.json",
hash,
}
})
await createIx.sendAndConfirm(umi)

ガード付きCore Candy Machineの作成

create関数はguardsフィールドを受け取り、作成時にガードルールを直接アタッチして、誰がミントできるか、いつ、どのようなコストでミントできるかを制御します。

これまでに作成したCore Candy Machineにはガードが有効になっていませんでした。利用可能なすべてのガードがわかったので、いくつかのガードを有効にして新しいCandy Machineを設定する方法を見てみましょう。

具体的な実装は使用するSDKによって異なります(以下を参照)が、基本的な考え方は、必要な設定を提供してガードを有効にすることです。設定されていないガードは無効になります。

ガード付きCore Candy Machineの作成

import { some, sol, dateTime } from '@metaplex-foundation/umi'
const createIx = await create(umi, {
// ...
guards: {
botTax: some({ lamports: sol(0.01), lastInstruction: true }),
solPayment: some({ lamports: sol(1.5), destination: treasury }),
startDate: some({ date: dateTime('2023-04-04T16:00:00Z') }),
// 他のすべてのガードは無効...
},
})
await createIx.sendAndConfirm(umi)

APIリファレンス: create, DefaultGuardSetArgs

注意事項

  • Config Line SettingsとHidden Settingsは相互に排他的です。 どちらか一方を選択する必要があります。両方をcreate命令に渡すとエラーが発生します。
  • レントコストはアイテム数とストレージモードに応じてスケールします。 短いプレフィックスを使用したConfig Line Settingsは、フル名とURIを保存するより安価です。Hidden Settingsは単一の名前、URI、ハッシュのみを保存するため、最も安価なオプションです。
  • コレクション更新権限は署名者である必要があります。 Candy Machineがコレクション上の検証済みデリゲートとして承認されるために、コレクション更新権限が作成トランザクションに署名する必要があります。
  • 擬似ランダムミント順序は暗号学的に安全ではありません。 Config Line SettingsでisSequentialfalseに設定されている場合、ミント順序はシャッフルされますが、十分なリソースで予測または影響を与えることができます。予測不可能性が重要な場合はリビールメカニズム付きのHidden Settingsを使用してください。
  • このページはCore Candy Machineを扱い、レガシーCandy Machine V3ではありません。 Core Candy MachineはCoreアセットをミントします。Metaplex Token Metadata NFTのミントについては、代わりにCandy Machine V3を参照してください。

FAQ

Config Line SettingsとHidden Settingsの違いは何ですか?

Config Line Settingsはプレフィックス圧縮を使用して個別のアセット名とURIをオンチェーンに保存し、レントを削減します。Hidden Settingsはすべてのバイヤーに同一のプレースホルダーアセットをミントし、後日リビールメカニズムを可能にします。一方のみがCandy Machineで使用可能で、相互に排他的です。

Core Candy Machineの作成にはどれくらいのコストがかかりますか?

レントコストはアイテム数と選択したストレージモードによって異なります。短いプレフィックスを使用したConfig Line Settingsは、繰り返しのプレフィックスを一度だけ保存するため、レントを大幅に削減します。Hidden Settingsは、Candy Machineが保持するアイテム数に関係なく、単一の名前、URI、SHA-256ハッシュのみを保存するため、最も安価です。

Core Candy Machineの作成後にガードを追加できますか?

はい。別のCandy Guardアカウントを作成し、既存のCore Candy Machineのミント権限としていつでも設定できます。また、便宜上create命令で直接ガードを渡すこともできます。

Candy Machineを作成する前に既存のCoreコレクションが必要ですか?

はい。create命令にはCoreコレクションアドレスが必要です。コレクション更新権限がトランザクションに署名して、Candy Machineがミントされたアセットをコレクションに追加する検証済みデリゲートとして登録できるようにする必要があります。

Config Line SettingsでisSequentialをfalseに設定するとどうなりますか?

Candy Machineはインデックス順ではなく擬似ランダムな順序でアセットをミントします。このランダム性は暗号学的に安全ではなく、十分なリソースで影響を与えることができます。予測不可能性が重要な場合は、代わりにリビールメカニズム付きのHidden Settingsを使用してください。