Skip to content

terra-money/fcd

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
gregnuj
May 9, 2023
9c1adeb · May 9, 2023

History

48 Commits
Mar 28, 2023
Mar 28, 2023
May 23, 2022
May 23, 2022
Feb 28, 2023
May 9, 2023
May 9, 2023
May 23, 2022
May 9, 2023
May 9, 2023
May 23, 2022
May 9, 2023
May 23, 2022
May 9, 2023
May 25, 2022
May 23, 2022
May 23, 2022
May 9, 2023
May 9, 2023
Mar 28, 2023
May 23, 2022
May 23, 2022

Repository files navigation

Terra FCD

Banner

Modules

  • Collector(Indexer)

    • Takes block and tx from LCD and stores into the database in a usable form
    • Stores issuance, network and staking information to database every minute
    • Collect & cache validator info and store in db
    • Calculate validator daily return
    • Collect & cache proposal info
  • Rest API server

    • Serves data via RESTFul API

Prerequisites

  1. Node.js v16.x or later
  2. PostgreSQL v12.x or later

Project setup

1. Clone

$ git clone https://github.com/terra-money/fcd.git

2. Install packages

npm i

3. Setup the database

FCD requires PostgreSQL as a backend database and TypeORM as an ORM.

Create a new database for FCD

postgres=> CREATE DATABASE fcd OWNER terra;

Synchronize Database Scheme

Table schema has to be synced before running Collector by setting synchronize to true. There is many way to configure TypeORM. Example is below:

ormconfig.js

module.exports = {
  name: 'default',
  type: 'postgres',
  host: 'localhost',
  database: 'fcd',
  username: 'terra',
  password: '<password>',
  synchronize: true
}

You shall not use CLI method, and it is good to disable synchronize option after the first sync.

4. Configure Environment Variables

Name Description Default Module(s)
CHAIN_ID Chain ID of Terra network bombay-12 API, Collector
INITIAL_HEIGHT The initial height of network. (Define 4724001 for Columbus-5) Collector
LCD_URI LCD URI for Terra network https://bombay-lcd.terra.dev API, Collector
RPC_URI RPC URI for Terra network required: http://x.x.x.x:26657 API, Collector
USE_LOG_FILE Write logs to logs directory false API, Collector
SENTRY_DSN Sentry DSN for error management (optional) API, Collector
SERVER_PORT Listening port for API server 3060 API
FCD_URI FCD URI for Terra network https://bombay-fcd.terra.dev API
DISABLE_API Disable REST APIs false API
EXCLUDED_ROUTES List of regular expression string for excluding routes [] API
MIN_GAS_PRICES Minimum gas price by denom object {"uluna": "5.0"} API
TOKEN_NETWORK Network specifier for whitelisted tokens required: mainnet / testnet API

In Terra, we use direnv for managing environment variable for development. See sample of .envrc

Running modules

Developement

  • Collector
    npm run coldev
  • API
    npm run dev
  • Test
    npm run test
    • Tests are designed to use testnet

Production

  • Collector
    npm run collector
  • API
    npm run start

APIDoc & Swagger

  • Generate by npm run apidoc
  • Access UI from: http://localhost:3060/apidoc

Swagger 2.0 (https://swagger.io)

  • Generate by npm run swagger
  • Access UI from: http://localhost:3060/swagger
  • Access the definition from: http://localhost:3060/static/swagger.json

Generate swagger for AWS api gateway

npm run swagger -- --apigateway
  • Generated file can be directly imported to aws api gateway
  • NB : its uses empty schema for response object as api gateway support object and properties name only having alphanum.

Generate combined swagger for lcd and fcd

npm run mergeswagger -- -o filename
  • Combined swagger file will be saved in static directory in project root
  • If no filename provided as command line argument then default saved file name is combined-swagger.json
  • To generate combined swagger for AWS API Gateway add --apigateway parameter

Find LocalTerra to run whole ecosystem locally

https://github.com/terra-money/localterra