Skip to content

Potlock indexer built using Django & NEAR Data Lake Framework

License

Notifications You must be signed in to change notification settings

PotLock/django-indexer

Repository files navigation

Potlock Indexer (Django / Poetry / Celery / NEAR Lake Framework)

Stack:

  • Django w/ Poetry
  • Celery for background indexer task
  • NEAR Data Lake Framework for fetching/listening for blocks

Steps to run:

  • Set up env vars via ~/.bashrc or ~/.zshrc (see below)
  • Install poetry
  • Install redis
  • Install postgres
  • Create postgres database potlock for user postgres
  • Activate poetry shell (poetry shell)
  • Install dependencies (poetry install)
  • Run migrations (python manage.py migrate)
  • Update indexer_app.tasks.listen_to_near_events with desired network & start block (if desired)
  • Start celery worker with logger (celery -A base worker --loglevel=info)
  • Start indexer (python manage.py runindexer)
  • Kill indexer (python manage.py killindexer)
    • If for some reason this doesn't kill any active celery tasks, run ps auxww | grep 'celery' | grep -v grep and kill resulting PIDs

Extra commands that might come in useful:

  • Purge celery queue (celery -A base purge)

Env vars example

export PL_AWS_ACCESS_KEY_ID=
export PL_AWS_SECRET_ACCESS_KEY=
export PL_CACHALOT_ENABLED=False
export PL_DEBUG=True
export PL_ENVIRONMENT=local
export PL_LOG_LEVEL=debug
export PL_POSTGRES_DB=potlock
export PL_POSTGRES_HOST=127.0.0.1
export PL_POSTGRES_PASS=
export PL_POSTGRES_PORT=5432
export PL_POSTGRES_USER=$USER
export PL_REDIS_HOST=
export PL_REDIS_PORT=6379
export PL_SENTRY_DSN=

API Basics

Base URL

dev (mainnet): https://dev.potlock.io/api/v1/ testnet: https://test-dev.potlock.io/api/v1/

Authorization

This is a public, read-only API and as such does not currently implement authentication or authorization.

Rate limits of 100 requests/min are enforced to ensure service for all users.

Error Responses

An error response (status code not within range 200-299) will always contain an object body with a message string property containing more information about the error.

Possible Error Codes:

  • 400 (Bad Request)
    • Error in client request
  • 404 (Not found)
    • Requested resource could not be located
  • 500 (Internal Error)
    • Check message string for more information

Pagination

Pagination available using limit and offset query params on endpoints that specify paginated. Default limit is 30.

Endpoints that support pagination will return a success response containing the following:

  • count (int) - total number of items available
  • next (str | null) - pre-populated endpoint link to the next page of results
  • previous (str | null) - pre-populated endpoint link to the previous page of results
  • results (any[]) - array of results

API Endpoints

NB: These endpoints are what is required to integrate with BOS app & replace current RPC calls, but more endpoints can easily be added as needed.

Account endpoints

✅ Get all accounts: GET /accounts (paginated)

✅ Get account by ID (address): GET /accounts/{ACCOUNT_ID}

✅ Get pots for account: GET /accounts/{ACCOUNT_ID}/active_pots (paginated)

Can specify status=live query param to retrieve only pots that are currently active (live matching round)

List endpoints

✅ Get all lists: GET /lists (paginated)

✅ Get list by ID: GET /lists/{LIST_ID} (paginated)

✅ Get registrations for list: GET /lists/{LIST_ID}/registrations (paginated)

Can specify status to filter by using status query param if desired, e.g. status=Approved

Donors endpoints

✅ Get all donors: GET /donors (paginated)

Returns all accounts that have sent at least one donation.

Optional query params:

  • sort (currently only allowed value is most_donated_usd, which returns results in the order of most to least donated in USD) e.g. ?sort=most_donated_usd

Pots endpoints

NB: POT_ID == on-chain Pot address

✅ Get all pots: GET /pots (paginated)

✅ Get applications for pot: GET /pots/{POT_ID}/applications

✅ Get donations for pot: GET /pots/{POT_ID}/donations

✅ Get sponsors for pot: GET /pots/{POT_ID}/sponsors

✅ Get payouts for pot: GET /pots/{POT_ID}/payouts

Stats endpoints

✅ Get stats: GET /stats

Returns:

  • total_donations_usd
  • total_payouts_usd
  • total_donations_count
  • total_donors_count
  • total_recipients_count

About

Potlock indexer built using Django & NEAR Data Lake Framework

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages