Core Candy Machine
Core Candy Machineの作成
Last updated March 10, 2026
概要
create命令は、Solana上に新しいCore Candy Machineアカウントを初期化し、Coreコレクションにリンクして、アセットの保存と配布方法を定義します。
- コア命令:
@metaplex-foundation/mpl-core-candy-machineのcreateが新しい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作成引数
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を使用する場合、uriLengthはhttps://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で
isSequentialがfalseに設定されている場合、ミント順序はシャッフルされますが、十分なリソースで予測または影響を与えることができます。予測不可能性が重要な場合はリビールメカニズム付きの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を使用してください。
