Skip to Content
New: a threat-model-first guide to choosing your network defence, plus the nym-smoldvpn dVPN package and nym-swizzle sender hygiene.

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 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-node using this program requires you to run as root
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.py
Run 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.

  1. Fully interactive mode - just run:
./nym-node-cli.py install
  1. Use arguments - run this command to see all options:
./nym-node-cli.py install --help
usage: 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.ku
Read 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.py

Pull / clone nymtech/nym repository

  • Open terminal and navigate to where you want to have nym repostiry and run:
git clone https://github.com/nymtech/nym
  • Copy node_rewards_tracker.py from nym/scripts/rewards-tracker/node_rewards_tracker.py to 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.py

The second command created a /data sub-directory:

└── data    └── wallet-addresses.csv

In 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-colorama
Add your Nyx accounts to wallet-addresses.csv
  • Open data/wallet-addresses.csv in your favourite text editor or a sheet managing tool (Like Libre Office Calc)
  • Add all node Nyx account addresses to the first column called address that 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 tag column

  • 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 --help

The Output

The result of running node_rewards_tracker.py is:

  1. Printed table in terminal
  2. Updated sheet with complete info stored in data/node-balances.csv
  3. 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.py

Auto-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.git
Build nym-cli
  • The nym-cli binary can be built by running cargo build --release in the nym/tools/nym-cli directory
  • Or follow the steps in this chapter
  • nym-cli will then be in nym/target/release
Get nodes.csv
  • Navigate to nym/scripts/nym-node-setup/auto-bond
  • Open nodes.csv.example and save it in your desired location as nodes.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.py for multi-bonding, only values needed for topping up your node via nodes_account_topup.py are these:
ColumnNeeded?Why
hostnameREQUIREDLabel; both tools require it
ipREQUIREDTo reach http://<IP>:8080 and read node_account_address
bonding_account_addressOPTIONALOnly so show_balances also shows the bonding balance; leave blank to skip
node_account_amountREQUIRED for topupTarget balance in NYM (or pass —node-account-amount instead)
node_account_addressAUTOFilled from the node endpoint
node_account_balanceAUTOFilled 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.

ColumnWho fills itNotes
inventory_node_idoperatorAnsible inventory host id (bonding)
hostnameoperatorNode hostname
ipoperatorNode IP (used to reach the :8080 endpoint)
bonding_account_addressoperatorOperator’s local bonding wallet address
bonding_mnemonicoperatorOperator’s local bonding wallet mnemonic
bonding_account_amountoperatorBond amount, in NYM
node_account_amountoperatorTarget balance for the node gas account, in NYM
identity_keyoperatorNode identity key (bonding)
operator_costoperatorInterval operating cost, in NYM
node_account_addressAUTORead from http://<IP>:8080/api/v2/auxiliary-details
node_account_balanceAUTORead 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]
FlagPurpose
csv_file (positional)Path to the nodes CSV
--dry-runPrint 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]
FlagPurpose
csv_file (positional)Path to the nodes CSV
--mnemonicMaster 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-yesAuto-confirm the nym-cli transfer prompt (non-interactive/batch). Without it, you’re shown the transfer table and asked to confirm
--check-onlyRead addresses + balances and write them back; send nothing (no nym-cli needed)
--dry-runPrint 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.csv opened 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.csv

Installation & 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.sh
Run the script
  • Default running command is straight forward
./test-nodes-pings.sh
  • If you want to increase the ping attempts 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.sh

You 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:

Last updated on