Core Candy Machine

更新 Core Candy Machine

Last updated March 10, 2026

概要

updateCandyMachine 函数在初始创建后修改 Core Candy Machine 的链上设置,而 updateCandyGuard 允许您更改控制铸造访问的守卫

  • 更新 Candy Machine 数据字段,如 itemsAvailableisMutableConfig Line SettingsHidden Settings
  • 使用 setMintAuthority 将铸造权限重新分配给新钱包
  • 使用 updateCandyGuard 修改守卫规则——注意每次更新都会替换整个 guards 对象
  • 使用 wrapunwrap 手动关联或取消关联 Candy Guard 账户 {.lead}

更新 Core Candy Machine

import {
updateCandyMachine
} from '@metaplex-foundation/mpl-core-candy-machine'
const candyMachine = generateSigner(umi)
await updateCandyMachine(umi, {
candyMachine,
data: {
itemsAvailable: 3333;
isMutable: true;
configLineSettings: none();
hiddenSettings: none();
}
}).sendAndConfirm(umi)

更新函数参数

updateCandyMachine 函数接受 Candy Machine 公钥和一个包含要修改字段的 data 对象。

更新 Core Candy Machine Args

名称类型描述
candyMachinepublicKey要更新的 Candy Machine 的公钥
datadata包含更新设置的对象

一旦铸造开始,某些设置将无法更改。始终在第一次铸造发生之前完成配置。

Candy Machine Data 对象

data 对象定义了 Core Candy Machine 的可变设置。将此对象传递给 updateCandyMachine 并包含您要更改的字段。

Candy Machine Data Object

data = {
itemsAvailable: number | bigint;
isMutable: boolean;
configLineSettings: OptionOrNullable<ConfigLineSettingsArgs>;
hiddenSettings: OptionOrNullable<HiddenSettingsArgs>;
}

分配新权限

setMintAuthority 函数将 Core Candy Machine 的铸造权限转移到新的钱包地址。当前权限和新权限都必须签署交易。

