Pillar producer
A Pillar produces momentums through a node that holds its producer key. This page takes a fresh server to a producing Pillar, start to finish.
From a fresh server to a producing Pillar
0. What you need
- A server running Ubuntu 24.04 with root access, at least 4 CPU cores and 4 GiB of RAM, and 60 GB of free disk to start with; the chain grows over time.
- Port 35995/TCP reachable from the Internet so other nodes can connect.
- Your Pillar's owner wallet in Syrius, or
znn-cliwith its key store, to set the producer address at the end. Registering a Pillar itself (the collateral transaction) is done there too and is outside nomctl.
1. Install nomctl
On the server, as root:
curl -fsSL https://raw.githubusercontent.com/0x3639/nomctl/main/install.sh | sudo bash
This downloads the release for your architecture, verifies its checksum and installs /usr/local/bin/nomctl. Nothing else happens yet.
2. Deploy the Pillar
sudo nomctl pillar deploy
Or run sudo nomctl and pick the first entry, Deploy a Pillar. Either way nomctl:
- runs the pre-flight checks (cores, memory, time sync, connectivity);
- installs
git,makeandgccif missing and a Go toolchain under/opt/nomctl/go; - clones
github.com/zenon-network/go-zenonand buildsznndfrommaster, installs it to/usr/local/bin; - writes and enables the
go-zenonsystemd unit and starts it; - creates the producer key
/root/.znn/wallet/producerwith a generated password, writes theProducersection into/root/.znn/config.json, and restarts the node so it loads the key.
The build takes a few minutes. At the end it prints:
Producer address z1qp355um05ymgkzepnn9dra7twy995g7ndkfln6
Key file /root/.znn/wallet/producer
Password Fq8TQpKWLY9jX5p8
(also stored in config.json, which the node needs; keep a copy elsewhere)
Copy the address and the password into your password manager now. The password is shown once. It stays in config.json because znnd needs it, but that file is the only other place.
3. Point your Pillar at this node
In Syrius, open the Pillars tab, choose your Pillar, and set its producer address to the address printed above. With znn-cli the command is pillar.updateProducer on the owner's key store. One producer address serves one Pillar; never reuse it for a second one.
Once the transaction confirms, the network uses the new address for the Pillar's next momentum slots; nomctl pillar status reports when the chain shows this node's address.
4. Let the node sync
A new node syncs from genesis, which takes days. To finish in minutes instead:
sudo nomctl bootstrap
downloads a verified chain snapshot and swaps it in; see Bootstrap. Then watch progress with sudo nomctl status or the live view sudo nomctl top. The Pillar can only produce once the node shows synced.
5. Verify
sudo nomctl pillar status
shows the producer address, that the key file is present and matches, that the node is running, and, once alerts are set up with the Pillar's name (next step), whether the Pillar on chain produces with this node's address.
6. Get alerts
sudo nomctl alerts setup --name <your pillar name>
after sending /start to the nomctl Telegram bot. Using the Pillar's name as the node name enables the pillar_missed alert, which tells you when the Pillar misses momentums. See Alerts and the privacy notice there.
7. Back up the key
wallet/producer and its password are what lets this node produce. Copy the file somewhere safe together with the password. Chain-data backups (nomctl backup) do not include the wallet directory. If both are ever lost, run sudo nomctl pillar setup on a fresh node to create a new key and set the new address on the Pillar as in step 3.
Already running a node?
The producer step alone is:
sudo nomctl pillar setup # create or configure, prompts on a terminal
sudo nomctl pillar setup --yes # keep an existing configuration without asking
sudo nomctl pillar status # address, key file, and which Pillar uses it
On a terminal, let setup prompt: the answer is not echoed and never lands in shell history. In scripts pass it through the environment, NOMCTL_PRODUCER_PASSWORD=... sudo -E nomctl pillar setup, rather than --password, which shows up in shell history and process lists. pillar status --show-password prints it to the terminal; do not run that where output is logged.
The menu has the same under Pillar.
What the producer step does
- If
config.jsonalready names a producer whose key file exists, it asks whether to keep it (kept without asking with--yes). Nothing is rewritten then. - Otherwise, if
wallet/producerexists, it asks for that file's password (three attempts, hidden input;NOMCTL_PRODUCER_PASSWORDor--passwordin scripts), verifies it by opening the file, and configures the node with the address inside. - Otherwise it creates
wallet/producerwith a generated 16-character password, or the one you supply, and prints the password once. - It backs up
config.jsontoconfig.json.bak.<timestamp>, writes theProducersection (Index0,KeyFilePathproducer, the password, the address), and restarts the node if it is running so it loads the key.
Then it prints the producer address. Set that address as your Pillar's producer address in Syrius or with znn-cli. One producer address serves one Pillar.
The key file is created with go-zenon's own wallet code, so it is exactly what the node would have written itself. The password is stored in config.json in clear because znnd needs it to unlock the key at start; that file is mode 0600.
Status
nomctl pillar status shows the address, whether the key file is present and matches it, the index, whether the node is running, and, when the alerts configuration names a Pillar, whether that Pillar currently produces with this node's address. nomctl status adds a Producer line when one is configured.