Introduction
Introduction
Unchained is a multi-blockchain backend interface with three main goals:
Provide a common interface to multiple blockchains
Provide additional information not always accessible from the node directly
Provide realtime updates about blockchain transactions (pending and confirmed)
Table Of Contents
Helpful Docs
Coin Stack Components
Node - coin specific node daemon providing historical blockchain data (ex. bitcoind, geth, etc)
Indexer - optional service that indexes transaction and balance history by address, or any other applicable information, if not provided by the node directly
API - provides a base set of functionality via REST and WebSocket that can be extended with coin specific logic
Architecture Diagrams
With Indexer | No Indexer |
---|---|
Notes
The ethereum coinstack is used in all examples. If you wish to run a different coinstack, just replace
ethereum
with the coinstack name you wish to runAll paths are relative to the root unchained project directory (ex.
unchained/[go|node]/{path}
)All
pulumi
commands should be run in apulumi/
directory (ex.pulumi/
,coinstacks/ethereum/pulumi/
)
Local Networking
We use traefik as a reverse-proxy to expose all of our docker containers. Traefik is exposed at port 80
. Traefik Dashboard is exposed at port 8080
Traefik routes requests based on host name. which includes the coinstack name. For Example:
api.ethereum.localhost
Setup
Both
go
andnode
module have linter installed in git pre-commit hook. To set up the hook:
Docker-Compose Local Dev Instructions
Prerequisites
Install docker-compose
Running
Install node dependencies
Start the reverse proxy and any common service (ex. hot reloading):
Note:
-d
runs the containers in daemon (background) mode. If you want to see logs,-d
can be omitted.Start a coinstack:
Visit http://api.ethereum.localhost/docs to view the OpenAPI documentation for the API
Tear down a coinstack (including docker volumes):
Common Issues
If you are running Docker Desktop and see any
SIGKILL
errors, increase your resource limits in the Resources Tab.Mac OS: when running one of the go coinstacks via
docker-compose
on, you might encounter an issue with the service failing to start indefinitely. This is due to Mac OS network security blocking the service from starting. To work around that issue, run the coinstack directly from CLI:This will trigger the security popup, allow the go process to make the network calls. Once you approve it, you can kill the process and restart
docker-compose
. The app should start immediately.Mac OS: once you start a coinstack you should be able to access unchained in the browser without further config, but for CLI access to work you need to modify
/etc/hosts
and add a valid DNS entry:
Last updated