What BRC2.0 adds to BRC-20
BRC2.0 introduces four major capabilities:- Smart contracts: Deploy Solidity contracts inscribed on Bitcoin, with state transitions validated by indexers running EVM execution.
- Deposit/withdraw bridge: Move BRC-20 tokens into BRC2.0 contracts as ERC-20-compatible assets.
- Bitcoin precompiles: Native access to Bitcoin transaction verification, signature validation (BIP-322), and UTXO queries.
- Event system: Contract logs that applications can subscribe to for real-time updates.
Architecture and execution model
BRC2.0 indexers run an EVM-compatible execution environment alongside traditional BRC-20 state tracking. When a BRC2.0 operation is inscribed (deploy contract, call function, deposit tokens), indexers execute a deterministic pipeline:1
Parse the inscription
Extract BRC2.0 JSON from the Ordinals envelope.
2
Validate the operation
Check signature, nonce, and gas limits.
3
Execute EVM bytecode
Run the transaction in the local EVM instance.
4
Update state
Commit storage changes, logs, and balance updates.
5
Achieve consensus
All indexers must produce identical state transitions.
State separation
BRC2.0 maintains two distinct state domains:
Assets can move between domains using deposit/withdraw operations, creating a bridge between Bitcoin-native tokens and smart contract applications.
Operation types
BRC2.0 defines three new operation types using the"brc20-prog" protocol identifier, beyond BRC-20’s deploy/mint/transfer.
Deploy
Deploy a Solidity contract to the BRC2.0 execution layer. Indexers execute the constructor and assign the contract an address derived from the inscription ID.Protocol identifier. Must equal
"brc20-prog".Operation type.
"deploy" or shorthand "d".Compiled Solidity deployment bytecode as a hex string. Generate with Hardhat, Foundry, or Remix.
Call
Invoke a function on a deployed contract. Indexers validate gas limits and update contract state accordingly.Operation type.
"call" or shorthand "c".Address of the deployed contract to call.
ABI-encoded calldata for the function invocation.
Transact
Combined deposit/withdraw with contract call — moves BRC-20 tokens into a contract and invokes a function in one operation. This is the primary pattern for DeFi interactions: deposit tokens, execute trade/stake/lend, and optionally withdraw results.Operation type.
"transact" or shorthand "t".ABI-encoded calldata including deposit parameters and function arguments.
Deposit and withdraw mechanics
BRC2.0 includes a built-in bridge for moving BRC-20 tokens into smart contracts.Deposit flow
1
Create deposit inscription
Inscribe a deposit operation specifying the ticker and amount.
2
Send to OP_RETURN
Send the inscription to
OP_RETURN "BRC20PROG" to route it into the BRC2.0 module.3
Indexers lock BRC-20 balance
Tokens move from BRC-20 state to “deposited” state.
4
Mint internal token balance
The contract receives an equivalent ERC-20-compatible balance.
Must equal
"deposit".Ticker of the BRC-20 token to deposit.
Amount to deposit as a stringified integer.
Withdraw flow
To withdraw, inscribe a withdraw operation and send it to any address other thanOP_RETURN. This credits the BRC-20 balance back to the sender.
Must equal
"brc20-module".Must equal
"withdraw".Ticker of the token to withdraw.
Amount to withdraw as a stringified integer.
Module identifier. Must equal
"BRC20PROG".This creates a trustless bridge — no multisig or validator set is required. Indexers enforce the rules deterministically based on inscriptions and EVM execution.
EVM compatibility
BRC2.0 aims for Solidity compatibility but has key differences from Ethereum.Supported
Supported
- Solidity syntax and features
- Standard library contracts (OpenZeppelin, etc.)
- Events and logs
- Storage operations (
SSTORE,SLOAD) - Standard opcodes (
ADD,MUL,CALL, etc.)
Modified behavior
Modified behavior
Not supported
Not supported
- Native ETH (
msg.value) — use BRC-20 token deposits - Ethereum-style key-based message signing from contract-generated addresses
Gas model
BRC2.0 uses a Bitcoin-anchored gas model:- Gas limits prevent infinite loops during indexer execution.
- If execution exceeds the gas limit, the transaction reverts and state is not updated — standard EVM behavior.
- Gas costs differ from Ethereum due to indexer execution constraints.
Security model and trust assumptions
Immutability
Immutability
Contract bytecode inscribed on Bitcoin cannot be changed. All operations are permanently recorded.
Determinism
Determinism
All indexers must produce identical state given the same inscriptions. The protocol is a deterministic state machine.
Upgradability
Upgradability
Use proxy patterns (similar to Ethereum) for upgradeable contracts.
Precompile trust
Precompile trust
Bitcoin verification precompiles rely on correct implementation in indexer code.
Development workflow
1
Write Solidity contracts
Use Hardhat, Foundry, or Remix as usual.
2
Test locally
Deploy to a local BRC2.0 node or testnet.
3
Compile to bytecode
Generate deployment bytecode and ABI.
4
Inscribe contract
Create a deploy inscription with the bytecode.
5
Wait for confirmation
A Bitcoin block must confirm (~10 minutes).
6
Interact via inscriptions
Call functions by inscribing call operations.
7
Monitor events
Subscribe to indexer APIs for contract logs.
When to use BRC2.0 vs BRC-20
- Use BRC-20 when
- Use BRC2.0 when
- Simple token operations suffice (hold, send, receive)
- You want maximum compatibility with existing wallets and tools
- Lower complexity and gas costs are priorities
- No programmable logic is required