mirror of
https://github.com/grassrootseconomics/cic-chain-events.git
synced 2024-11-05 17:36:45 +01:00
1.5 KiB
1.5 KiB
Functionality
Head syncer
Opens a websocket connection and processes live transactions.
Janitor
Periodically checks for missed (and historical) blocks missed by the head syncer and queues them for processing. A gap range is processed twice to guarantee there is no missing block.
Pipeline
Fetches a block and executes the filters in serial order for every transaction in the block before finally committing the block to the store.
Filter
Processes a transaction and passes it on to the next filter or terminates the pipeline for that transaction if it is irrelevant.
Store schema
- The
blocks
table keeps track of processed blocks. - The
syncer_meta
table keeps track of the lower_bound cursor. Below the lower_bound cursor, all blocks are guarnteed to have been processsed hence it is safe to trim theblocks
table below that pointer.
GraphQL
- Fetches a block (and some of its header details), transactions and transaction receipts embedded within the transaction object in a single call.
NATS JetStream
- The final filter will emit an event to JetStream.
To view/debug the JetStream messages, you can use Benthos
With a config like:
input:
label: jetstream
nats_jetstream:
urls:
- nats://127.0.0.1:4222
subject: "CHAIN.*"
durable: benthos
deliver: all
output:
stdout:
codec: lines
Caveats
- Blocks are not guaranteed to be processed in order, however a low concurrency setting would somewhat give an "in-order" behaviour (not to be relied upon in any case).