Origin#
BRC-20 is an attempt by Twitter user @domodata to create a Bitcoin-based token standard in March 2023.
Source: Twitter: https://twitter.com/domodata/status/1633658974686855168
BRC-20 uses JSON-formatted Ordinals script to deploy, mint, and transfer tokens. The Ordinals protocol utilizes Bitcoin's segregated witness data to attach additional data. This explanatory article provides more details.
After the first token, ordi (short for "Ordinals"), was issued, it quickly gained attention from the community. All 21 million ordi tokens were minted within 18 hours, and soon after, tokens like "meme" and "pepe" were deployed and quickly minted. According to data on brc-20.io, 7543 different BRC-20 tokens have been minted, many of which have seen significant price increases and are currently trending topics.
Although the author emphasizes that BRC-20 is currently just an interesting experiment and should not be considered a standard for Bitcoin-based fungible tokens, it hasn't stopped people from participating enthusiastically.
What is BRC-20?#
The name BRC-20 is a reference to the Ethereum ERC-20 token standard. However, since the Bitcoin blockchain does not have on-chain execution capabilities like Ethereum, BRC-20 uses Bitcoin's witness data area to record JSON-formatted scripts and implements BRC-20 through off-chain state updates (balances).
BRC-20 defines a set of simple JSON-formatted scripts to describe token deployment, minting, and transfer. The following is a quote from: https://domo-2.gitbook.io/brc-20-experiment/
The script for deploying BRC-20 is as follows:
{
"p": "brc-20",
"op": "deploy",
"tick": "ordi",
"max": "21000000",
"lim": "1000"
}
p: Represents the protocol name.
op: Represents the operation type, which can be deploy, mint, or transfer.
tick: The 4-letter identifier for BRC-20.
max: Sets the maximum supply of BRC-20.
lim: The limit for each minting transaction.
The script for minting BRC-20 tokens is as follows:
{
"p": "brc-20",
"op": "mint",
"tick": "ordi",
"amt": "1000"
}
amt: The amount of BRC-20 tokens to mint, which must be less than the "lim" mentioned above.
The script for minting (transferring) BRC-20 tokens is as follows:
{
"p": "brc-20",
"op": "transfer",
"tick": "ordi",
"amt": "100"
}
The balance of BRC-20 tokens for each address is determined by client software (indexers) like unisat.io, which tracks mint and transfer events. For example, if a mint script is included in a UTXO, the balance is added to the first owner, and if a transfer script is included, the balance is deducted from the sender's address and added to the recipient's address.
The scripts are attached to Bitcoin transactions as "additional" transactions. Bitcoin miners do not process these scripts, so they appear the same as other transactions on the blockchain. They are treated as regular transactions.
To access the additional data based on the Ordinals protocol, additional wallets (Ord Wallet / ordinalswallet) and blockchain explorers (https://ordinals.com/) are required to index and track them.
For example, this is a transaction for minting BRC-20 FREE tokens:
https://blockstream.info/tx/331d02db3d6ee0cffae9052be5799bd7754c6ebb2020e422058b73334c59bf85
Only in the ordinals explorer can the detailed JSON script be displayed:
Service providers like brc-20.io and unisat.io track each transaction, obtain the scripts, and calculate the balance of BRC-20 tokens held by each address. unisat.io has done a good job of displaying the complete balance status.
How to Issue or Mint#
To facilitate the construction of scripts, it is best to choose an Ordinal wallet like Unisat, which provides tools for deploying the BRC-20 standard.
Unisat is a browser plugin wallet similar to MetaMask. When creating a wallet, choose the Taproot address format and then withdraw from an exchange or transfer from another wallet to that address.
Enter the BRC-20 engraving interface:
You can choose to mint BRC-20 tokens or issue (deploy) your own BRC-20 token.
When issuing (deploying) a BRC-20 token, each BRC-20 token is identified by a "Tick" name, and during deployment, the "Tick" name, "max" maximum supply, and "lim" single transaction minting limit must be set. Therefore, when deploying, the tick of the BRC-20 token cannot be the same as a previously deployed BRC-20 token.
When minting BRC-20 tokens, make sure that the token has not reached its maximum supply. In Unisat, you can check the minting percentage:
When issuing, minting, or transferring, the script data in the transaction is not checked or executed by Bitcoin nodes. Therefore, we need to ensure that the JSON script data is valid. For example, for a transfer to be valid:
The amount stated in the script must not exceed the available balance.
The available balance is defined as [Total Balance] - [Transferable Balance]. If an address has not made any transfers, the available balance is equal to the total balance.
For example, if a wallet holds a total balance of 1000 "ordi" and the owner signs a transfer script for 700 "ordi", the following is true once the script is confirmed: total balance = 1000, transferable balance = 700, so the available balance = 300. If in the next block, the user attempts to make a transfer script for 500 "ordi", it would be invalid. However, Bitcoin nodes do not check the script, so the transaction can still succeed, but in the BRC-20 wallet service, it would be considered a failed transaction and the state would not be updated.
Summary#
BRC-20 and Ordinals NFT have sparked a lot of debate within the Bitcoin community. Supporters believe that as long as you pay the transaction fee, you have full authority to use the block space in any way you want, regardless of the content of the transaction. They believe that BRC-20 and NFT bring new culture and narratives to Bitcoin, which helps increase its adoption. Opponents argue that these BRC-20 and NFT tokens have no value and are junk transactions that occupy transaction bandwidth, leading to longer block confirmation times and higher fees.
Currently, BRC-20 is still relatively centralized and has a poor user experience (rug projects, severe network congestion, etc.). However, we are seeing a lot of tools emerging, and due to Bitcoin's maximum consensus, the future development is worth paying attention to.
Reference Links#
BRC-20 documentation: https://domo-2.gitbook.io/brc-20-experiment/
BRC-20 explorer: https://brc-20.io/
BRC-20 wallet: https://unisat.io/
Ordinals native wallet: https://ordinalswallet.com/
BRC-20 trading market: https://ordswap.io/
Mint tool: https://looksordinal.com/
Oriscan: https://ordiscan.com/