logoSolana Program

Confidential Mint and Burn

Keep a Token-2022 mint's supply confidential by minting and burning directly against confidential balances.

The base confidential balances feature keeps individual account balances and transfer amounts private, but the mint's total supply is still public: tokens enter the confidential system through a public deposit and leave through a public withdraw, both of which move a cleartext amount between the public and confidential balances.

For some issuers that is not enough. A stablecoin or tokenized asset issuer may want the amount they mint and burn, and therefore the total supply in circulation, to stay private as well. The ConfidentialMintBurn extension makes this possible.

What it does

When a mint enables the confidential mint/burn extension, the authority mints new tokens directly into a recipient's confidential balance and burns tokens directly from a confidential balance. The amounts are encrypted, and the mint tracks an encrypted total supply rather than a public one.

Because issuance and redemption now happen entirely inside the confidential system, the public conversion path is disabled: deposit and withdraw instructions are rejected on a mint that has this extension. Tokens only ever exist confidentially, so there is no cleartext supply to observe.

Like the other confidential extensions, it must be initialized at mint creation and cannot be added later.

Mint state

The extension stores the supply confidentially on the mint:

  • Confidential supply: the encrypted total supply, encrypted under the mint's supply ElGamal public key.
  • Decryptable supply: an authenticated symmetric (AES) ciphertext of the supply, so the authority can read the current supply efficiently without solving a discrete log.
  • Supply ElGamal public key: the key the confidential supply is encrypted under.
  • Pending burn: burned amounts that have not yet been aggregated into the confidential supply (see applying pending burns).

Operations

All amount-carrying operations require zero-knowledge proofs, supplied either in the same transaction or pre-verified into proof context state accounts, exactly as with confidential transfers.

Minting

The mint authority mints an encrypted amount into a recipient's confidential pending balance. The recipient applies their pending balance to make the funds available, just like receiving a confidential transfer. The minted amount is homomorphically added to the encrypted supply.

Burning

A holder burns an encrypted amount from their confidential available balance. The burned amount accumulates in the mint's pending burn field rather than being subtracted from the supply immediately.

Applying pending burns

Burns are aggregated into the confidential supply in a separate step. The ApplyPendingBurn instruction folds the accumulated pending burn into the confidential supply, mirroring the pending/available model used for account balances. This keeps burning cheap and lets the supply be reconciled periodically.

Rotating the supply key

The supply encryption key can be rotated with RotateSupplyElGamalPubkey, which re-encrypts the confidential supply under a new ElGamal key and proves, with a ciphertext-ciphertext equality proof, that the encrypted value did not change. The pending burn must be zero before rotating.

Updating the decryptable supply

UpdateDecryptableSupply refreshes the AES ciphertext of the supply, for example after the authority changes the symmetric key used to read it.

Closing the mint

A mint with this extension can only be closed once its confidential supply is the zero ciphertext. If the supply encrypts zero but is not an identically-zero ciphertext, rotate the supply key first to normalize it, then close the mint.

Relationship to permissioned burn

The permissioned burn extension also has a confidential burn path. When both extensions are present, a confidential burn must additionally be co-signed by the mint's configured permissioned burn authority.

On this page