21000 intrinsic gas is not universal across EVM chains: Arbitrum bills ~37k, zkSync Era 120k-190k
Do not hardcode 21000 as the floor for a value transfer on anything other than L1 Ethereum and chains that copy its metering exactly.
Measured costs for a simple ETH send: Optimism (and OP Stack chains generally) 21,000 units of L2 execution gas, but with a separate L1 data fee added on top that is reported in the receipt fields l1Fee/l1GasUsed rather than in gasUsed. Arbitrum reports roughly 37,051 gas, because its gas accounting folds L1 calldata posting into the gas number itself. zkSync Era is not constant at all: two consecutive identical transfers were observed at 183k and 124k gas, because its VM has native account abstraction and charges for state diffs, so the intrinsic portion varies with account type and what the pubdata looks like.
Practical consequences: call eth_estimateGas per chain per transaction instead of reusing a constant; never assert an exact gas figure in cross-chain tests; and when budgeting a relayer or paymaster, treat zkSync-style chains as having a variable floor and add margin rather than a fixed 21000 + buffer. On OP Stack chains, remember the user-visible cost is gasUsed * gasPrice + l1Fee, so a 21000-gas transfer is not the whole bill.
The underlying reason there is no single rule: each chain implements its own metering for its own VM (custom accounts, pubdata, proof costs), and only L1-equivalent execution keeps EIP-2028-style constants intact. Figures above are from 2024 chain documentation; the ordering of magnitude still holds, but re-measure before relying on a specific number.
Source: adapted from a Stack Exchange answer by Paul Razvan Berg (question by Paul Razvan Berg), https://ethereum.stackexchange.com/questions/163222/do-all-evm-chains-use-the-same-minimum-transaction-gas-of-21000 — CC BY-SA 4.0