Tools
On this page you can find tools to setup a node automatically, explorers and other useful dashboards and scripts.
Our documentation often refers to syntax annotated in <> brackets. We use this expression for variables that are unique to each user (like path, local moniker, versions et cetera).
Any syntax in <> brackets needs to be substituted with your correct name or version, without the <> brackets. If you are unsure, please check our table of essential parameters and variables .
Explorers
Nym Network stats can be humanly read on some of the explorers and dashboards.
-
Nym Explorer v2 : Official Nym Explorer
-
SpectreDAO Explorer : By operators for operators - currently the most used Nym explorer
-
Nym Node Status Observatory : An explorer with a list of Nym Nodes, their properformance and per node data
-
Nym Node Status UI : A dashboard displaying results of Gateway probes and much more in one table
-
Nymesis : A slick dashboard by operator community
Nym Node CLI
This interactive command-line-based tool takes an operator through a journey of installing, configuring and starting a nym-node as a systemd service, doing most of the steps automatically for them.
Installation & Running
SSH into your server (VPS)
- The installation of
nym-nodeusing this program requires you to run asroot
Download nym-node-cli.py and make executable
wget https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/nym-node-setup/nym-node-cli.py && \
chmod +x ./nym-node-cli.pyRun the program
There are two ways how to run the program. fully interactive or with provided arguments. The former has a shorter initial command but then operators must fill the values on the go, the latter requires more complex command, but then there is a minimum prompts during the process.
- Fully interactive mode - just run:
./nym-node-cli.py install- Use arguments - run this command to see all options:
./nym-node-cli.py install --help./nym-node-cli.py install --helpusage: nym-node-cli install [-h] [-V] [-d BRANCH] [-v]
[--mode {mixnode,entry-gateway,exit-gateway}]
[--wireguard-enabled {true,false}]
[--hostname HOSTNAME] [--location LOCATION]
[--email EMAIL] [--moniker MONIKER]
[--description DESCRIPTION]
[--public-ip PUBLIC_IP]
[--host-ssh-port HOST_SSH_PORT]
[--nym-node-binary NYM_NODE_BINARY]
[--uplink-dev UPLINK_DEV]
[--uplink-dev-v4 UPLINK_DEV_V4]
[--uplink-dev-v6 UPLINK_DEV_V6] [--env KEY=VALUE]
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
-d, --dev BRANCH Define github branch (default: develop)
-v, --verbose Show full error tracebacks
--mode {mixnode,entry-gateway,exit-gateway}
Node mode: 'mixnode', 'entry-gateway', or 'exit-
gateway'
--wireguard-enabled {true,false}
WireGuard functionality switch: true / false
--hostname HOSTNAME Node domain / hostname
--location LOCATION Node physical country: ISO 3166 alpha-2 (CH), alpha-3
(CHE), numeric (756) or name (Switzerland)
--email EMAIL Contact email for the node operator
--moniker MONIKER Public moniker displayed in explorer & NymVPN app
--description DESCRIPTION
Short public description of the node
--public-ip PUBLIC_IP
External IPv4 address (autodetected if omitted)
--host-ssh-port HOST_SSH_PORT
Host SSH port to allow in the firewall (default: 22)
--nym-node-binary NYM_NODE_BINARY
URL for nym-node binary (autodetected if omitted)
--uplink-dev UPLINK_DEV
Backward-compatible override for both IPv4 and IPv6
uplinks, e.g. 'eth0'
--uplink-dev-v4 UPLINK_DEV_V4
Override IPv4 uplink interface used for NAT/FORWARD,
e.g. 'eth0'
--uplink-dev-v6 UPLINK_DEV_V6
Override IPv6 uplink interface used for NAT/FORWARD,
e.g. 'eth1'
--env KEY=VALUE (Optional) Extra ENV VARS, e.g. --env CUSTOM_KEY=value- An example can look like this:
# substitute with your real values:
./nym-node-cli.py install \
--hostname test-node.devrel.nymte.ch \
--moniker MainnetGW-KU \
--description "This node is installed with nym-node-cli v1.3.0" \
--wireguard-enabled true \
--location KU \
--mode exit-gateway \
--email kawa_hesinkar@ciya.kuRead and follow the prompts
There ware a few required confirmations and in case of running the program without the arguments, you will be prompted for values neccessary to setup a nym-node and configure your server.
Read these prompts carefully!
Setup finished
Congratulation, your node is installed.
This version of the program does not prompt an operator for the local node moniker (--id <ID>) therefore it asigns your node an automatic one default-nym-node.
All configuration and data of your node can be found in this location:
ls $HOME/.nym/nym-nodes/default-nym-node/Node Rewards Tracker
A command-line-based program locally calculating nodes rewards based on provided Nyx account addresses in autogenerated data/wallet-addresses.csv.
Installation & Running
Download the program
There are two options how to get node_rewards_tracker.py
Download the program, using curl
- Open terminal and navigate to your destination directory and run:
curl -L "https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/rewards-tracker/node_rewards_tracker.py" -o node_rewards_tracker.pyPull / clone nymtech/nym repository
- Open terminal and navigate to where you want to have
nymrepostiry and run:
git clone https://github.com/nymtech/nym- Copy
node_rewards_tracker.pyfromnym/scripts/rewards-tracker/node_rewards_tracker.pyto your destination
Make executable and initialise
- In the directory where you have the program saved, run:
chmod u+x ./node_rewards_tracker.py
./node_rewards_tracker.pyThe second command created a /data sub-directory:
└── data
└── wallet-addresses.csvIn case you see an error: ModuleNotFoundError: No module named '...' install these dependencies:
python3 -m venv .venv && . .venv/bin/activate
pip install requests pyyaml tabulate colorama
# or
sudo apt install python3-requests python3-yaml python3-tabulate python3-coloramaAdd your Nyx accounts to wallet-addresses.csv
- Open
data/wallet-addresses.csvin your favourite text editor or a sheet managing tool (Like Libre Office Calc) - Add all node Nyx account addresses to the first column called
addressthat you want to track
Optionally: Add entity and your share to wallet-addresses.csv
-
In the same file operators who want to separate the tracked nodes by an entity, can add this entity to the
tagcolumn -
Same way an operator can define how many operators are sharing the rewards of that entity (ie in a case of DAO) in the column
share -
Csv example with
tags:
address, tag, members
n1foofoofoo, personal, 1
n1barbarbar, personal, 1
n1bazbazbaz, mysquad, 5
n1lollollol, mysquad, 5- For operators having all nodes under one entity, the optional columns will be left empty. Example:
address, tag, members
n1foofoofoo,,
n1barbarbar,,
n1bazbazbaz,,Save wallet-addresses.csv and exit
Run the program
- Run the program:
./node_rewards_tracker.py- You can preview all commands with:
./node_rewards_tracker.py --helpThe Output
The result of running node_rewards_tracker.py is:
- Printed table in terminal
- Updated sheet with complete info stored in
data/node-balances.csv - Historical data file stored in
data/data.yaml- this file should not be changed manually, as all values older than 30 days get auto-removed
├── data
│ ├── data.yaml
│ ├── node-balances.csv
│ └── wallet-addresses.csv
└── node_rewards_tracker.pyAuto-bond
We have created a auto-bonding setup for a fleet of nodes. This tool requires to have your nodes setup with ansible. Check out the detailed steps for auto-bond here.
Nodes Account Top-up
Every nym-node client contains a mnemonic of a Nyx account, generated with node initialisation (first run command creating all configuration and data files). This mnemonic is located in $HOME/.nym/nym-nodes/<ID>/data/cosmos_mnemonic. This is not the same account as the one used for bonding!
Read more detailed explanation of the function of this client account here.
Operators can use nodes_account_topup.py to top up a fleet of nodes with one command to a desired amount.
Automated Funding of nym-node Client Nyx Account
This setup is recommended for people administrating several nodes. It takes up to 30 min to prepare, but allows for an immediate top up of all nodes at any time.
Pull nymtech/nym monorepo
- In your desired location, run:
git clone https://github.com/nymtech/nym.gitBuild nym-cli
- The
nym-clibinary can be built by runningcargo build --releasein thenym/tools/nym-clidirectory - Or follow the steps in this chapter
nym-cliwill then be innym/target/release
Get nodes.csv
- Navigate to
nym/scripts/nym-node-setup/auto-bond - Open
nodes.csv.exampleand save it in your desired location asnodes.csv
Populate nodes.csv with your data
- All amounts are in NYM (not unym). The tools convert to unym internally.
- In case you don’t use
auto_bond_all.pyfor multi-bonding, only values needed for topping up your node vianodes_account_topup.pyare these:
| Column | Needed? | Why |
|---|---|---|
| hostname | REQUIRED | Label; both tools require it |
| ip | REQUIRED | To reach http://<IP>:8080 and read node_account_address |
| bonding_account_address | OPTIONAL | Only so show_balances also shows the bonding balance; leave blank to skip |
| node_account_amount | REQUIRED for topup | Target balance in NYM (or pass —node-account-amount instead) |
| node_account_address | AUTO | Filled from the node endpoint |
| node_account_balance | AUTO | Filled from the chain LCD |
In case you also use auto_bond_all.py you may want to populate other columns as well, here is the explanation ordered to match the CSV: operator-filled first, AUTO-filled last.
| Column | Who fills it | Notes |
|---|---|---|
| inventory_node_id | operator | Ansible inventory host id (bonding) |
| hostname | operator | Node hostname |
| ip | operator | Node IP (used to reach the :8080 endpoint) |
| bonding_account_address | operator | Operator’s local bonding wallet address |
| bonding_mnemonic | operator | Operator’s local bonding wallet mnemonic |
| bonding_account_amount | operator | Bond amount, in NYM |
| node_account_amount | operator | Target balance for the node gas account, in NYM |
| identity_key | operator | Node identity key (bonding) |
| operator_cost | operator | Interval operating cost, in NYM |
| node_account_address | AUTO | Read from http://<IP>:8080/api/v2/auxiliary-details |
| node_account_balance | AUTO | Read live from the chain LCD over HTTP |
| All amounts are in NYM. The tools convert to unym internally. |
Check node balances with show_balances.py
Once you populated and saved nodes.csv, run show_balances.py. The program shows both the operator’s bonding balance and the node’s gas-account balance. It flags any node under 1 NYM as a
config-score penalty risk.
- Usage
python3 show_balances.py nodes.csv [options]| Flag | Purpose |
|---|---|
csv_file (positional) | Path to the nodes CSV |
--dry-run | Print without querying the network |
Shows the node balance when IP is present, and the bonding balance when bonding_account_address is present.
Topup your nodes with nodes_account_topup.py
Tops up each node’s on-chain gas account to a target balance. Reads the node
account address from the node’s HTTP endpoint and the balance from the chain. nym-cli is only used for the actual send.
- Usage:
python3 nodes_account_topup.py nodes.csv [options]
# or
MNEMONIC="<MNEMONIC>" python3 nodes_account_topup.py nodes.csv [options]| Flag | Purpose |
|---|---|
csv_file (positional) | Path to the nodes CSV |
--mnemonic | Master funding account mnemonic. Or set MNEMONIC env var. Only needed for the actual top-up, not for —check-only |
--node-account-amount <NYM> | Target balance in NYM for every node; overrides each row’s node_account_amount |
--cli-dir <PATH> | Directory containing the nym-cli binary. Only needed for the send step |
-y, --assume-yes | Auto-confirm the nym-cli transfer prompt (non-interactive/batch). Without it, you’re shown the transfer table and asked to confirm |
--check-only | Read addresses + balances and write them back; send nothing (no nym-cli needed) |
--dry-run | Print what would happen; no network writes |
The program tops up to target (sends target − balance, skips nodes already at or above target). Amounts are in NYM.
Note: Do not keep your
nodes.csvopened in a UI spreadsheet while running the operation, or the write-back of balances may not be visible / may be overwritten on save.
Node Ping Tester
This tool is used to diagnose how many nodes providing self-described endpoint allow your IP to ping them. It’s a very simple script fetching all /described nodes and trying to ping each of them.
The output is collected into two files:
├── ping_not_working.csv
└── ping_works.csvInstallation & Running
SSH into your node server (VPS)
Download and make executable
- Navigate to the directory where you want to have this script
- Download and make executable:
wget https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/test-nodes-pings.sh && \
chmod +x test-nodes-pings.shRun the script
- Default running command is straight forward
./test-nodes-pings.sh- If you want to increase the
pingattempts from default 2 or lower the concurency, feel free to change the variables, like this:
PING_RETRIES=10 PING_TIMEOUT=5 CONCURRENCY=16 ./test-nodes-pings.shYou can look up the IPs from ping_not_working.csv, using some online database, like ipinfo.io .
Feel invited to share the outcome with Nym team, mentors and the rest of the operators in our Matrix Node Operators channel .
Guides to Setup Own Metrics
A list of different tools, templates and guides for easier navigation:
-
nym-gateway-probe: a useful tool used under the hood of Node Status Observatory -
Diagnostic Tool: diagnose connectivity issues and provides insights into network performance
-
Prometheus and Grafana self-hosted setup