Files
quantus/asset/systemd/quantus-node.service
T
Rob Thijssen e936597806 fix: the inner_hash is public config, not a secret
The node embeds the reward preimage verbatim in the PreRuntime digest of
every block it authors (client/consensus/qpow/src/lib.rs:726), and the
mining-rewards pallet reads that digest back to derive the payout
address on-chain. It is public from the first mined block.

So the Gitea secret, the 0640 handling and the ps-visibility caveat were
all theatre over a value published on a blockchain. It moves to the
workflow env: block with the rest of the infra truth, and
infra-setup.sh loses --mint-reward-key entirely along with its pass and
Gitea-API dependencies.

This also answers why the node takes a preimage and not an address: the
runtime does the derivation, which is what proves the payout target is a
canonical wormhole address rather than an arbitrary account. An address
would give it nothing to verify.
2026-08-31 17:37:31 +03:00

76 lines
2.3 KiB
Desktop File

# Quantus Planck node, validator role, external-miner mode.
#
# Hardened per ~/git/architecture/generic.md §8. Two knobs are deliberately
# relaxed; both are load-bearing, do not "tidy" them back:
#
# MemoryDenyWriteExecute=false
# Substrate JITs the on-chain wasm runtime through wasmtime and needs W|X
# pages. With this true the node aborts during block import.
#
# Type=simple (not notify)
# quantus-node does not sd_notify(READY=1). Type=notify would block
# `systemctl restart` until TimeoutStartSec expires
# (deployment-gitea-actions.md §6).
#
# The reward preimage arrives via EnvironmentFile only because the node exposes
# no environment-variable form for any flag (`--help` carries no `[env:]`
# annotations) and the value is per-deployment while this unit is a static
# asset. It is NOT hidden and does not need to be: the node embeds the preimage
# verbatim in the PreRuntime digest of every block it authors, so it is public
# on-chain from your first block onward. Do not add secret-handling around it.
[Unit]
Description=Quantus node (Planck, validator, external-miner mode)
Documentation=https://github.com/Quantus-Network/chain
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=quantus-node
Group=quantus-node
Environment=RUST_LOG=info
EnvironmentFile=/etc/quantus-node/node.env
WorkingDirectory=/var/lib/quantus-node
ExecStart=/usr/local/bin/quantus-node \
--validator \
--chain planck \
--name %H \
--base-path /var/lib/quantus-node \
--node-key-file /var/lib/quantus-node/node_key.p2p \
--rewards-inner-hash ${QUANTUS_INNER_HASH} \
--miner-listen-port 9833 \
--port 30333 \
--prometheus-port 9615 \
--max-blocks-per-request 64 \
--sync full
Restart=always
RestartSec=10s
# RocksDB needs time to flush cleanly; a SIGKILL mid-compaction means a slow
# (or corrupt) recovery on next start.
TimeoutStopSec=300
KillSignal=SIGINT
LimitNOFILE=65536
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictRealtime=true
RestrictSUIDSGID=true
LockPersonality=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=false
ReadWritePaths=/var/lib/quantus-node
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
[Install]
WantedBy=multi-user.target