Home

Awesome

Esplora Block Explorer

build status docker release MIT license Pull Requests Welcome IRC

Block explorer web interface based on the esplora-electrs HTTP API.

Written as a single-page app in a reactive and functional style using rxjs and cycle.js.

See live at Blockstream.info.

API documentation is available here.

Join the translation efforts on Transifex.

Esplora

Features

Developing

To start a development server with live babel/browserify transpilation, run:

$ git clone https://github.com/Blockstream/esplora && cd esplora
$ npm install
$ export API_URL=http://localhost:3000/ # or https://blockstream.info/api/ if you don't have a local API server
# (see more config options below)
$ npm run dev-server

The server will be available at http://localhost:5000/

To display debugging information for the Rx streams in the web developer console, set localStorage.debug = '*' and refresh.

Building

To build the static assets directory for production deployment, set config options (see below) and run $ npm run dist. The files will be created under dist/.

Because Esplora is a single-page app, the HTTP server needs to be configured to serve the index.html file in reply to missing pages. See contrib/nginx.conf.in for example nginx configuration (TL;DR: try_files $uri /index.html).

Pre-rendering server (noscript)

To start a pre-rendering server that generates static HTML replies suitable for noscript users, run:

# (clone, cd, "npm install" and configure as above)

$ export STATIC_ROOT=http://localhost:5000/ # for loading CSS, images and fonts
$ npm run prerender-server

The server will be available at http://localhost:5001/

Configuration options

All options are optional.

GUI options

Note that API_URL should be set to the publicly-reachable URL where the user's browser can issue requests at. (that is, not via localhost, unless you're setting up a dev environment where the browser is running on the same machine as the API server.)

Elements-only configuration:

Menu configuration (useful for inter-linking multiple instances on different networks):

Development server options

All GUI options, plus:

Pre-rendering server options

All GUI options, plus:

Note that unlike the regular JavaScript-based app that sends API requests from the client-side, the pre-rendering server sends API requests from the server-side. This means that API_URL should be configured to the URL reachable by the server, typically http://localhost:3000/.

How to build the Docker image

docker build -t esplora .

Alternatively, you may use the pre-built blockstream/esplora image from Docker Hub.

How to run the explorer for Bitcoin mainnet

docker run -p 50001:50001 -p 8080:80 \
           --volume $PWD/data_bitcoin_mainnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-mainnet explorer"

How to run the explorer for Liquid mainnet

docker run -p 50001:50001 -p 8082:80 \
           --volume $PWD/data_liquid_mainnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-mainnet explorer"

How to run the explorer for Bitcoin testnet3

docker run -p 50001:50001 -p 8084:80 \
           --volume $PWD/data_bitcoin_testnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-testnet explorer"

How to run the explorer for Bitcoin signet

docker run -p 50001:50001 -p 8084:80 \
           --volume $PWD/data_bitcoin_signet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-signet explorer"

How to run the explorer for Liquid testnet

docker run -p 50001:50001 -p 8096:80 \
           --volume $PWD/data_liquid_testnet:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-testnet explorer"

How to run the explorer for Liquid regtest

docker run -p 50001:50001 -p 8092:80 \
           --volume $PWD/data_liquid_regtest:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh liquid-regtest explorer"

How to run the explorer for Bitcoin regtest

docker run -p 50001:50001 -p 8094:80 \
           --volume $PWD/data_bitcoin_regtest:/data \
           --rm -i -t esplora \
           bash -c "/srv/explorer/run.sh bitcoin-regtest explorer"

Regtest options

When run for Bitcoin regtest or Liquid regtest, the esplora container will create a default wallet and mine 100 blocks internally. You can disable this behavior by setting NO_REGTEST_MINING=1.

Docker config options

Set -e DEBUG=verbose to enable more verbose logging.

Set -e NO_PRECACHE=1 to disable pre-caching of statistics for "popular addresses", which may take a long time and is not necessary for personal use.

Set -e NO_ADDRESS_SEARCH=1 to disable the by-prefix address search index.

Set -e ENABLE_LIGHTMODE=1 to enable esplora-electrs's light mode.

Set -e ONION_URL=http://xyz.onion to enable the Onion-Location header.

Build new esplora-base

docker build -t blockstream/esplora-base:latest -f Dockerfile.deps .
docker push blockstream/esplora-base:latest
docker inspect --format='{{index .RepoDigests 0}}' blockstream/esplora-base

Build new tor (or you can pull directly from Docker Hub - blockstream/tor:latest)

docker build --squash -t blockstream/tor:latest -f Dockerfile.tor .
docker push blockstream/tor:latest
docker inspect --format='{{index .RepoDigests 0}}' blockstream/tor

Run: docker -d --name hidden_service blockstream/tor:latest tor -f /home/tor/torrc (could add a -v /extra/torrc:/home/tor/torrc, if you have a custom torrc)

Example torrc:

DataDirectory /home/tor/tor
PidFile /var/run/tor/tor.pid

ControlSocket /var/run/tor/control GroupWritable RelaxDirModeCheck
ControlSocketsGroupWritable 1
SocksPort unix:/var/run/tor/socks WorldWritable
SocksPort 9050

CookieAuthentication 1
CookieAuthFileGroupReadable 1
CookieAuthFile /var/run/tor/control.authcookie

Log [handshake]debug [*]notice stderr

HiddenServiceDir /home/tor/tor/hidden_service_v3/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:80

License

MIT