Core Candy Machine
更新 Core Candy Machine
Last updated March 10, 2026
概要
updateCandyMachine 函数在初始创建后修改 Core Candy Machine 的链上设置,而 updateCandyGuard 允许您更改控制铸造访问的守卫。
- 更新 Candy Machine 数据字段,如
itemsAvailable、isMutable、Config Line Settings 和 Hidden Settings - 使用
setMintAuthority将铸造权限重新分配给新钱包 - 使用
updateCandyGuard修改守卫规则——注意每次更新都会替换整个 guards 对象 - 使用
wrap和unwrap手动关联或取消关联 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
| 名称 | 类型 | 描述 |
|---|---|---|
| candyMachine | publicKey | 要更新的 Candy Machine 的公钥 |
| data | data | 包含更新设置的对象 |
一旦铸造开始,某些设置将无法更改。始终在第一次铸造发生之前完成配置。
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 关联,以便在铸造期间强制执行守卫规则。解包取消关联,移除守卫强制执行。大多数项目始终保持守卫处于包装状态。
