snek

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2023 License: Apache-2.0

README

Snek

Snek is a tool for tailing the Cardano blockchain and emitting events for each block and transaction that it sees.

How it works

Input can be a local or remote Cardano full node, using either NtC (local UNIX socket, TCP over socat) or NtN to remote nodes.

Events are created with a simple schema.

{
    "type": "event type",
    "timestamp": "wall clock timestamp of event",
    "payload": "the full event specific payload"
}

The chainsync input produces three event types: block, rollback, and transaction. Each type has a unique payload.

block:

{
    "payload": {
        "blockNumber": 123,
        "blockHash": "abcd123...",
        "slotNumber": 1234567,
        "blockCbor": "85828a1a000995c21..."
    }
}

rollback:

{
    "payload": {
        "blockHash": "abcd123...",
        "slotNumber": 1234567
    }
}

transaction:

{
    "payload": {
        "blockNumber": 123,
        "blockHash": "abcd123...",
        "slotNumber": 1234567,
        "transactionHash": "0deadbeef123...",
        "transactionCbor": "a500828258200a1ad..."
    }
}

Each event is output individually. The log output prints each event to stdout using Uber's Zap logging library.

Configuration

Snek supports multiple configuration methods for versatility: commandline arguments, YAML config file, and environment variables (in that order).

You can get a list of all available commandline arguments by using the -h/-help flag.

$ ./snek -h
Usage of snek:
  -config string
        path to config file to load
  -input string
        input plugin to use, 'list' to show available (default "chainsync")
  -input-chainsync-address string
        specifies the TCP address of the node to connect to
...
  -output string
        output plugin to use, 'list' to show available (default "log")
  -output-log-level string
        specifies the log level to use (default "info")

Each commandline argument (other than -config) has a corresponding environment variable. For example, the -input option has the INPUT environment variable, the -input-chainsync-address option has the INPUT_CHAINSYNC_ADDRESS environment variable, and -output has OUTPUT.

You can also specify each option in the config file.

input: chainsync

output: log

Plugin arguments can be specified under a special top-level key in the config file.

plugins:
  input:
    chainsync:
      network: preview

  output:
    log:
      level: info

Example usage

Native using remote node
export INPUT_CHAINSYNC_NETWORK=preview
./snek 

Alternatively using equivalent commandline options:

./snek \
  -input-chainsync-network preview
In Docker using local node

First, follow the instructions for Running a Cardano Node in Docker.

docker run --rm -ti \
  -v node-ipc:/node-ipc \
  ghcr.io/blinklabs-io/snek:main

Directories

Path Synopsis
cmd
internal
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL