BlockAtlas is a clean explorer API and transaction observer for cryptocurrencies.
BlockAtlas connects to nodes or explorer APIs of the supported coins and maps transaction data, account transaction history into a generic, easy to work with JSON format. It is in production use at the Trust Wallet app, the official cryptocurrency wallet of Binance. Also is in production at the BUTTON Wallet, Telegram based non-custodial wallet. The observer API watches the chain for new transactions and generates notifications by webhooks.
- Go Toolchain versions 1.13+
- Redis instance (observer and markets)
There are multiple services:
- Platform API - to get transactions, staking, tokens, domain lookup for supported coins in common format
- Observer API - to subscribe several addresses on different supported coins and receive webhook
- Swagger API - swagger for all handlers of 1-3 APIs. You need to route requests to them on you own (nginx)
There are workers that are linked with Observer API and Market API:
- Platform Observer - fetching latest blocks, parse them to common block specification, check subscribed addresses - send webhook. We use Redis to get information about subscribed addresses per coin with webhooks and caching latest block that was processed by observer
Observer API <-> Redis <-> Platform Observer
You can run platform API for specific coin only!
cd cmd/platform_api
ATLAS_PLATFORM=ethereum go run main.go
You will run platform API for Ethereum coin only. You can run 30 coins with 30 binaries for scalability and sustainability. Howevever, you can run all of them at once by using ATLAS_PLATFORM=all
env param
It works the same for platoform_observer - you can run all observer at 1 binary or 30 coins per 30 binaries
# Download source to $GOPATH
go get -u github.com/trustwallet/blockatlas
cd $(go env GOPATH)/src/github.com/trustwallet/blockatlas
# Start platform_observer with the path to the config.yml ./
go build -o platform-observer-bin cmd/platform_observer/main.go && ./platform-observer-bin -c config.yml
# Start Platform API server at port 8420 with the path to the config.yml ./
go build -o platform-api-bin cmd/platform_api/main.go && ./platform-api-bin -p 8420 -c config.yml
# Start Observer API server at port 8422 with the path to the config.yml ./
go build -o observer-api-bin cmd/observer-api/main.go && ./observer-api-bin -p 8422 -c config.yml
# Startp Swagger API server at port 8422 with the path to the config.yml ./
go build -o swagger-api-bin cmd/swagger-api/main.go && ./swagger-api-bin -p 8423
OR
make go-build
Then
make start
Build and run from local Dockerfile:
You should change config.yml
:
redis: redis://redis:6379
Then build:
docker-compose build
Run all services:
docker-compose up
If you need to start one service:
# Run only platform API
docker-compose start platform_api
# Run only observer for addresses and api for it
docker-compose start platform_observer observer_api redis
# Run swagger api
docker-compose start swagger_api
Block Atlas can run just fine without configuration. By default, all coins offering public RPC/explorer APIs are enabled.
If you want to use custom RPC endpoints, or enable coins without public RPC (like Nimiq),
you can configure Block Atlas over config.yml
or environment variables.
Config is loaded from config.yml
if it exists in the working directory.
The repository includes a default config for reference with all available config options.
Example (config.yml
):
nimiq:
api: http://localhost:8648
#...
The rest gets loaded from environment variables.
Every config option is available under the ATLAS_
prefix.
Nested keys are joined via _
(Example nimiq.api
=> NIMIQ_API
)
Example:
ATLAS_NIMIQ_API=http://localhost:8648
Swagger API docs provided at path /swagger/index.html
-
After creating a new route, add comments to your API source code, See Declarative Comments Format.
-
Download Swag for Go by using:
$ go get -u github.com/swaggo/swag/cmd/swag
-
Run the Swag in your Go project root folder.
$ swag init -g ./cmd/platform_api/main.go -o ./docs
If you'd like to add support for a new blockchain, feel free to file a pull request. Note that most tokens that run on top of other chains are already supported and don't require code changes (e.g. ERC-20).
The best way to submit feedback and report bugs is to open a GitHub issue. Please be sure to include your operating system, version number, and steps to reproduce reported bugs.
More resources for developers are in CONTRIBUTING.md.