# Rollup Batch Explorer > How L2 transactions reach Ethereum: unsafe → safe → finalized, blobs, batch costs, withdrawal waits. For a Base, OP Mainnet or Arbitrum One transaction or block, shows whether it is only sequencer-confirmed (unsafe), already posted to Ethereum in a batch (safe) or settled on finalized Ethereum data (finalized) — and, for Arbitrum, the batch number that contains it. It also scans the latest Ethereum blocks for rollup batch transactions (OP Stack batch inboxes and the Arbitrum SequencerInbox), counting blobs, blob gas and the fee each batch paid, and explains the documented withdrawal windows. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://rollupbatchexplorer.usefulweb.site/ (interactive tool at https://rollupbatchexplorer.usefulweb.site/tool) - JSON API: POST https://rollupbatchexplorer.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://rollupbatchexplorer.usefulweb.site/api/v1/tool) - OpenAPI: https://rollupbatchexplorer.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://rollupbatchexplorer.usefulweb.site/mcp - tool `rollup_batch_explorer` ## Inputs - mode (select): What do you have? - rollup (select): Rollup - l2Tx (text): L2 transaction hash (optional) - l2Block (text): L2 block number (optional) - Used when no transaction hash is given; defaults to the latest block. - l1Blocks (integer): Recent Ethereum blocks to scan for batches - l1BlockJson (textarea): L1 block JSON (offline) - eth_getBlockByNumber(…, true) result (or an array of them), optionally with a "receipts" array for exact costs. ## Method - L2 status: the L2 node's "safe" and "finalized" block tags. OP Stack: safe = derived from batch data already included on L1; finalized = derived from finalized L1 blocks. Arbitrum Nitro maps the same tags to batches posted in safe/finalized L1 blocks. Blocks above the safe head are "unsafe" (sequencer-confirmed only). - Arbitrum: NodeInterface (0x…C8).findBatchContainingBlock(block) gives the batch number once the block is posted. - L1 batches: transactions in the last N Ethereum blocks sent to the Base batch inbox (0xff…8453), the OP Mainnet batch inbox (0xff…0010) or the Arbitrum SequencerInbox; OP Stack batches are only valid when sent by the chain's authorised batcher, which is checked. Arbitrum batch numbers come from SequencerBatchDelivered logs. - Cost per batch = gasUsed × effectiveGasPrice + blobGasUsed × blobGasPrice from the transaction receipt; blob count = blobVersionedHashes of the type-3 transaction. - Withdrawal windows are quoted from each rollup's documentation (linked as sources); they apply to L2→L1 withdrawals, not to ordinary L2 transactions.