Baremetal
Authors: [man4ela | catapulta.eth]
System Requirements
8 Cores (Fastest per core speed)
Debian 12/Ubuntu 22.04
16 GB
1TB+ (SSD)
Run a tracing node
Geth's debug
and txpool
APIs and OpenEthereum's trace
module provide non-standard RPC methods for getting a deeper insight into transaction processing. Supporting these RPC methods is important because many protocols, such as The Graph, rely on them to index blockchain data.
To use the supported RPC methods, you need to run a tracing node. This guide covers the steps of how to set up and sync a tracing node on Moonbeam.
Pre-Requisites
sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove -y
sudo apt install -y git make wget gcc pkg-config libusb-1.0-0-dev libudev-dev jq gcc g++ curl libssl-dev screen apache2-utils build-essential pkg-config
Setting up Firewall
Set explicit default UFW rules
sudo ufw default deny incoming
sudo ufw default allow outgoing
Allow SSH
sudo ufw allow 22/tcp
Allow remote RPC connections with Moonbeam node (The default port for parachains is 9944
and 9945
for the embedded relay chain)
sudo ufw allow from ${REMOTE.HOST.IP} to any port 9944 9945
Not advised to allow all or unknown IP address to RPC port
Enable Firewall
sudo ufw enable
Building a Node on Moonbeam
Download the Latest Release Binary
Check release binary page and take the following steps to download the latest version:
Create a directory to store the binary and chain data (you might need sudo
)
mkdir /var/lib/moonbeam-data
Use wget
to grab the latest release binary and output it to the directory created in the previous step:
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.2/moonbeam \
-O /var/lib/moonbeam-data/moonbeam
To verify that you have downloaded the correct version, you can run the following command in your terminal
sha256sum /var/lib/moonbeam-data/moonbeam
You should receive the following output:
71242b8cdf2b97fba4aadb7d6050e0b46eaacafae6bcde9b5f5534aff620d144
Setup the Wasm Overrides (required for a tracing node)
You'll need to create a directory for the Wasm runtime overrides and obtain them from the Moonbeam Runtime Overrides repository on GitHub
git clone https://github.com/moonbeam-foundation/moonbeam-runtime-overrides.git
Move the Wasm overrides into your on-chain data directory:
mv moonbeam-runtime-overrides/wasm /var/lib/moonbeam-data
Delete the override files for the networks that you aren't running
rm /var/lib/moonbeam-data/wasm/moonriver-runtime-* && rm /var/lib/moonbeam-data/wasm/moonbase-runtime-*
Set permissions for the overrides
chmod +x /var/lib/moonbeam-data/wasm/*
Create the Configuration File
The next step is to create the systemd configuration file, you'll need to:
Replace
INSERT_YOUR_NODE_NAME
in two different places with the preffered name (it specifies a human-readable name for the node, which can be seen on telemetry, if enabled)--db-cache
specifies the memory the database cache is limited to use. It is recommended to set it to 50% of the actual RAM your server has. For example, for 128 GB RAM, the value must be set to64000
. The minimum value is2000
, but it is below the recommended specsDouble-check that the binary is in the proper path as described below (ExecStart)
Double-check the base path if you've used a different directory
Name the file
/etc/systemd/system/moonbeam.service
Ensure that you grant execute permission to the binary file
sudo chmod +x /var/lib/moonbeam-data/moonbeam
sudo nano /etc/systemd/system/moonbeam.service
Copy/Paste and edit INSERT_YOUR_NODE_NAME
and --db-cache
according to your parameters:
[Unit]
Description="Moonbeam service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=root
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
--rpc-port 9944 \
--execution wasm \
--wasm-execution compiled \
--state-pruning archive \
--trie-cache-size 1073741824 \
--runtime-cache-size 64 \
--ethapi debug,trace,txpool \
--wasm-runtime-overrides /var/lib/moonbeam-data/wasm \
--unsafe-rpc-external \
--rpc-cors all \
--db-cache 64000 \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name "INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
Ctrl+X and Y to save changes
systemctl enable moonbeam.service #enable moonbeam service at system startup
sudo systemctl daemon-reload #refresh systemd configuration when changes made
sudo systemctl start moonbeam.service #start moonbeam
sudo systemctl stop moonbeam.service #stop moonbeam
journalctl -f -u moonbeam.service #follow logs of moonbeam service
The logs should look like the below example and indicate that your node syncs and is expected to reach chainhead in 3-4 days
Syncing 27.0 bps, target=#6051603 (30 peers), best: #3053702 (0xe669…1876), finalized #918931 (0x6587…f763), ⬇ 484.9kiB/s ⬆ 0.5kiB/s
Maintain Your Node
As Moonbeam development continues, it will sometimes be necessary to upgrade your node software.
IMPORTANT NOTE: Make sure you update your tracing runtime overrides each time there is a new runtime upgrade, otherwise you won't be able to support the trace/debug/txpool API properly
For trace/debug/txpool API support
cd /root/moonbeam-runtime-overrides
git fetch && git pull
sudo systemctl stop moonbeam.service
rm -rf /var/lib/moonbeam-data/wasm
mv moonbeam-runtime-overrides/wasm /var/lib/moonbeam-data
rm /var/lib/moonbeam-data/wasm/moonbase-runtime-* && rm /var/lib/moonbeam-data/wasm/moonriver-runtime-*
sudo chmod ugo+x /var/lib/moonbeam-data/wasm/*
sudo systemctl restart moonbeam.service
To update moonbeam client, you can keep your existing chain data in tact, and only update the binary by following these steps:
Stop the systemd service
sudo systemctl stop moonbeam.service
Remove the old binary file
rm /var/lib/moonbeam-data/moonbeam
Get the latest version of the Moonbeam release binary on GitHub and run the following command to update to that version (ensure to replace
INSERT_NEW_VERSION_TAG
with actual version)
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/INSERT_NEW_VERSION_TAG/moonbeam \
-O /var/lib/moonbeam-data/moonbeam
Update permissions
chmod +x /var/lib/moonbeam-data/moonbeam
Start moonbeam service
systemctl start moonbeam.service
References
Last updated
Was this helpful?