Core Candy Machine

Updating a Core Candy Machine

Updating a Core Candy Machine

import { 
} from '@metaplex-foundation/mpl-core-candy-machine'

const candyMachine = generateSigner(umi)

await updateCandyMachine(umi, {
  data: {
    itemsAvailable: 3333;
    isMutable: true;
    configLineSettings: none();
    hiddenSettings: none();


Update Core Candy Machine Args

Available arguments that can be passed into the updateCandyMachine function.


Some settings are unabled to be changed/updated once minting has started.


Candy Machine Data Object

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

Assigning a new Authority to the Candy Machine

There may be scenarios where you may wish to transfer the Candy Machine authority across to a new address. This can be achieved with the setMintAuthority function.

export declare type SetMintAuthorityInstructionAccounts = { /** Candy Machine account. */ candyMachine: PublicKey | Pda; /** Candy Machine authority _/ authority?: Signer; /** New candy machine authority _/ mintAuthority: Signer; };

Assign New Authority to Core Candy Machine

import { 
} from '@metaplex-foundation/mpl-core-candy-machine'

const candyMachine = publicKey('11111111111111111111111111111111')
const newAuthority = publicKey('22222222222222222222222222222222')

await setMintAuthority(umi, {
  mintAuthority: newAuthority,

When assigning a new Authority to a Core Candy Machine you will also have to update the Collection Asset to the same update Authority.

Updating guards

Did you set something wrong in your guards? Did you change your mind about the mint price? Do you need to delay the start of the mint of a little? No worries, guards can easily be updated following the same settings used when creating them.

You can enable new guards by providing their settings or disable current ones by giving them empty settings.

Update guards

You may update the guards of a Core Candy Machine the same way you created them. That is, by providing their settings inside the guards object of the updateCandyGuard function. Any guard set to none() or not provided will be disabled.

Note that the entire guards object will be updated meaning it will override all existing guards!

Therefore, make sure to provide the settings for all guards you want to enable, even if their settings are not changing. You may want to fetch the candy guard account first to fallback to its current guards.

import { some, none, sol } from '@metaplex-foundation/umi'

const candyGuard = fetchCandyGuard(umi, candyMachine.mintAuthority)
await updateCandyGuard(umi, {
  candyGuard: candyGuard.publicKey,
  guards: {
    botTax: none(),
    solPayment: some({ lamports: sol(3), destination: treasury }),

API References: updateCandyGuard, CandyGuard, DefaultGuardSetArgs

Wrapping and unwrapping Candy Guard accounts manually

So far we’ve managed both Core Candy Machine and Core Candy Guard accounts together because that makes the most sense for most projects.

However, it is important to note that Core Candy Machines and Core Candy Guards can be created and associated in different steps, even using our SDKs.

You will first need to create the two accounts separately and associate/dissociate them manually.

Associate and dissociate guards from a Candy Machine

The create function of the Umi library already takes care of creating and associating a brand new Candy Guard account for every Candy Machine account created.

However, if you wanted to create them separately and manually associate/dissociate them, this is how you’d do it.

import { 
} from '@metaplex-foundation/umi'
import { 
} from '@metaplex-foundation/mpl-core-candy-machine'

// Create a Candy Machine without a Candy Guard.
const candyMachine = generateSigner(umi)
await createCandyMachine({
  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: '',
    uriLength: 20,
    isSequential: false,

// Create a Candy Guard.
const base = generateSigner(umi)
const candyGuard = findCandyGuardPda(umi, { base: base.publicKey })
await createCandyGuard({
  guards: {
    botTax: { lamports: sol(0.01), lastInstruction: false },
    solPayment: { lamports: sol(1.5), destination: treasury },
    startDate: { date: dateTime('2022-10-17T16:00:00Z') },

// Associate the Candy Guard with the Candy Machine.
await wrap({
  candyMachine: candyMachine.publicKey,

// Dissociate them.
await unwrap({
  candyMachine: candyMachine.publicKey,

API References: createCandyMachine, createCandyGuard, wrap, unwrap

Inserting Items