Install core (full node) and headless wallet with Docker compose
Goal
This article will guide you to install Hathor core and Hathor headless wallet together, with Docker compose.
Hathor core is the official and reference client for operating a full node in Hathor Network.
Requirements
Requirements for operating Hathor core.
Hardware
For production environment:
- CPU: 2 vCPU
- Memory: 16 GB
- Disk: 20 GB
- Bandwidth: 10 Gbps
Reference machine: AWS EC2 type r6g.large
Software
Platform:
Step-by-step
- Set up the environment.
- Set up configurations.
- Start the containerized applications.
Step 1: set up the environment
- Start a shell session.
- Change the working directory to where you want to store the application — namely, configuration file and database.
- Create the directory
data
, to store the application database (mainly the blockchain).
Step 2: set up configurations
The configuration file of Docker compose requires you to provide a seed phrase that defines a wallet. If you already have a previously generated seed phrase (i.e., wallet), you may use it. Otherwise, you must generate a new seed phrase.
- (Optional) If you don't have a wallet seed phrase, generate a new one:
docker run --rm --entrypoint /bin/sh \
hathornetwork/hathor-wallet-headless \
-c "make words"
The output will be a string of 24 random words.
Anyone with access to a seed phrase can manage the funds of the associated wallet. Also, you cannot manage your wallet without access to the seed phrase or the private keys generated from it. Thus, we strongly recommend storing a backup of the seed phrase (either digital, physical, or both) and ensuring that both the backup and the chosen installation directory are protected against unauthorized access.
- Create the file
docker-compose.yml
. - Write the following configurations, replacing the placeholders:
<24_words_seed_phrase_string>
with the seed phrase (without quotation marks); and<absolute_path_hathor_full_node>
with the absolute path of the (current) working directory (parent ofdata
).
services:
hathor-core:
image: hathornetwork/hathor-core
command: run_node
ports:
- "8080:8080"
- "8081:8081"
volumes:
- <absolute_path_hathor_full_node>/data:/data
environment:
- HATHOR_STATUS=8080
- HATHOR_STRATUM=8081
- HATHOR_TESTNET=true
- HATHOR_DATA=/data
- HATHOR_WALLET_INDEX=true
- HATHOR_CACHE=true
- HATHOR_CACHE_SIZE=100000
hathor-wallet-headless:
image: hathornetwork/hathor-wallet-headless
ports:
- "8000:8000"
environment:
- HEADLESS_HTTP_PORT=8000
- HEADLESS_SEED_DEFAULT=<24_words_seed_phrase_string>
- HEADLESS_NETWORK=testnet
- HEADLESS_SERVER=http://hathor-core:8080/v1a/
Beyond those, you can add any element available to Hathor core and headless wallet configuration in their respective environment
sections of docker-compose.yml
. To do this, you must convert the command option format to the environment variable format. In case of Hathor full node, --some-arbitrary-configuration
becomes HATHOR_SOME_ARBITRARY_CONFIGURATION
. In case of Hathor headless wallet, --some-arbitrary-configuration
becomes HEADLESS_SOME_ARBITRARY_CONFIGURATION
. For example, --data
from the full node becomes HATHOR_DATA
, --gap_limit
from the headless wallet becomes HEADLESS_GAP_LIMIT
, and so forth.
Step 3: start the containerized applications
Start the docker compose service:
docker compose up
The previous command will launch containers for Hathor full node and Hathor headless wallet, based on the respective images tagged as latest
, originated from their respective repositories at Docker Hub, and available in your Docker local environment. If there is no image available from this source for some of them, it automatically pulls the latest one.
Your Hathor full node connects to other peers of Hathor Network testnet and starts syncing its database with theirs — i.e., all blocks and transactions ever recorded in Hathor blockchain testnet.
Task completed
In the browser, you can use the URL http://localhost:8080/v1a/status/ to monitor the status of your full node.
You now have a running instance of Hathor full node in Hathor Network testnet, listening for API requests at port 8080, and a running instance of Hathor headless wallet listening for API requests at port 8000. Note that your full node cannot receive API requests or participate in network consensus while it is not synced with its peers. Syncing is an ongoing process that is part of the operations of a full node. However, reaching synchronization with Hathor Network starting from an empty database (from genesis block) takes on average 10 hours for testnet and 24 hours for mainnet. If you want to expedite this process, see How to bootstrap from a snapshot.
Finally, here we used the minimal configuration to have an operational full node. For a custom setup, see Hathor full node configuration.
What's next?
-
Hathor full node configuration: to customize or refine the installation setup.
-
Hathor full node pathway: to know how to operate this application.
-
Hathor headless wallet pathway: to know how to operate and use this application.