Common fields
Every BRC-20 inscription must be valid JSON. Two fields appear in all operations:Protocol identifier. Must equal
"brc-20".Token ticker symbol. Typically 3–6 characters. See namespace isolation for length rules.
Operations
Deploy
Creates a new token definition. The first valid deploy inscription for a ticker becomes the canonical definition of that token.Operation type. Must equal
"deploy".Ticker symbol for the new token.
Maximum token supply as a stringified integer. Under self-mint semantics,
"0" means unlimited supply.Maximum amount mintable per individual mint inscription. Optional.
Set to
"true" to enable restricted issuance mode (deployer-only minting). Any other value or omission defaults to public minting.Mint
Issues token units from a previously deployed token, up to the defined supply cap.Operation type. Must equal
"mint".Ticker of the token to mint.
Amount to mint as a stringified integer. Must not exceed the
lim value defined in the deploy inscription.Transfer
Moves token balance to another address. BRC-20 transfers are a two-step process:- Inscribe a transfer inscription on a satoshi (this locks the specified balance).
- Send that satoshi (ordinal) to the recipient’s Taproot address.
Operation type. Must equal
"transfer".Ticker of the token to transfer.
Amount to transfer as a stringified integer.
Transfers require the recipient to have a Taproot address (
bc1p...). Sending to non-Taproot addresses is not supported.Self-mint
Overview
The default BRC-20 issuance model is permissionless: once a token is deployed, anyone may mint until the supply cap is reached. Self-minting is a restricted issuance mode where only the deployer is allowed to mint tokens after deployment. This is achieved via an explicit opt-in flag on the deploy inscription. Indexers enforce the parent inscription requirement.Enabling self-mint
Add"self_mint": "true" to the deploy inscription:
- Standard deploy (public mint)
- Self-mint deploy
self_mint is enabled:
- All subsequent mint inscriptions must use the deploy inscription as their parent. Mint inscriptions without this parent relationship are invalid.
max=0is redefined to mean unlimited supply, bounded only by indexer max-uint64 constraints.
Unlimited supply via max=0
max still represents the global mint ceiling. BRC-20 tokens cannot be destroyed, and transfers to unspendable addresses do not reduce mint capacity.Namespace isolation
To avoid collisions with existing assets and legacy indexers, tickers are segmented by byte length:| Ticker length | Rules | Self-mint support |
|---|---|---|
| 4 bytes | Legacy namespace, unchanged | No |
| 5 bytes | Extended namespace | Yes |
| 6 bytes | Extended namespace with snipe protection | Yes |
6-byte tickers and snipe protection
The BRC-20 ticker namespace was extended to support 6-byte tickers with Phase 1 of BRC2.0, while preserving compatibility with existing 4- and 5-byte semantics.Ticker constraints
6-byte tickers must:- Be exactly 6 characters
- Match the regex
^[A-Za-z0-9-]{6}$ - Be treated case-insensitively
-, or incorrect length. 4- and 5-byte tickers remain unchanged and unaffected.
Snipe protection via pre-deploy commitment
To prevent ticker sniping and front-running, 6-byte tickers require a pre-deploy commitment before the actual deploy. Pre-deploy inscriptions commit to a ticker without revealing it by inscribing a hash:pkscript, preventing replay or theft.
Step 1: Pre-deploy inscription
Must equal
"predeploy".sha256(sha256(ticker_bytes + salt_bytes + deployer_pkscript)) encoded as hex.Step 2: Deploy inscription
The same salt used to compute the pre-deploy hash. Indexers recompute and validate the commitment.
Deployment rules
- The deploy inscription must be a child of the pre-deploy inscription.
- The deploy must occur at least 3 blocks after the pre-deploy.
- Indexers must reject deploys that violate ordering or hash validation.
- Pre-deploy inscriptions do not expire and remain valid if transferred.
Pre-deploy inscriptions are accepted starting 10 blocks before the 6-byte namespace activation height (
912690).Required tooling
To create or interact with BRC-20 inscriptions:- Inscription platforms: UniSat, Ordinals Wallet, LooksOrdinal
- Indexers / explorers: Ordiscan, BRC-20.io
Limitations
Off-chain validation
Off-chain validation
The Bitcoin blockchain does not enforce BRC-20 rules. All validation — determining the canonical deploy, mint, and transfer history — is performed by off-chain indexers. Token state is only as reliable as the indexers interpreting the inscriptions.
Taproot addresses required
Taproot addresses required
Transfers require Taproot-compatible addresses (
bc1p...). Sending to non-Taproot addresses is not supported by the protocol.