Skip to main content

Fast blocks, more blocks

At ten blocks per second, Robinhood Chain produces about 864,000 blocks a day. Two things follow:
  • Ranges are long. A day is about 864,000 blocks, so a one-day query spans about 18 responses at the 50,000-block page limit, even if it matches few rows. Your pagination loop handles this; just don’t be surprised by the page count.
  • Blocks are small. A block holds a few dozen transactions at most, and there are no empty blocks: each one has the ArbOS system transaction (below) and at least one user transaction.

The ArbOS system transaction

Every Robinhood Chain block starts with an ArbOS “start block” transaction: type 0x6a, sent from 0x00000000000000000000000000000000000a4b05. A query for every transaction in a range returns one of these per block (except block 0, the genesis block, which has no transactions). A few blocks carry more than one, for example the batch-posting reports. To leave them out, filter on type: "type": [0, 1, 2, 4] keeps ordinary signed transactions and leaves out ArbOS’s type 106 (and Arbitrum’s other system and retryable types). Or filter on to/from/sighash so they never match.

Arbitrum fields

On top of the base fields, Robinhood Chain fills these: The retryable fields are null on transaction types that don’t carry them. The six amounts (maxRefund, submissionFeeRefund, depositValue, retryValue, maxSubmissionFee, l1BaseFee) are full 256-bit values: 32 bytes big-endian in Arrow, decimal strings in JSON. A maxRefund of 2²⁵⁶ − 1 (“unlimited”) is 32 bytes of 0xff. See Data types. timeboosted is 1 when the transaction went through the Timeboost express lane. It is null when the chain’s nodes don’t report it, which is the case today.

Fields Robinhood Chain doesn’t have

Arbitrum chains don’t produce withdrawals, blobs or the Prague block fields. These are always null and listed in unavailable_fields:
  • blocks: totalDifficulty, withdrawalsRoot, withdrawals, blobGasUsed, excessBlobGas, parentBeaconBlockRoot, requestsHash
  • transactions: maxFeePerBlobGas, blobVersionedHashes, blobGasUsed, blobGasPrice
OP-Stack fields are also null.

Finality

A block is final once 64 newer blocks exist, about 6–7 seconds. Rows above finalized_block can be replaced by a reorg. See Finality and reorgs.

Example: every ERC-20 transfer in 10 blocks

About 500 rows, 160 KB of JSON.