A die per class. A press per mint.
Custom token classes are fungible units issued by an issuer_did under a controllable supply policy and a transfer-control policy. Five transactions cover the full lifecycle: create the class, mint into supply, transfer hand-to-hand, burn back to slug, and re-engrave the policy. MINT, BITS, and SIG are reserved native tokens; everything else is a custom class.
Cut
CreateTokenClass cuts the die.
A new class is registered at token_id with a ticker, decimals, an issuer_did, a controller_did, a supply_policy, and an optional transfer_policy. Once registered, ticker and decimals are immutable — the die is steel. MINT, BITS, and SIG are reserved native tokens and cannot be created here.
Strike
MintToken strikes coins.
The press drives the die into a blank disc. Amount (u128) is issued to recipient_did under the class's supply policy. Fixed-supply classes reject mints after the cap; capped classes reject anything that would overflow the ceiling. Every strike is one signed transaction.
Transfer
TransferToken passes them hand to hand.
Units move from signer to recipient_did under the class's transfer_policy. Allowlists, freezes, and controller co-signatures all live inside that policy. An optional memo is recorded with the move. The ledger is class-keyed — there is no implicit conversion between token classes.
Burn
BurnToken returns them to the slug.
The owner sends the units back into the melt furnace. Amount is destroyed from owner_did and the class's circulating supply contracts on the same block. Burns are irrevocable — the reduction is recorded against the supply ledger immediately under MACA.
Engrave
SetTokenPolicy re-engraves the rim.
The controller updates supply_policy or transfer_policy. Only the recorded controller_did may call it. Every change is a signed, height-stamped record — every rim engraving is a public fact. The ticker and decimals stay fixed; the policy is the part that changes.
The five strike transactions
Every operation is one signed strike.
Each transaction is a signed, height-stamped record. Decimals and ticker are immutable from CreateTokenClass onward. Supply policy and transfer policy are the parts that change — and only the controller_did may change them.
Transaction Types
5
Supply Range
u128
Decimals Field
u8
Issuer / Controller
DID
Reserved native tokens
MINT, BITS, SIG — handled by consensus.
MINT is the mainnet unit of account and validator bond currency. BITS is the Evolve canary unit. SIG is the public testnet unit. These three are minted, burned, and accounted for by the consensus layer — they are not custom token classes and cannot be created through CreateTokenClass.
Policies are first-class records
Every supply or transfer policy change is signed.
SetTokenPolicy updates supply_policy or transfer_policy under the recorded controller_did. The ticker and decimals stay fixed; the policy is the part that changes. Allowlists, freezes, controller co-signature — all live inside the policy and are public on-chain facts.
Cut a die. Run your ledger.
Settlement units, org credits, redeemable receipts, policy-bounded stablecoins — five operations, one signed transaction each. MINT, BITS, and SIG stay reserved. The rest of the design space is yours.