Skip to main content

Cardano Mint and Burn

Tracks all the instances of a mint or burn of set of policy IDs.

If you're looking to track these assets after they've been minted, use the delayed state primitive.

Example​

extensions:
- name: "CARDANO-MINT-BURN"
type: cardano-mint-burn
policyIds:
- "0fc891fb7368d3b7c7b88815c203fda0d6862b0f1d797222672e91fe"
- "0fc891fb7368d3b7c7b88815c203fda0d6862b0f1d797222672e91ff"
startSlot: 722300
stopSlot: 733216
scheduledPrefix: cmb
network: CardanoNetworkConfigEntryName

Meaning​

  • startSlot is required and means that only mints events after that slot (exclusive) will be considered.
  • stopSlot is optional, and it stops the indexing at that point.
  • policyIds is an array with the collections to index.

Paima Concise format​

The scheduled input for each event is of the following form.

cardanoMint = cmb|txId|metadata|assets

It can be parsed with a rule of the form:

const cardanoMint: ParserRecord<CardanoMint> = {
txId: PaimaParser.NCharsParser(0, 64),
metadata: PaimaParser.OptionalParser(null, PaimaParser.RegexParser(/[a-f0-9]*/)),
assets: PaimaParser.Json(),
};

interface AssetAmount {
policyId: string;
assetName: string;
amount: string;
}
export interface CardanoMint {
txId: string;
metadata: string | null;
assets: { [policyId: string]: { [assetName: string]: string } };
inputAddresses: { [address: string]: AssetAmount[] }
outputAddresses: { [address: string]: AssetAmount[] }
}
  • The metadata field is hex encoded (if any), and it's the metadata in binary form.
  • The assets field has the minted or burned assets. The difference between a mint and a burn is in the sign of amount when interpreted as a number.
  • The inputAddresses represents addresses who at least partially burned the tracked tokens
  • The outputAddresses represents addresses who at least partially minted the tracked tokens

Detecting who minted and who burned​

Some key facts about Cardano transactions to help understand how to parse this information:

  • Cardano transactions can contain multiple mints & burns of different tokens in the same transaction
  • Different addresses can mint/burn tokens in the same transactions (txs have multiple inputs & outputs)
  • The same address can mint/burn multiple times in the same transaction (different inputs or different outputs)
  • All mints & burns share the same metadata field

A consequence of this is that not all the token supply found in the input may have been burned. In other words, the following transaction is possible:

  1. inputAddresses contains 50 token X
  2. assets contains -30 token X
  3. outputAddresses contains 20 token X