> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metalntwx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Token and Account Model

> How MIP20 tokens hold public balances, control supply, apply account policy, and qualify for gas payment

MIP20 is Metal's canonical fungible, balance-based token interface. A MIP20
token represents an economic asset through public balances held by EVM
addresses. It supports ERC-20 transfers and allowances, ERC-3009 transfer
authorizations, and funds reserved in MIP20 holds. Metal can also charge
transaction fees from the same MIP20 balance.

[Send and Receive Policies](https://docs.metalntwx.com/learn/mip20/handlers-and-policy.md) explains the rules governing
incoming payments and outgoing spending.

## Balances belong to addresses

Each MIP20 balance belongs to an EVM address and is visible in public state.
That address may be controlled by a signing key or by a smart contract. In
either case, `balanceOf(address)` returns its spendable balance. Funds reserved in MIP20
holds move to escrow at the token contract and remain attributed to the owner
through `heldTotalOf(address)`.

## What makes a token MIP20

Metal recognizes a token as MIP20 when its address appears in the
`MIP20Factory.isMIP20` mapping. The MIP20 allowlist gives transaction admission
and execution a common way to identify tokens whose balance storage supports
protocol gas accounting.

Factory deployment is permissionless. Calling `MIP20Factory.deployMIP20`
creates a `MetalToken` and adds its address to the MIP20 allowlist in the same
transaction. There is no separate registration or approval step.

Metal also starts with fixed-supply MIP20 gas tokens included in genesis.
Their code and initial state are inserted directly, and their addresses are
already present in the MIP20 allowlist. Application-created MIP20 tokens use
factory deployment instead.

An application can deploy another ERC-20 contract, but Metal does not treat it
as MIP20. It cannot pay gas because the execution layer cannot rely on its
storage layout. The MIP20 allowlist establishes protocol compatibility. It
makes no claim about an asset's issuer, reserves, redemption terms, or legal
status.

## Supply authority

The MIP20 deployer becomes the token owner of a factory-deployed `MetalToken`.
The initial holder is a separate constructor choice and need not be the token
owner.

The token owner can mint additional units, burn tokens from its own balance
and transfer ownership. MIP20 imposes no supply cap or asset-governance process.
The owner and any system controlling it therefore form part of the asset's trust
boundary.

Genesis gas tokens use the base fixed-supply MIP20 implementation without the
`MetalToken` ownership, public mint, or public burn functions.

## Gas-token eligibility

Metal has no native gas asset. Standard Ethereum envelopes pay with the
default gas token, while a Metal `0x7f` envelope selects a MIP20 token. In both
cases, the transaction signer pays from its spendable balance in that token.

The execution layer debits and refunds the balance by reading and writing the
mandated MIP20 balance slot directly. Gas accounting bypasses contract calls,
allowances, receive policy, and token transfer events. The final fee moves
from the signer to the block's fee recipient without changing the token's
total supply.

See [Fees](https://docs.metalntwx.com/build/prepare/estimate-and-record-fees.md) for admission, pricing,
refund, and validator-credit behavior. The exact factory, storage, and
contract surfaces are in the
[MIP20 reference](https://docs.metalntwx.com/reference/assets-and-payments/mip20.md).

## Relationship to MIP410

MIP20 holds the public asset balance that backs MIP410 notes. Shielding moves
MIP20 value into the MIP410 shielded pool, and unshielding releases it to a
public destination subject to receive policy. Private ownership inside the
pool is represented by shielded notes rather than MIP20 balances at each note
holder's address.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.