Verification checklist
- From one receipt, read gasUsed, effectiveGasPrice, and l1Fee or the stack’s equivalent data-fee field.
- Execution E = gasUsed times effectiveGasPrice. Total T = E plus the data fee. Do not stop at the wallet gas line.
- If the data fee over T is above 0.5, do not write the wallet gas figure as the transfer cost.
- Quote the receipt, not an estimator from ten minutes earlier. In congestion, report p95 of the data share, not the mean.
1. Wallet gas is execution; the data fee is another column
A rollup executes the user transaction on L2, then posts a compressed batch or blob to Ethereum. Optimism’s fee note splits what the user pays into execution gas and an L1 data cost. Execution is gasUsed times the effective price. The data leg is that transaction’s share of publication, often the l1Fee field on the receipt. A wallet that renders only the first column lets a research note copy “this cost 0.00003 ETH” and drop the second.
This is not the site’s note on Confirmed versus finality. That note asks which clock a green tick sits on. This note asks, for a receipt that already exists, which columns make up the debit. It is also not an exchange withdrawal markup: that compares a venue’s tariff with on-chain gas. Here the comparison is the L2 wallet against its own L2 receipt. The sequencer fronts L1 publication and charges l1Fee back. Fronting is not a gift.
2. A worked example: the wallet shows 0.00003 ETH, the receipt is about 15 times that
Suppose an ordinary L2 transfer. The wallet estimates gas at about 0.00003 ETH. The same receipt: gasUsed = 21000, effectiveGasPrice = 1.4 gwei, so execution = 0.0000294 ETH, and l1Fee = 0.00042 ETH. Total = 0.0004494 ETH. The data leg is about 93 percent of the total. A write-up that files the wallet figure under “L2 transfer cost is negligible” fails the screen. The table is hypothetical.
| Field | Teaching value | Call |
|---|---|---|
| Wallet gas | 0.00003 ETH | Execution only |
| Execution fee | 21000 times 1.4 gwei = 0.0000294 ETH | Close to the wallet |
| Receipt l1Fee | 0.00042 ETH | Data fee, not on the wallet line |
| Total | 0.0004494 ETH | About 15 times the wallet figure |
| Data share | 0.00042 / 0.0004494, about 93% | Above 50%; wallet gas is not the cost |
The 15 times gap is not a rendering bug. Execution can be idle while the data market is tight. Writing “L2 is cheap” as a synonym for execution gas treats one price curve as two. The correct sentence is: execution 0.0000294 ETH; data fee 0.00042 ETH; total 0.0004494 ETH. The wallet’s 0.00003 ETH may be labelled execution only.
3. The blob base fee and L2 execution gas are different markets
EIP-4844 gives blobs their own base fee: a target blob count per block, then an exponential update in the style of EIP-1559. That curve does not read the L2 gas price. “L2 gas is 1 gwei” and “the blob base fee jumped by orders of magnitude” can both be true. Refreshing only an L2 gas tracker writes the congestion out of the note.
Field names do not travel across stacks. OP-stack receipts use l1Fee. Some upgrades add an operator fee; it belongs in the same total, not in rounding. Arbitrum’s gas note prices L1 data inside its own estimator, under different names. The check is the same: use the posted receipt, and split the data component from execution. A receipt with no visible data component stops at “unsplit”. It is not a verified cheap transfer.
Estimators also have a clock. The blob base fee updates by block. An estimate of 0.00003 ETH from ten minutes ago cannot be pasted onto this receipt. Splicing estimator and receipt into one row prices one transaction with two market states.
4. A screen: if the data leg is over half, wallet gas is not the cost
The teaching screen sets execution E and data fee D, including any operator fee the stack’s docs say the user pays. Total T = E + D. If D / T is above 0.5, do not write the wallet gas figure as the transfer cost. Write “execution E, data fee D, total T”. One half is not a physical constant. It is a falsifiable line: past it, the subject of the cheap story has changed, and the wallet number is the minor term.
The screen does not say whether the transaction is finalized, or whether the data can be retrieved. Finality is another clock. Data availability asks whether the batch can be reconstructed. This note only answers how much was debited, and in which column. Passing also does not make the next transfer equally cheap. The blob market reprices by block. A single pass cannot be stretched into “transfers on this L2 cost this much”. For a stretch, report the distribution of D/T over N receipts in the same window. In congestion use the 95th percentile, not the mean. The mean is pulled down by idle transfers and writes the tail as the typical price.
5. Keep a record another researcher can replay
A minimum record includes L2 chain ID, tx hash, wallet client and the gas string it showed, gasUsed, effectiveGasPrice, computed E, raw l1Fee or the equivalent, operator fee if present, T, D/T, whether 0.5 was crossed, and the gap between the quote time and the receipt’s block time. Store the RPC request and return so two eth_getTransactionReceipt calls are not spliced into one row. A wallet screenshot is not a receipt field.
Reconcile in a fixed order: receipt execution, receipt data fee, share, then the wallet copy. If the wallet figure and E differ by more than 20 percent, record estimator lag before discussing the data fee. An unexplained gap may not be written into a verified transfer cost. If a paid archive node is required to read historical receipts, record that source grade.
6. Cost is the sum of two columns, not the wallet’s one column
The weak sentence is “an L2 transfer costs pennies; gas is low”. A useful one is “E; D; T; D/T; the wallet copy matches E or T”. Wallet gas answers how idle execution is. l1Fee answers how tight the data market is. Missing either column, cheap is an unverified interface.
This is a research framework with hypothetical calculations, not a quality opinion on any rollup or wallet, and not investment advice.