export declare type SetMintAuthorityInstructionAccounts = { /Candy Machine 账户。 */ candyMachine: PublicKey | Pda; / Candy Machine 权限 / authority?: Signer; /** 新的 candy machine 权限/ mintAuthority: Signer; };

为 Core Candy Machine 分配新权限

import { setMintAuthority } from '@metaplex-foundation/mpl-core-candy-machine'
const candyMachine = publicKey('11111111111111111111111111111111')
const newAuthority = publicKey('22222222222222222222222222222222')
await setMintAuthority(umi, {
candyMachine,
mintAuthority: newAuthority,
}).sendAndConfirm(umi)

为 Core Candy Machine 分配新权限时,您还必须将集合资产更新为使用相同的更新权限。Candy Machine 权限和集合更新权限必须匹配才能成功铸造。

更新 Candy Guards

updateCandyGuard 函数替换 Candy Guard 账户上的整个守卫配置。使用它来更改铸造价格、调整开始日期、启用新守卫或禁用现有守卫。

您可以通过提供设置来启用新的守卫,或通过给它们空设置来禁用当前的守卫。

更新守卫

您可以用创建 Core Candy Machine 守卫的相同方式更新它们。也就是说,通过在 updateCandyGuard 函数的 guards 对象中提供它们的设置。任何设置为 none() 或未提供的守卫将被禁用。

整个 guards 对象将被更新,这意味着它将覆盖所有现有的守卫。请确保为您想要启用的所有守卫提供设置,即使它们的设置没有变化。先获取 candy guard 账户以回退到其当前的守卫。

import { some, none, sol } from '@metaplex-foundation/umi'
const candyGuard = await fetchCandyGuard(umi, candyGuardId)
await updateCandyGuard(umi, {
candyGuard: candyGuard.publicKey,
guards: {
...candyGuard.guards,
botTax: none(),
solPayment: some({ lamports: sol(3), destination: treasury }),
},
groups: [
// 如果使用组,在这里添加数据,否则为空
]
})

API 参考: updateCandyGuard, CandyGuard, DefaultGuardSetArgs

包装和解包 Candy Guard 账户

包装将 Candy Guard 与 Core Candy Machine 关联,以便在铸造期间强制执行守卫规则。解包取消关联。大多数项目在创建时就将两个账户一起创建,但您可以在需要时独立管理它们。

您首先需要分别创建两个账户并手动关联/取消关联它们。

关联和取消关联 Candy Machine 的守卫

Umi 库的 create 函数已经负责为创建的每个 Candy Machine 账户创建和关联一个全新的 Candy Guard 账户。

但是,如果您想分别创建它们并手动关联/取消关联它们,以下是您的操作方式。

import {
some,
percentAmount,
sol,
dateTime
} from '@metaplex-foundation/umi'
import {
createCandyMachine,
createCandyGuard,
findCandyGuardPda,
wrap,
unwrap
} from '@metaplex-foundation/mpl-core-candy-machine'
// 创建没有 Candy Guard 的 Candy Machine。
const candyMachine = generateSigner(umi)
await createCandyMachine({
candyMachine,
tokenStandard: TokenStandard.NonFungible,
collectionMint: collectionMint.publicKey,
collectionUpdateAuthority: umi.identity,
itemsAvailable: 100,
sellerFeeBasisPoints: percentAmount(1.23),
creators: [
{
address: umi.identity.publicKey,
verified: false,
percentageShare: 100
},
],
configLineSettings: some({
prefixName: 'My NFT #',
nameLength: 3,
prefixUri: 'https://example.com/',
uriLength: 20,
isSequential: false,
}),
}).sendAndConfirm(umi)
// 创建 Candy Guard。
const base = generateSigner(umi)
const candyGuard = findCandyGuardPda(umi, { base: base.publicKey })
await createCandyGuard({
base,
guards: {
botTax: { lamports: sol(0.01), lastInstruction: false },
solPayment: { lamports: sol(1.5), destination: treasury },
startDate: { date: dateTime('2022-10-17T16:00:00Z') },
},
}).sendAndConfirm(umi)
// 将 Candy Guard 与 Candy Machine 关联。
await wrap({
candyMachine: candyMachine.publicKey,
candyGuard,
}).sendAndConfirm(umi)
// 取消它们的关联。
await unwrap({
candyMachine: candyMachine.publicKey,
candyGuard,
}).sendAndConfirm(umi)

API 参考: createCandyMachine, createCandyGuard, wrap, unwrap

注意事项

  • 某些 Candy Machine 设置——包括 itemsAvailable——一旦第一个物品被铸造就会锁定。在铸造开始前完成所有数据字段的设置。
  • 调用 updateCandyGuard 会替换整个 guards 对象。始终先获取当前守卫状态并展开现有值再应用更改,否则您将无意中禁用活跃的守卫。
  • Core Candy Machine 权限和集合资产更新权限必须匹配。如果您使用 setMintAuthority 重新分配权限,也要更新集合资产权限。
  • 包装和解包与守卫创建是分开的。Candy Guard 在被包装(关联)到 Candy Machine 之前对铸造没有影响。

常见问题

铸造开始后可以更改 itemsAvailable 数量吗?

不可以。某些 Core Candy Machine 设置,包括 itemsAvailable,一旦第一个物品被铸造就会锁定。请在任何铸造发生之前更新这些字段。

更新 Candy Guards 会替换所有现有的守卫设置吗?

是的。updateCandyGuard 函数会覆盖整个 guards 对象。您必须包含所有想要保留的守卫,即使它们的设置没有变化。先获取当前守卫账户并将其值展开到您的更新调用中。

重新分配 Candy Machine 权限时是否需要更新集合权限?

是的。Core Candy Machine 权限和集合资产更新权限必须匹配。调用 setMintAuthority 后,将集合资产更新为使用相同的新权限。

包装和解包 Candy Guard 有什么区别?

包装将 Candy Guard 账户与 Core Candy Machine 关联,以便在铸造期间强制执行守卫规则。解包取消关联,移除守卫强制执行。大多数项目始终保持守卫处于包装状态。