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 SIGIL 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 SIGIL 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, SIGIL — handled by consensus.
MINT is the protocol's native unit of account and the bond currency for validators. BITS is the gas-metering subunit. SIGIL is the identity-bonded reputation token. 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 SIGIL stay reserved. The rest of the design space is yours.