Blocks pushed as produced
No loop, no polling budget.
Real-time streams
A continuous stream rather than a polling loop, with a cursor to resume from and reorganizations stated explicitly.
StreamingFast
ecosystem
01 Real-time streams
Most of your requests return the block you already had, and you paid for all of them.
A poll was missed. Nothing errored. The range is simply not there.
History and live disagree about a balance, because they are two different code paths.
Polling pays for the question, not the answer, and a missed poll looks exactly like silence. A pushed stream delivers the block when it exists, carries a cursor you persist, and signals a reorganization instead of quietly rewriting history underneath you. And it is the same path your backfill used, so the two cannot drift.
Read the guide01 specVersion: v0.1.0
02 package:
03 name: token_transfers
04 version: v0.1.0
05
06 modules:
07 - name: map_transfers
08 kind: map
09 inputs:
10 - source: sf.ethereum.type.v2.Block
11 output:
12 type: proto:transfers.TransfersNo loop, no polling budget.
Reconnect where you stopped, not at the head.
A signal you can act on, not a number that changed.
The same entities you get from history.
History and live share the path, so they cannot disagree.
02 Real-time streams
Blocks arrive with their decoded content.
Persist it. That is the whole recovery story.
Reorganizations are explicit, so your database can follow.
03 Real-time streams
Real-time streams
Choose the mapping, preserve progress and operate ingestion with clear freshness and cost expectations.