uphold/docker-dash-core

Name: docker-dash-core

Owner: Uphold

Description: A dash docker image

Created: 2017-10-10 14:16:46.0

Updated: 2018-05-15 06:05:47.0

Pushed: 2018-01-19 12:02:02.0

Homepage: null

Size: 12

Language: Shell

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

uphold/docker-dash-core

A Dash Core docker image.

uphold/dash-core uphold/dash-core uphold/dash-core uphold/dash-core

Tags
What is Dash?

from dashwiki

Dash: A Privacy-Centric Crypto-Currency https://www.dash.org

Usage
How to use this image

This image contains the main binaries from the Dash Core project - dashd, dash-cli and dash-tx. It behaves like a binary, so you can pass any arguments to the image and they will be forwarded to the dashd binary:

cker run --rm -it uphold/dash-core \
rinttoconsole \
egtest=1 \
pcallowip=172.17.0.0/16 \
pcpassword=bar \
pcuser=foo

By default, dashd will run as user dash for security reasons and with its default data dir (~/.dashcore). If you'd like to customize where dash-core stores its data, you must use the DASH_DATA environment variable. The directory will be automatically created with the correct permissions for the dash user and dash-core is automatically configured to use it.

cker run --env DASH_DATA=/var/lib/dash --rm -it uphold/dash-core \
rinttoconsole \
egtest=1

You can also mount a directory it in a volume under /home/dash/.dashcore in case you want to access it on the host:

cker run -v ${PWD}/data:/home/dash/.dashcore -it --rm uphold/dash-core \
rinttoconsole \
egtest=1

You can optionally create a service using docker-compose:

-core:
age: uphold/dash-core
mmand:
-printtoconsole
-regtest=1
Using RPC to interact with the daemon

There are two communications methods to interact with a running Dash Core daemon.

The first one is using a cookie-based local authentication. It doesn't require any special authentication information as running a process locally under the same user that was used to launch the Dash Core daemon allows it to read the cookie file previously generated by the daemon for clients. The downside of this method is that it requires local machine access.

The second option is making a remote procedure call using a username and password combination. This has the advantage of not requiring local machine access, but in order to keep your credentials safe you should use the newer rpcauth authentication mechanism.

Using cookie-based local authentication

Start by launch the Dash Core daemon:

cker run --rm --name dash-server -it uphold/dash-core \
rinttoconsole \
egtest=1

Then, inside the running dash-server container, locally execute the query to the daemon using dash-cli:

cker exec --user dash dash-server dash-cli -regtest getmininginfo


locks": 0,
urrentblocksize": 0,
urrentblockweight": 0,
urrentblocktx": 0,
ifficulty": 4.656542373906925e-10,
rrors": "",
etworkhashps": 0,
ooledtx": 0,
hain": "regtest"

In the background, dash-cli read the information automatically from /home/dash/.dashcore/regtest/.cookie. In production, the path would not contain the regtest part.

Using rpcauth for remote authentication

Before setting up remote authentication, you will need to generate the rpcauth line that will hold the credentials for the Dash Core daemon. You can either do this yourself by constructing the line with the format <user>:<salt>$<hash> or use the official rpcuser.py script to generate this line for you, including a random password that is printed to the console.

Example:

rl -sSL https://raw.githubusercontent.com/dashpay/dash/master/share/rpcuser/rpcuser.py | python - foo

ng to be appended to bitcoin.conf:
uth=foo:796d3d89ded5b826c7a4bf2ca8fe465$4cb1618e1552b414941783822b087b2df8c2b8bb1fa3dc441d9fa8f32d43e054
 password:
WkzEpXGNFRQgTCsdKYp8HO11Z6DaoOY8BvV4YhE=

Note that for each run, even if the username remains the same, the output will be always different as a new salt and password are generated.

Now that you have your credentials, you need to start the Dash Core daemon with the -rpcauth option. Alternatively, you could append the line to a dash.conf file and mount it on the container.

Let's opt for the Docker way:

cker run --rm --name dash-server -it uphold/dash-core \
rinttoconsole \
egtest=1 \
pcallowip=172.17.0.0/16 \
pcauth='foo:796d3d89ded5b826c7a4bf2ca8fe465$4cb1618e1552b414941783822b087b2df8c2b8bb1fa3dc441d9fa8f32d43e054'

Two important notes:

  1. Some shells require escaping the rpcauth line (e.g. zsh), as shown above.
  2. It is now perfectly fine to pass the rpcauth line as a command line argument. Unlike -rpcpassword, the content is hashed so even if the arguments would be exposed, they would not allow the attacker to get the actual password.

You can now connect via dash-cli or any other compatible client. You will still have to define a username and password when connecting to the Dash Core RPC server.

To avoid any confusion about whether or not a remote call is being made, let's spin up another container to execute dash-cli and connect it via the Docker network using the password generated above:

cker run --link dash-server --rm uphold/dash-core dash-cli -rpcconnect=dash-server -regtest -rpcuser=foo -rpcpassword='Yec3WkzEpXGNFRQgTCsdKYp8HO11Z6DaoOY8BvV4YhE=' getmininginfo


locks": 0,
urrentblocksize": 0,
urrentblockweight": 0,
urrentblocktx": 0,
ifficulty": 4.656542373906925e-10,
rrors": "",
etworkhashps": 0,
ooledtx": 0,
hain": "regtest"

Done!

Image variants

The uphold/dash-core image comes in multiple flavors:

uphold/dash-core:latest

Points to the latest release available of Dash Core. Occasionally pre-release versions will be included.

uphold/dash-core:<version>

Based on Alpine Linux with Berkeley DB 4.8 (cross-compatible build), targets a specific version branch or release of Dash Core.

Supported Docker versions

This image is officially supported on Docker version 1.12, with support for older versions provided on a best-effort basis.

License

License information for the software contained in this image.

License information for the uphold/dash-core docker project.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.