BRC-20 is a token standard built on top of the Bitcoin Ordinals protocol, enabling the creation and trading of fungible tokens on the Bitcoin blockchain by inscribing structured JSON data into satoshis. The ordinal/inscription layer stores raw text on-chain, and off-chain indexers and wallets interpret that text to derive token state such as deployments, minting, and transfers.Documentation Index
Fetch the complete documentation index at: https://docs.brc20.build/llms.txt
Use this file to discover all available pages before exploring further.
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.