cic-chain-events/docs/functionality.md

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 the blocks 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).