For the complete documentation index, see llms.txt. This page is also available as Markdown.

Minting

Mint approval patterns including public mint, whitelist mint, creator-only mint, payment-gated mint, and escrow payouts

Category: Approval Patterns

Summary

Required fields for all minting approvals:

  • fromListId: "Mint"

  • overridesFromOutgoingApprovals: true (REQUIRED for ALL Mint approvals)

  • autoApproveAllIncomingTransfers: true in defaultBalances (for public-mint collections)

  • predeterminedBalances vs approvalAmounts: incompatible β€” use one or the other

  • orderCalculationMethod: MUST have exactly ONE method set to true (default: useOverallNumTransfers)

  • coinTransfers override flags: false for standard payments, true for escrow payouts

  • Mint escrow: overrideFromWithApproverAddress: true + overrideToWithInitiator: true (pays the minter from the escrow address)

  • amountTrackerId: required when using maxNumTransfers or approvalAmounts

Instructions

Minting Configuration

When configuring minting approvals, you create collection approvals with fromListId: "Mint" that allow tokens to be minted from the Mint address.

Core Structure

All minting approvals MUST have:

  • fromListId: "Mint" (required for all minting operations)

  • overridesFromOutgoingApprovals: true (REQUIRED for all Mint approvals)

  • toListId: Typically "All" or specific address list

  • initiatedByListId: Who can initiate the mint (typically "All" for public mints)

1. Payments Per Mint

Use coinTransfers in approvalCriteria to require payment:

Important:

  • overrideFromWithApproverAddress: false (standard for mint payments)

  • overrideToWithInitiator: false (standard for mint payments)

  • Payment recipient (to) should be the creator or approver address

2. Incremented Token IDs

Use predeterminedBalances.incrementedBalances to automatically increment token IDs:

CRITICAL: orderCalculationMethod Rule

  • When using predeterminedBalances, the orderCalculationMethod MUST have exactly ONE method set to true

  • Default: useOverallNumTransfers: true (sequential across all mints)

  • Cannot have zero methods true, cannot have multiple methods true

3. Auto-Deletions

Use autoDeletionOptions to automatically delete approvals after use:

4. Transfer Limits (Max Num Transfers)

Use maxNumTransfers to limit how many times minting can occur:

5. Appending Minting Approvals After Creation

To allow minting approvals to be added after collection creation:

  • Collection must have appropriate permissions (canUpdateCollectionApprovals not frozen for Mint)

  • Approval can be added via separate MsgUniversalUpdateCollection transaction

Mint Escrow (Free Mints with Payout)

The Mint Escrow Address is a special reserved address generated from the collection ID that holds Cosmos native funds. Use mintEscrowCoinsToTransfer to fund it during collection creation:

Key escrow rules:

  • overrideFromWithApproverAddress: true β€” uses mint escrow as the payer

  • overrideToWithInitiator: true β€” pays the user who initiated the mint

  • Escrow address has no private key, only collection approvals can transfer from it

Complete Example: Public Mint with Payment and Incremented IDs

Minting Gotchas

  • MUST have overridesFromOutgoingApprovals: true (required for all Mint approvals)

  • coinTransfers override flags: Should be false for standard payments, true for escrow payouts

  • predeterminedBalances vs approvalAmounts: These are incompatible β€” use one or the other

  • orderCalculationMethod: MUST have exactly ONE method set to true

  • amountTrackerId: Required when using maxNumTransfers or approvalAmounts

  • autoApproveAllIncomingTransfers: Must be true in defaultBalances for public-mint collections

Common Mistakes

  • DON'T use numbers instead of strings for amounts β€” use "1000" not 1000. All numeric values in BitBadges JSON must be string-encoded.

  • DON'T forget overridesFromOutgoingApprovals: true on Mint approvals β€” without it, the Mint address cannot send tokens and minting silently fails.

  • DON'T forget autoApproveAllIncomingTransfers: true in defaultBalances for public-mint collections β€” otherwise recipients cannot receive minted tokens.

  • DON'T forget to add prioritizedApprovals in MsgTransferTokens β€” even if empty ([]), this field must be present or the transfer fails.

  • DON'T use predeterminedBalances and approvalAmounts together β€” they are incompatible. Use one or the other.

  • DON'T set multiple methods to true in orderCalculationMethod β€” exactly ONE must be true (default: useOverallNumTransfers).

Last updated