For wallet teams adding or improving Monad support in an EVM wallet. Monad works with most EVM wallets out of the box — same addresses, transaction format, signatures, and dapp connection flow as Ethereum. But a handful of network-level differences — gas billed on the limit, asynchronous execution, no global mempool view — change how a wallet should quote gas, poll status, and surface pending state. For end-user instructions, see Add Monad to Wallet. For chain IDs, RPC URLs, tokens, and protocol contract addresses, see Network Information, theDocumentation Index
Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
Use this file to discover all available pages before exploring further.
token-list, and
protocols.
Tune gas handling
On Monad, users pay for the transaction’s gas limit, not the gas it actually uses. This is the single biggest wallet-side difference from Ethereum: large safety buffers significantly overcharge users and reserve block space the transaction never uses. Use a small, Monad-specific gas-limit margin, and warn users when they manually set a gas limit far above the estimate. Category Labs’ gas-limit analysis recommendseth_estimateGas with only a modest buffer. A fixed buffer is a good starting point; a
dynamic buffer keyed on receiver address and function selector reduces unused gas further once you
have enough history to calibrate.
Quote fees from current Monad data, not Ethereum defaults:
eth_maxPriorityFeePerGasreturns a hardcoded 2 gwei — not a live network recommendation.eth_feeHistoryduplicates the latestbaseFeePerGaswhennewest_blockislatest. Don’t count it twice in charts or averages.
Handle transaction lifecycle
A successfuleth_sendRawTransaction means “accepted by this RPC node” — not a guarantee the
transaction will land or succeed. The RPC node may accept it before checking nonce and balance
against the latest state.
Distinguish three stages:
| Stage | What to show | Signal |
|---|---|---|
| Submitted | Pending | eth_sendRawTransaction returns a hash |
| Included and executed locally | Completed or failed | eth_getTransactionReceipt returns a receipt |
| Finalized | Finalized | The receipt’s block number is at or below the block returned for the finalized tag |
k blocks behind the current block. Currently k = 3 (~1.2 seconds),
but this can change.
If a spend drops an undelegated account below 10 MON, wait k blocks before another MON spend.
After undelegating, wait k blocks before emptying the account.
Monad has no global mempool. Don’t use txpool_content or newPendingTransactions for pending
state. Instead:
- Track local pending nonces for transactions you submitted.
- Reconcile against receipts and
eth_getTransactionCount. - Use
txpool_statusByAddressortxpool_statusByHashfor node-level pending status. - Scope pending lists to the user’s account, not the whole network.
Simulation and RPC differences
debug_trace* methods don’t return opcode-level struct logs. Use call-frame or prestate tracers
for simulation and risk previews.
WebSocket subscriptions: newHeads, logs, plus Monad-specific monadNewHeads and monadLogs
for pre-finalization data. The syncing and newPendingTransactions WebSocket subscription types
are not supported. See WebSocket subscriptions.
Full nodes may serve recent state, but not arbitrary old state. Check RPC capability before showing
past-state UI or old-block simulation, and link to an archive endpoint when needed. See Historical
Data.
EIPs and EVM differences
Monad supports transaction types 0, 1, 2, and 4. Type 3 blob transactions are not supported.| Feature | Status | Wallet implication |
|---|---|---|
| EIP-4844 | Not supported | Reject type 3 transaction construction with a clear error. |
| EIP-7702 | Supported with Monad-specific restrictions | A delegated EOA can hold less than 10 MON, but any transaction that lowers its balance below 10 MON reverts. Delegated account code also cannot run CREATE or CREATE2. |
Recipes
Apply a chain-specific gas-limit margin
Use Category Labs’ 7.5% fixed-buffer result as a Monad starting point, then tune from production data — success rates, retries, and out-of-gas events. Basis points avoid floating-point rounding errors.Warn on manual gas-limit overspend
Wait for receipt and finality
The manual loop below works with standard RPC. If your RPC supports it,eth_sendRawTransactionSync
is the shorter path.
Learning resources
Gas Pricing
How Monad charges gas and how EIP-1559 works on Monad
JSON-RPC Overview
RPC differences, block tags, WebSockets, limits, and errors
Reserve Balance
When accounts can spend below the 10 MON reserve
EIP-7702 on Monad
Delegated EOA behavior and Monad-specific restrictions
Historical Data
Current-state and historical-state availability

