oasisprotocol / nexus

Official indexer for the Oasis Network.
Apache License 2.0
15 stars 4 forks source link
blockchain crypto database db indexer network oasis official postgres postgresql

Oasis Nexus

ci-lint ci-test

The official indexer for the Oasis Network. Nexus continuously fetches blockchain data from one or more oasis nodes and related sources (Sourcify, Oasis Metadata Registry, ...), parses the data and stores it into a heavily indexed SQL database, and provides a JSON-based web API to access the data.

Nexus aims to serve as the backend for explorers and wallets, notably the official Oasis Explorer and Oasis Wallet.

Docker Development

You can build and run Oasis Nexus with docker compose. Keep reading to get started, or take a look at our Docker docs for more detail.

Configuration

Download the current network's genesis document to the docker/node/etc directory. You will need this to run the Oasis Node container.

Build

From the repository root, you can run:

make docker

Run

From the repository root, you can run:

make start-docker

The analyzer will run DB migrations on start (i.e. create empty tables) based on files in storage/migrations.

Query

Now you can query the Oasis Nexus API

curl -X GET http://0.0.0.0:8008/v1

For a full list of endpoints see our API docs.

Local Development

Below are instructions for running Oasis Nexus locally, without Docker.

Oasis Node

You will need to run a local node for development purposes. You will need to set the Unix socket in the config/local-dev.yaml file while running an instance of Oasis Nexus. For example, this will be unix:/node/data/internal.sock in Docker.

Note: A newly created node takes a while to fully sync with the network. The Oasis team has a node that is ready for internal use; if you are a member of the team, ask around to use it and save time.

Database

You will need to run a local PostgreSQL DB.

For example, you can start a local Docker instance of Postgres with:

make postgres

and later browse the DB with

make psql

Nexus

You should be able to make nexus and run ./nexus --config config/local-dev.yml from the repository root. This will start the analyzers and the HTTP server, but you can start each of the constituent services independently as well. See ./nexus --help for more details.

Once Nexus has started, you can query the Oasis Nexus API

curl -X GET http://localhost:8008/v1

Debugging note: A lot of indexing happens when parsing the genesis data. To see what SQL statements genesis is converted into, run nexus with NEXUS_DUMP_GENESIS_SQL=/tmp/genesis.sql. The SQL will be written to the indicated file, provided that genesis hasn't been parsed into the DB yet. The easiest way to achieve the latter is to wipe the DB.

Code Quality Tools / Dependencies

Here are our recommendations for getting the tools that make lint and make fmt use. None of these are strictly needed to compile Nexus or even to create a PR, but without them, you're at the mercy of CI.

Name Origin

"Nexus" is a Latin word, meaning "connection or series of connections linking two or more things". Similarly, Oasis Nexus connects off-chain products with the Oasis blockchain.