Available Guards

Token Payment Guard

Overview

The Token Payment guard allows minting by charging the payer some tokens from a configured mint account. Both the number of tokens and the destination address can also be configured.

If the payer does not have the required amount of tokens to pay, minting will fail.

Candy Machine

Owner: Candy Machine Core Program

Candy Guard

Owner: Candy Guard Program

Guards
Token Payment
- Amount
- Token Mint
- Destination ATA
...

Mint Account

Owner: Token Program

Token Account

Owner: Token Program

Destination Wallet

Owner: System Program

Mint from

Candy Guard Program

Access Control

Mint from

Candy Machine Program

Mint Logic

NFT

Guard Settings

The Token Payment guard contains the following settings:

  • Amount: The number of tokens to charge the payer.
  • Mint: The address of the mint account defining the SPL Token we want to pay with.
  • Destination Associated Token Address (ATA): The address of the associated token account to send the tokens to. We can get this address by finding the Associated Token Address PDA using the Token Mint attribute and the address of any wallet that should receive these tokens.

Set up a Candy Machine using the Token Payment guard

Note that, in this example, we’re using the current identity as the destination wallet.

import { findAssociatedTokenPda } from "@metaplex-foundation/mpl-toolbox";
create(umi, {
  // ...
  guards: {
    tokenPayment: some({
      amount: 300,
      mint: tokenMint.publicKey,
      destinationAta: findAssociatedTokenPda(umi, {
        mint: tokenMint.publicKey,
        owner: umi.identity.publicKey,
      }),
    }),
  },
});

API References: create, TokenPayment

Mint Settings

The Token Payment guard contains the following Mint Settings:

  • Mint: The address of the mint account defining the SPL Token we want to pay with.
  • Destination Associated Token Address (ATA): The address of the associated token account to send the tokens to.

Note that, if you’re planning on constructing instructions without the help of our SDKs, you will need to provide these Mint Settings and more as a combination of instruction arguments and remaining accounts. See the Candy Guard’s program documentation for more details.

Mint with the NFT Burn Guard

You may pass the Mint Settings of the Token Payment guard using the mintArgs argument like so.

mintV2(umi, {
  // ...
  mintArgs: {
    tokenPayment: some({
      mint: tokenMint.publicKey,
      destinationAta,
    }),
  },
});

API References: mintV2, TokenPaymentMintArgs

Route Instruction

The Token Payment guard does not support the route instruction.

Previous
Token Gate