Skip to content

Address Format

Enrico Rubboli edited this page Apr 10, 2026 · 1 revision

Mintlayer Address Format

Mintlayer addresses use Bech32m encoding (BIP 350), the same standard used by Bitcoin for SegWit v1+ addresses. A Mintlayer address string has the form:

<prefix>1<bech32m-encoded-data>
  • Prefix (Human-Readable Part / HRP): identifies the network and address type
  • 1: separator character
  • Bech32m-encoded data: the serialized address payload with a built-in checksum

The checksum catches typos and transcription errors. Addresses are case-insensitive (conventionally lowercase).


Address Types

Mintlayer has several address types, each with its own prefix. The most common one for sending and receiving coins is the public key hash address.

Standard Destination Addresses

Type Description Mainnet prefix Testnet prefix
PublicKeyHash Hash of a public key. The standard address type for sending and receiving. mtc tmt
PublicKey A full public key (used in specific contexts, e.g. staking keys). mptc tpmt
ScriptHash Hash of a spending script. mstc tstc
ClassicMultisig Hash of a multisig script. mmtc tmtc

Other Identifiers

These are encoded in the same Bech32m format and appear in wallet and staking contexts:

Type Description Mainnet prefix Testnet prefix
VRF Public Key Verifiable Random Function key used for staking mvrfpk tvrfpk
Pool ID Identifier for a staking pool mpool tpool
Delegation ID Identifier for a delegation mdelg tdelg
Token ID Identifier for a fungible token mmltk tmltk
Order ID Identifier for a DEX order mordr tordr

Network Prefixes

All prefixes by network:

Type Mainnet Testnet Regtest Signet
PublicKeyHash mtc tmt rmt smt
PublicKey mptc tpmt rpmt spmt
ScriptHash mstc tstc rstc sstc
ClassicMultisig mmtc tmtc rmtc smtc
VRF Public Key mvrfpk tvrfpk rvrfpk svrfpk
Pool ID mpool tpool rpool spool
Delegation ID mdelg tdelg rdelg sdelg
Token ID mmltk tmltk rmltk smltk
Order ID mordr tordr rordr sordr

You can always tell which network an address belongs to from its prefix. Mainnet addresses start with m, testnet addresses with t.


Examples

# Mainnet public key hash address
mtc1qyerxzjxfpz9zy2n7dfs73yvhglyfy5f8hkmmfu0

# Testnet public key hash address
tmt1q8lhgxhycm8e6yk9zpnetdwtn03h73z70c3ha4l7

# Mainnet token ID
mmltk1e7egscactagl7e3met67658hpl4vf9ux0ralaculjvnzhtc4qmsqv9y857

# Mainnet staking pool ID
mpool1zg7yccqqjlz38cyghxlxyp5lp36vwecu2g7gudrf58plzjm75tzq99fr6v

# Mainnet VRF public key
mvrfpk1qqyxcl4tc6y9amf2vmv6sgu8x5jwqlxawx73vhgemkduag9c8ku57m03mze

Generating Addresses

The wallet-address-generator tool can generate addresses offline without running a node:

wallet-address-generator --network mainnet
wallet-address-generator --network testnet -n 5

Inside wallet-cli, use:

address-new          # generate a new receiving address
address-show         # list all existing receiving addresses

Technical Notes

  • Encoding: Bech32m (BIP 350). Unlike legacy Bech32 (BIP 173), Bech32m has a stronger checksum and is required for all Mintlayer addresses.
  • Payload: The data portion is a SCALE-encoded serialization of the underlying object (e.g. a 20-byte public key hash for PublicKeyHash addresses).
  • Public key hash: computed as BLAKE2b → RIPEMD-160, resulting in a 20-byte hash.
  • Case: Addresses are always lowercase. Mixed-case inputs are rejected.
  • Validation: An address is invalid if the Bech32m checksum fails, if the prefix does not match the expected network, or if the payload cannot be deserialized.

Clone this wiki locally