GRPC endpoint / Kafka Producer that allows you to stream transactions in real time. Combined with colocation and running your own full node, this allows you to calculate the canonical state of the chain in 1-2 ms at any given time.
Note that StreamTx is subject to aggressive rate limits and blocks - ensure your machine has enough RAM and bandwidth to keep up with the stream (approx 32 Mbit/s).
Colocation Tips: Currently the continuum sequencer operates out of EU-frankfurt Availability Zone. Select this option for ~1ms round trip latency.
2. SubmitTx
This allows for direct submission of transactions to continuum via grpc for minimized latency. Rate limits apply.
RPC Endpoints
In addition, we also offer historical query APIs, via REST. you can use our official RPC endpoints, or point to any full node, to access this data.
Our official RPC endpoint is:
https://rpc.fermilabs.xyz/
Example usage:
curl https://rpc.fermilabs.xyz/status
List Blocks
Retrieve a paginated list of blocks, ordered by height (descending).
Parameters:
Parameter
Type
Default
Description
limit
int
20
Number of blocks to return (max 100)
offset
int
0
Number of blocks to skip
Example:
Response:
Get Latest Block
Retrieve the most recent block with full transaction and event details.
Example:
Response:
Get Block by Height
Retrieve a specific block with full transaction and event details.
Example:
Response:
Transaction Endpoints
Get Transaction by ID
Retrieve a specific transaction by its ID.
Transaction ID Format:{block_height_hex}-{batch_index_hex}-{tx_index_hex}
Example:
Response:
Transaction Kinds:
order - New order placement
cancel - Order cancellation
Event Endpoints
List Events
Retrieve a paginated list of events, optionally filtered by market.
Parameters:
Parameter
Type
Default
Description
limit
int
50
Number of events to return (max 200)
offset
int
0
Number of events to skip
market_id
string
-
Filter by market UUID (optional)
Example:
Response:
WebSocket Subscriptions
Subscribe to New Blocks
Real-time block notifications via WebSocket.
Example (using websocat):
Behavior:
On connection, immediately receives the latest block details
Subsequently receives new blocks as they are produced
Message Format: Same as GET /blocks/:height response
Query Patterns
Get Transactions in a Time Range
The API doesn't support direct time-range queries. Use this pattern:
Get All Transactions for a User
Get Transactions for a Market
Pagination Example
Data Models
BlockRecord
Field
Type
Description
height
u64
Block height (sequential)
state_root
[u8; 32]
Merkle root of state after block
applied_batches
u64
Cumulative batch count
applied_orders
usize
Orders matched in this block
produced_at
u64
Unix timestamp (seconds)
total_orders
usize
Total order transactions
total_cancels
usize
Total cancel transactions
batch_summaries
array
Batch details (see below)
transaction_ids
array
Transaction IDs in this block
event_ids
array
Event IDs in this block
BatchSummary
Field
Type
Description
index
u32
Batch index within block
tick_number
u64
Continuum tick number
order_count
usize
Orders in batch
cancel_count
usize
Cancels in batch
continuum_sequences
array
Continuum sequence numbers
batch_hash
string
SHA256 hash of batch
ExplorerTransaction
Field
Type
Description
id
string
Unique transaction ID
block_height
u64
Block containing this tx
batch_index
u32
Batch index within block
kind
string
"order" or "cancel"
market_id
string
Market UUID
market_name
string
Human-readable market name
market_kind
string
"Spot" or "Perp"
owner
string
Base58 public key
side
string
"Buy" or "Sell" (orders only)
price
u64
Price in quote units (orders only)
quantity
u64
Quantity in base units (orders only)
base_mint
string
Base token mint (orders only)
quote_mint
string
Quote token mint (orders only)
order_id
u64
Client order ID
timestamp_ms
u128
Submission timestamp (ms)
continuum_sequence
u64
Continuum sequence number
signature
string
Ed25519 signature (hex)
ExplorerEvent
Field
Type
Description
id
string
Unique event ID
block_height
u64
Block containing this event
batch_index
u32
Batch index within block
market_id
string
Market UUID
market_name
string
Human-readable market name
applied_orders
usize
Orders matched
batch_hash
string
Associated batch hash
Node Status
Get Node Status
Response:
Storage Details
Block explorer data is persisted to the sled database at the path specified by --db-path (default: ./rollup_data).
Storage location:{db-path}/db/
Stored data:
explorer.blocks - Block records indexed by height
explorer.transactions - Transactions indexed by ID
explorer.events - Events indexed by ID
Data persists across node restarts and is automatically loaded on startup.
# All events
curl "http://rpc.fermilabs.xyz/events?limit=50"
# Events for specific market
curl "http://localhost:8080/events?market_id=6f9ee497-1756-5bbd-b512-36cee35add8f"
# 1. Fetch blocks and filter by timestamp (produced_at is Unix timestamp)
START_TIME=1767870000
END_TIME=1767873000
curl -s "http://rpc.fermilabs.xyz/blocks?limit=1000" | \
jq --argjson start $START_TIME --argjson end $END_TIME \
'[.[] | select(.produced_at >= $start and .produced_at <= $end)]'
# 2. Get full details for blocks in range
curl "http://rpc.fermilabs.xyz/blocks/3343881"
# Get user's open orders (current state)
curl "http://rpc.fermilabs.xyz/orders/user/DeJpkURbXgmFvsi6dj9RX6rybuLiY7kgXzfFGZNWrte7"
# For historical transactions, iterate through blocks
# and filter by owner field
# Filter events by market, then fetch associated blocks
curl "http://rpc.fermilabs.xyz/events?market_id=6f9ee497-1756-5bbd-b512-36cee35add8f&limit=100"