Skip to content

Graph Protocol indexer components and infrastructure

License

Notifications You must be signed in to change notification settings

suntzu93/indexer

Repository files navigation

Graph Protocol Indexer Components (Private)

CI Docker Image: Indexer Service Docker Image: Indexer Agent

This repository is managed using Lerna and Yarn workspaces.

Chan is (or will be) used to maintain the following changelogs:

Running from NPM packages

The indexer service and agent can be installed as NPM packages, using

npm install -g @graphprotocol/indexer-service --registry https://testnet.thegraph.com/npm-registry/
npm install -g @graphprotocol/indexer-agent   --registry https://testnet.thegraph.com/npm-registry/

After that, they can be run with the following commands:

# Indexer service
graph-indexer-service start ...

# Indexer agent
graph-indexer-agent start ...

Usage

Indexer service

$ graph-indexer-service start --help

Start the service

Ethereum
  --ethereum  Ethereum node or provider URL                  [string] [required]
  --mnemonic  Ethereum wallet mnemonic                       [string] [required]

Indexer Infrastructure
  --port                        Port to serve from      [number] [default: 7600]
  --graph-node-query-endpoint   Graph Node endpoint to forward queries to
                                                             [string] [required]
  --graph-node-status-endpoint  Graph Node endpoint for indexing statuses etc.
                                                             [string] [required]

Network Subgraph
  --network-subgraph-deployment  Network subgraph deployment            [string]
  --network-subgraph-endpoint    Endpoint to query the network subgraph from
                                                                        [string]

Options:
  --version                Show version number                         [boolean]
  --help                   Show help                                   [boolean]
  --free-query-auth-token  Auth token that clients can use to query for free
                                                                         [array]

Indexer agent

$ graph-indexer-agent start --help

Start the agent

Ethereum
  --ethereum  Ethereum node or provider URL                  [string] [required]
  --mnemonic  Mnemonic for the wallet                        [string] [required]

Indexer Infrastructure
  --graph-node-query-endpoint   Graph Node endpoint for querying subgraphs
                                                             [string] [required]
  --graph-node-status-endpoint  Graph Node endpoint for indexing statuses etc.
                                                             [string] [required]
  --graph-node-admin-endpoint   Graph Node endpoint for applying and updating
                                subgraph deployments         [string] [required]
  --public-indexer-url          Indexer endpoint for receiving requests from the
                                network                      [string] [required]
  --indexer-geo-coordinates     Coordinates describing the Indexer's location
                                using latitude and longitude
                                   [array] [default: ["31.780715","-41.179504"]]
  --index-node-ids              Node IDs of Graph nodes to use for indexing
                                                              [array] [required]
  --indexer-management-port     Port to serve the indexer management API at
                                                        [number] [default: 8000]

Network Subgraph
  --network-subgraph-deployment  Network subgraph deployment            [string]
  --network-subgraph-endpoint    Endpoint to query the network subgraph from
                                                                        [string]

Protocol
  --default-allocation-amount  Default amount of GRT to allocate to a subgraph
                               deployment             [string] [default: "0.01"]

Postgres
  --postgres-host      Postgres host                         [string] [required]
  --postgres-port      Postgres port                    [number] [default: 5432]
  --postgres-username  Postgres username          [string] [default: "postgres"]
  --postgres-password  Postgres password                  [string] [default: ""]
  --postgres-database  Postgres database name                [string] [required]

Options:
  --version  Show version number                                       [boolean]
  --help     Show help                                                 [boolean]

Running from source

Run the following at the root of this repository to install dependencies and build the packages:

yarn

After this, the indexer service and agent can be run with:

# Indexer service
cd packages/indexer-service
./bin/graph-indexer-service start ...

# Indexer agent
cd packages/indexer-service
./bin/graph-indexer-service start ...

Docker images

The easiest way to run the indexer service agent is by using Docker. Docker images can either be pulled via

docker pull graphprotocol/indexer-service:latest
docker pull graphprotocol/indexer-agent:latest

or built locally with

# Indexer service
docker build \
  --build-arg NPM_TOKEN=<npm-token> \
  -f Dockerfile.indexer-service \
  -t indexer-service:latest \
  .

# Indexer agent
docker build \
  --build-arg NPM_TOKEN=<npm-token> \
  -f Dockerfile.indexer-agent \
  -t indexer-agent:latest \
  .

After this, the indexer agent and service can be run as follows:

  1. Indexer service:

    docker run \
      -p 7600:7600 \
      -it indexer-service:latest \
      ...

    After this, the indexer service should be up and running at http://localhost:7600/.

  2. Indexer Agent

    docker run \
      -p 18000:8000 \
      -it indexer-agent:latest \
      ...
    ```
    
    This starts the indexer agent and serves the so-called indexer management API
    on the host at port 18000.
    

Releasing

Creating a new release involves the following steps:

  1. Update all changelogs:

    cd packages/indexer-service
    chan added ...
    chan fixed ...
    chan changed ...
    chan release <new-version>
    cd ../..
    
    cd packages/indexer-agent
    ...
    cd ../..
  2. Commit these changelogs:

    git add packages/**/CHANGELOG.md
    git commit -m "Update changelogs ahead of release"
  3. Publish a new release:

    lerna publish

    When it asks for the version to release, select the same one that was used when updating the changelogs.

Copyright

Copyright © 2020 Graph Protocol, Inc.

About

Graph Protocol indexer components and infrastructure

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.3%
  • HCL 1.3%
  • Other 0.4%