Run a Node
VPS One-Liner Install
Zero-to-validator on Ubuntu · Estimated read time: 6 minutes
Updated 2026-09-29: use an existing wallet at install, switch wallets with reset, and update only the command.
Live on testnet
The VPS one-liner is live. Paste the command in the TL;DR below into a fresh Ubuntu box and you have an active validator on the testnet within about 10 minutes. It pulls a chain snapshot, sets up systemd, funds the validator bond automatically, and bonds you in.
TL;DR
One command, Ubuntu 22.04+, 10 minutes from empty box to active validator:
The installer handles dependencies, wallet creation, chain snapshot download, sync, bond funding, and bonding. A chain snapshot is included so your node starts near the current tip - no full replay from block 0. A systemd unit is installed and enabled so the node keeps running after you disconnect.
Provision the VPS
Any Ubuntu 22.04+ VPS meeting the validator minimums works. The reference cluster runs on Hetzner CX22 (€4/mo) - that's the canonical spec.
- Spin up an Ubuntu 22.04 or 24.04 box with at least 2 cores, 4 GB RAM, 40 GB SSD.
- SSH in as root or a sudoer.
- Run the one-liner.
The one-liner
The script:
- Installs curl, jq, ufw and Node.js 22 if not present.
- Downloads the validator bundle (the node software) and the light chain snapshot.
- Writes the node configuration, locks the firewall down to SSH, RPC and the four relay peers, and installs the systemd service.
- Drops you into the interactive onboarding.
Interactive onboarding
Once dependencies are in place, the installer runs a wizard in your terminal:
- Create the validator key. The node generates a Dilithium3 (ML-DSA-65) keypair on first start. There is no password: the 32 byte seed lives in /opt/asentum/data/validator.key and the installer prints its hex form once so you can back it up.
- Load snapshot + sync. Chain snapshot loads instantly, then the node syncs the remaining blocks from peers. Progress bar shows catch-up - typically under a minute.
- Fund wallet. Shows your validator address, requests the bond amount for it automatically, and polls the balance until the ASE arrives. No manual faucet step; see Get Test ASE if it stalls.
- Stake. Auto-builds the bond transaction, signs, submits. Watches the chain until your validator transitions pending → active. The 500 ASE bond makes you a candidate; the node signs and earns only while its stake holds one of the 100 signing committee seats, which go to the largest stakes each epoch (cutoff currently about 1,350 ASE; check the explorer's validators page). Below it, status shows waiting. Raise your stake with
asentum-validator bond. - Done. systemd unit is enabled so the node survives reboots.
The asentum-validator command
After install, a dedicated asentum-validator command is on your $PATH:
| Subcommand | What it does |
|---|---|
| status | Address, bonded stake, committee state, block height and peers. |
| balance [addr] | Wallet balance of this validator, or of any address you pass. |
| earnings | Wallet balance since bonding. Block rewards and tips land here. |
| transfer <to> <ase> | Send ASE from the validator wallet. |
| bond <ase|all> | Add ASE to your bond. all bonds the wallet balance and keeps 1 ASE for gas. The extra stake counts from the next epoch. |
| unstake <ase> | Queue an unbond. It unlocks after the unbonding window of 1,296,000 blocks (about 30 days at 2-second blocks; longer when blocks are slower). |
| withdraw | Claim unbonded ASE back to the wallet once the window has passed. |
| keys | Where the validator key file lives. |
| keys export | Print the key as a 64-character hex key, to import this wallet into the Telegram wallet. |
| logs | Tail the validator service log. |
| start / stop / restart | Control the systemd service. |
| update | Pull the latest chain code and a fresh snapshot, then restart. Keeps your key, your config and your bond. Also refreshes this command. |
| resync | Replace local chain data with a fresh snapshot, nothing else. Use it when the node is stuck at one height and a restart does not help. |
| reset | Switch the wallet this validator uses. Asks whether to create a new one or import one you have. |
| reset --create | Switch to a brand new wallet. The current key is kept in key-backups/ first. |
| reset --import | Switch to a wallet you already have, by its 64-character hex key (asked for with the input hidden). |
| register | Bond a wallet that has no bond yet: requests the 505 ASE from the faucet and bonds 500, the same step a fresh install runs. |
| self-update | Update only this command to the latest version. The node, chain data and wallet are not touched. |
| rpc status|public|private <ips>|local | Who can use your node's RPC on port 8545: anyone, only the IPs you list, or nobody from outside. Signing and block production are never affected: other validators do not need your port 8545. |
Run asentum-validator help to see the list on your box. If a command above is missing, your copy is older than the docs: seeUpdate only the command.
Use an existing wallet
Moving to a new server, or rebuilding one? Install with the wallet you already have and your address, bond and history carry over. Have its 64-character hex key ready (a previous install saved it in /opt/asentum/data/validator.key.hex, and asentum-validator keys export prints it), then run:
curl -fsSL https://explorer.asentum.com/install/validator | ASENTUM_IMPORT_KEY_HEX=ask bash
The installer asks for the key with the input hidden, so it never lands in your shell history. If that wallet is already bonded, the faucet and bond steps are skipped and the node rejoins as a candidate with the bond it has.
Run a key on one server only. Stop the old validator before the new one starts: two nodes signing with the same key can be slashed.
Switch wallets
asentum-validator reset changes the wallet an installed validator uses, without reinstalling. Run it without a flag and it asks which you want, or pick directly:
asentum-validator reset --create # a brand new wallet asentum-validator reset --import # a wallet you already have (asks for the key, hidden)
- The current key is never deleted. It is moved to
/opt/asentum/data/key-backups/first, with a note of its address, so you can always import it back. - A bond belongs to the wallet that made it. Switching wallets does not move it. To get that ASE back, run
asentum-validator unstakebefore switching (it unlocks after 14 days), or import the old wallet again later. - A new wallet has no bond, so reset registers it for you: it requests 505 ASE from the faucet and bonds 500, like a fresh install. Add
--no-bondto skip that and runasentum-validator registerwhen you are ready. - An imported wallet that is already bonded rejoins on its own, and signs again if its stake clears the committee cutoff.
- After
--createthe new key is printed once. Save it in a password manager.
Update only the command
Sometimes only the asentum-validator command changes, for example when a new subcommand is added. You can update it without touching the node, the chain data or your wallet:
asentum-validator self-update
The rpc, register, self-update, resync and reset commands came with the 29 Sep 2026 kit. If your install is older and does not have them, re-run the install command. It keeps your existing key:
curl -fsSL https://explorer.asentum.com/install/validator | bash
asentum-validator update also refreshes the command, but it additionally downloads new chain code and a snapshot and restarts the node. Use it when there is a chain upgrade.
systemd & background run
The installer drops a systemd unit at /etc/systemd/system/asentum-validator.service. It runs under a dedicated system user, restarts on failure, and starts on boot. asentum-validator logs is a wrapper around journalctl. For the full monitoring story see Monitoring & Logs.
Firewall
The installer configures ufw with the minimum open ports:
- 22 - SSH.
- 8545: your node's RPC. Open to everyone by default; choose who can use it with
ASENTUM_RPC_ACCESSat install orasentum-validator rpclater. - 9000: block and vote gossip between validators, open only to the network's core nodes.
Making the RPC private never affects block production: validators talk on 9000. To serve RPC on your own domain, see Run your own RPC endpoint.
Read next