Skip to content
This repository has been archived by the owner on May 5, 2022. It is now read-only.
/ watchmarket Public archive

Watchmarket is an aggregation and caching service for blockchain market information

Notifications You must be signed in to change notification settings

trustwallet/watchmarket

Repository files navigation

Watchmarket

CI codecov Go Report Card Dependabot Status

Watchmarket is a Blockchain explorer API aggregator and caching layer. It's your one-stop-shop to get information for (almost) any coin in a common format

Watchmarket comes with three apps:

  • API: RESTful API to retrieve coin info, charts, and tickers
  • Worker: fetch and parse data from market APIs and store it at DB
  • Swagger: API explorer

Supported Market APIs

Getting started

Setup

make install
make start-docker-services
make seed-db

Start the app:

make start

# Alternative
cd cmd/api && go run main.go
cd cmd/worker && go run main.go

ID system

We are using a asset id system. For each coin we have a unique asset_id of type string.

How to build asset id?

Asset ID consists of 2 parts and it possible to add new parts later. Example: c714_tTWT-8C2 Where:

  • 714 is id of coin (c for coin). We use standarts of BIP-44 slips for coins
  • TWT-8C2 is token id - unique identifier of token for blockchain. It could be an address for ETH for example.

Using API:

A. Get coin details about Ehtereum (coin 60 according to SLIPs)

  • curl -v "http://localhost:8421/v1/market/info?coin=60" | jq .
  • curl -v "http://localhost:8421/v2/market/info/c60" | jq .

B. Get current ticker price of Ethereum in USD:

  • curl -v -X POST 'http://localhost:8421/v1/market/ticker' -H 'Content-Type: application/json' -d '{"currency":"USD","assets":[{"type":"coin","coin":60}]}'
  • curl -v -X POST 'http://localhost:8421/v2/market/tickers' -H 'Content-Type: application/json' -d '{"currency":"USD","assets":["c60","c0","c714","c714_tTWT-8C2","c459","c61"]}'
  • curl -v "http://localhost:8421/v2/market/ticker/c60" | jq .
  • curl -v "http://localhost:8421/v2/market/tickers?assets=c60,c714,c714_TWT-8C2" | jq .

C. Get price interval of Ethereum to build chart starting from 1574483028 (UNIX time)

  • curl -v "http://localhost:8421/v1/market/charts?coin=60&time_start=1574483028" | jq .
  • curl -v "http://localhost:8421/v2/market/charts/c60?time_start=1574483028" | jq .

Use make stop to stop the services

Run make to see a list of all available build directives.

Local development with Kubernetes

Setup Docs

  1. Install Tilt
  2. Install Docker+Kubernetes
  3. Install Helm3

Setup for MacOS

  1. Enable Kubernetes in Docker Desktop preferences
  2. kubectl config use-context docker-desktop
  3. curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
  4. curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Development with Tilt

Start

  1. Run tilt up to start the project
  2. Press space to open browser

Cleanup

  1. Press Ctrl+C to stop tilt local server
  2. Run tilt down to stop and clear allocated resources in local kubernetes