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, theorderCalculationMethodMUST have exactly ONE method set totrueDefault:
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