Skip to main content
Chains differ. Ethereum has withdrawals and blobs; Arbitrum chains have L1 block numbers and retryable tickets; OP-Stack chains have deposit transactions and L1 fees. Bloklake gives every chain the same schema anyway:
  • You can select any field on any chain.
  • A field the chain doesn’t have comes back as an all-null column.
  • The response lists those fields so you can tell them from real nulls.
One client, one schema, every chain.

How it’s reported

Entries are <row type>.<column name>, using the snake_case column names, in the order transactions, logs, blocks. Only fields you selected are listed.

Real nulls vs unavailable fields

A null in a field that isn’t listed is a real null:
  • to on a contract creation
  • baseFeePerGas before London
  • status before Byzantium
  • topic3 on an event with fewer indexed arguments
  • an Arbitrum retryable field on an ordinary transaction
A field listed in unavailable_fields is null in every row on this chain.

Rejecting them instead

If you’d rather get an error than an all-null column, add "strictFields": true. Selecting a field the chain doesn’t have is then a 400 invalid_query naming every such field, and nothing is billed:
strictFields is set per request: it works with a queryId too, and isn’t part of the prepared query, so the same query can be strict on one call and lenient on the next. Use it when one schema is meant for one chain and a missing field means a mistake.

Finding out ahead of time

GET /v1/schema lists every field with available: true/false for that chain, plus the chain’s families (base, arbitrum, op_stack). It’s free and needs no key.
The chain pages and the chain status page list them too.

Typos are still errors

Only real field names are accepted. withdrawals on Robinhood Chain is fine (null column); withdrawls anywhere is a 400.