Why Monad

Measured block times, finality and gas on Monad mainnet, and what they let Plans do.

A shared pot only feels shared if every phone sees a spend before the spender puts theirs down, and if sponsoring every tap costs almost nothing. We measured Monad mainnet rather than quoting it.

Measured on mainnet

Measured on 5 October 2026, 20:18 to 20:28 UTC, against Monad mainnet (chain 143).

WhatMedianDetail
Time between blocks301 ms196 blocks, websocket timing
Time to finality583 ms650 ms at p95, 93 blocks
A relayed AUSD transfer≈ $0.0004estimated 112,910 gas at 102 gwei, MON at $0.031

What that buys: a spend reaches every member's phone within about a second, and settlement is final before the phones stop buzzing. At these prices the relayer can sponsor every action, including approvals and votes; sponsoring a whole six-person trip costs about three cents.

Gas, measured against the live chain

Every Plans action was run on an anvil fork of mainnet with the real AUSD, re-priced with Monad's rules, then replayed read-only on live mainnet (eth_simulateV1) to find the smallest gas limit that works. The model matched the live minimum exactly for all 44 transactions. Highlights (full table: contracts/GAS.md):

ActionMin gas limit (live)Suggested limit≈ cost at 102 gwei, MON $0.031
createPot (+ deposit, permit, key)573,196631,000$0.0020
join (+ deposit, permit, key)388,879428,000$0.0014
contribute (ERC-3009)150,844166,000$0.0005
propose PAY, instant, 4-way split265,060292,000$0.0009
vote approve (reaches threshold, executes)178,963197,000$0.0006
PlansSend.send145,333160,000$0.0005
ClaimEscrow.claim104,413115,000$0.0004
settle, 3 members185,168204,000$0.0006
settle, 6 members277,542306,000$0.0010
settle, 12 members497,640548,000$0.0017

Costs are illustrative: gas price and the MON price move.

Charged on the gas limit

Monad charges the gas limit, not gas used, and gives no refunds. So the number that matters is the limit the relayer sets. The relayer uses estimate × 1.10 + 10,000, capped per action, rather than the usual generous margin.

Monad gas for Plans actions is a median 1.21× Ethereum's (from 0.91× to 1.70×). The difference comes from cold account access (10,100 instead of 2,600), ecrecover (6,000 instead of 3,000), and 17,000 gas of state growth for each fresh storage slot, with no refunds. The Pot is laid out for Monad's storage pages: all its hot state (schedule, rules, member list with nets, bitmaps) sits on storage page 0, so one 8,100-gas page load covers the whole pot and every further read costs 100. Members are found by scanning that page instead of a mapping lookup, and signatures try ecrecover before ERC-1271 to skip a 10,100-gas cold account access for ordinary keys.

Monad's 128 KB contract size limit also matters: the Pot runtime is about 29 KB, above Ethereum's 24 KB limit.

Receipts in the same call

The relayer sends with eth_sendRawTransactionSync (EIP-7966), which returns the receipt in the same call. The app can say "Done" and show the onchain proof without polling. If the RPC times out the relayer waits for the receipt, and if the method is missing it falls back to eth_sendRawTransaction and polls.

Monad's reserve-balance rule caps how much gas one sender can commit over three blocks, so the relayer spreads work across three nonce lanes (three funded keys), each serialising its own sends.

Parallel execution, stated honestly

Monad executes transactions in parallel and re-executes those that conflict. Plans is laid out to suit that: each plan is a separate contract with its own storage, so groups spending and settling at the same time don't write to each other's state. Transactions still share some state (AUSD balances of the same people, a relayer lane's nonce), and we have not load-tested Plans at scale on Monad. This is a design property, not a measured throughput claim.

Edit this page on GitHub

On this page