Midgard - Linux
Setting up Midgard on Linux
Prerequisites
Install all needed packages for building and running midgard
apt install -y --no-install-recommends apt-transport-https gcc gnupg lsb-release postgresql postgresql-common wget
Application user
Add the application user that is used to run the thornode daemon
useradd -m midgard -s /bin/bash
Database
Install TimescaleDB
Run the PostgreSQL package setup script
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
Add the TimescaleDB package
echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
Install the TimescaleDB GPG key
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/timescaledb.gpg
Update your local repository list and install TimescaleDB
apt update
sudo apt install timescaledb-2-postgresql-16 postgresql-client-16
Tune your PostgreSQL instance for TimescaleDB
timescaledb-tune
Restart PostgreSQL
systemctl restart postgresql
Create midgard database
su - postgres
psql
CREATE USER midgard WITH ENCRYPTED PASSWORD 'password';
CREATE DATABASE midgard OWNER midgard;
exit
Install TimescaleDB extension
Connect to the database
psql -d "postgres://midgard:password@localhost:5432/midgard"
Add TimescaleDB to the database
CREATE EXTENSION IF NOT EXISTS timescaledb;
Check that TimescaleDB is installed
\dx
List of installed extensions
Name | Version | Schema | Description
-------------+---------+------------+---------------------------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 2.16.1 | public | Enables scalable inserts and complex queries for time-series data (Community Edition)
(2 rows)
Install
As midgard
user run:
git clone --branch 2.24.4 https://gitlab.com/thorchain/midgard.git $HOME/build
cd $HOME/build
export ENV CGO_ENABLED=1
go install -v -installsuffix cgo ./cmd/blockstore/dump
go install -v -installsuffix cgo ./cmd/midgard
go install -v -installsuffix cgo ./cmd/trimdb
go install -v -installsuffix cgo ./cmd/statechecks
mkdir -p $HOME/{config,openapi/generated}
cp openapi/generated/doc.html $HOME/openapi/generated/
Configuration
As midgard
user run:
mkdir $HOME/config
# get genesis.json
curl https://storage.googleapis.com/public-snapshots-ninerealms/genesis/17562000.json -o $HOME/config/genesis.json
Add midgard config
{
"listen_port": 8080,
"max_block_age": "60s",
"shutdown_timeout": "5s",
"thorchain": {
"last_chain_backoff": "7s",
"fetch_batch_size": 100,
"parallelism": 4,
"read_timeout": "60s",
"tendermint_url": "https://rpc.ninerealms.com/websocket",
"thornode_url": "https://thornode.ninerealms.com/thorchain",
"fork_infos": [
{
"chain_id": "thorchain-1",
"earliest_block_hash": "0B3C8F9E3EA7E9B1C10CAC5217ED771E0540671EFB9C5315BF01167266BCBEDF",
"earliest_block_height": 17562001
}
]
},
"timescale": {
"user_name": "midgard",
"password": "password",
"database": "midgard",
"sslmode": "disable",
"commit_batch_size": 100,
"max_open_conns": 100,
"no_auto_update_ddl": true,
"host": "localhost",
"port": 5432
},
"websockets": {
"enable": false,
"connection_limit": 100
},
"usdpools": [
"BNB.BUSD-BD1",
"BNB.BUSD-BAF",
"BNB.USDT-DC8",
"ETH.USDT-0X62E273709DA575835C7F6AEF4A31140CA5B1D190",
"ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7",
"AVAX.USDC-0XB97EF9EF8734C71904D8002F8B6BC66DD9C48A6E",
"ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48"
],
"genesis": {
"local": "/home/midgard/config/genesis.json",
"initial_block_height": 17562001,
"initial_block_hash": "0B3C8F9E3EA7E9B1C10CAC5217ED771E0540671EFB9C5315BF01167266BCBEDF"
},
"blockstore": {
"local": "./tmp/blockstore",
"remote": "https://snapshots.ninerealms.com/snapshots/midgard-blockstore/"
}
}
Systemd
Create a service file to be able to manage the Midgard process via systemd
[Unit]
Description=Midgard Daemon
After=network-online.target
[Service]
User=midgard
WorkingDirectory=/home/midgard
ExecStart=/home/midgard/go/bin/midgard /home/midgard/config/midgard.json
Restart=on-abort
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Reload systemd config
systemctl daemon-reload
Start
Start the daemon
systemctl start midgard.service
Last updated