Overview
Deploy
Compile your contract
Compile your Solidity contract to EVM bytecode using the standard toolchain (Hardhat, Foundry, etc.). The output is identical to what you would deploy on Ethereum.
Inscribe the bytecode
Create an Ordinals inscription that contains your compiled bytecode and submit it to the BRC2.0 Programmable Module address. This is the equivalent of sending a deployment transaction on Ethereum.
Wait for Bitcoin confirmation
The deployment is executed deterministically when the inscription is indexed. The contract address is derived using standard EVM creation semantics — the same formula as
CREATE on Ethereum.There is no deployment transaction in the Ethereum sense. Deployment is triggered by a Bitcoin transaction carrying the inscription data. The contract address is deterministic and can be computed before the Bitcoin transaction confirms.
Call
Contracts are invoked by inscribing calldata and submitting it to the module. From the contract’s perspective, the call behaves exactly like a normal EVM transaction:- Calldata is ABI-encoded
- Execution either succeeds or reverts
- All EVM opcodes behave as expected
- Bitcoin-native identity — via BIP-322 signature passed as calldata
- Signed EVM transactions — using the
transactoperation, if explicitly supported
Persist state
Contract state is persisted exactly as in Ethereum:- Storage writes are committed on successful execution
- Reverted calls do not modify state
- State transitions are deterministic and replayable
This is conceptually similar to Ethereum archive node replay. Any compliant indexer can reconstruct the full state from the Bitcoin chain alone — no external data source is required.
Emit logs
Contracts emit standard EVM events. These logs:- Follow Ethereum’s event model exactly (
emit, indexed topics, ABI-encoded data) - Can be indexed by off-chain services and frontends using standard EVM tooling
- Are deterministic and replayable from Bitcoin history
Standard Ethereum event indexers and subgraph tooling can be adapted to consume BRC2.0 logs, since the event format is identical to Ethereum.
Withdraw back to BRC-20
Contracts can release assets back to base BRC-20 balances via withdrawals. How it works:- Assets are locked under contract control during execution
- A withdrawal reduces the contract’s internal balance
- The corresponding BRC-20 balance becomes spendable on Bitcoin again
Lifecycle summary
| Phase | Submitted as | Ethereum equivalent |
|---|---|---|
| Deploy | Inscription (bytecode) | eth_sendTransaction (contract creation) |
| Call | Inscription (calldata) | eth_sendTransaction (contract call) |
| State persistence | Deterministic replay | EVM state trie update |
| Logs | Derived from execution | EVM receipt logs |
| Withdraw | Bitcoin transaction | N/A (exits to native BTC layer) |