A read-only checker that verifies a running node is the canonical Quantova
runtime and that its node/runtime invariants hold: correct runtime identity, all
expected pallets present, post-quantum authorization, healthy consensus and
finality, and the expected chain properties and runtime APIs. It connects over
JSON-RPC, reads only public state and metadata, and reports PASS / WARN /
FAIL.
It is safe to run and safe to publish: it performs no signing, no transaction submission, and no state changes. It verifies that the node matches the protocol — it does not attempt to alter or attack it. See SECURITY.md for the full safety boundary.
| Group | Checks |
|---|---|
| A. Connectivity & RPC | JSON-RPC reachable; the required read-only RPC methods all answer |
| B. Runtime identity | specName is quantova-runtime; spec/transaction versions reported (a higher version warns rather than fails, since the chain upgrades) |
| C. Pallet conformance | Every pallet in the canonical runtime is present in metadata, reported both as a whole and by functional group (consensus, staking, governance, balances, bridge, smart contracts, assets/naming, finality, post-quantum) |
| D. Post-quantum signing | The QSignature type and the Dilithium / Falcon / SPHINCS+ schemes are exposed in metadata |
| E. Consensus & finality | Node health; a finalized head exists and advances over a sampling window |
| F. Chain properties | Token decimals (18), SS58 format (42), token symbol (QTOV/TQTOV), isEthereum = false |
| G. Runtime API surface | Core runtime API groups present (Core, Metadata, BlockBuilder, SessionKeys, …) |
These map to the canonical Quantova runtime: the full pallet set (Babe, Grandpa,
Session, Staking, Balances, Bridge, QNS, Revive/QVM, the OpenGov stack, and the
post-quantum threshold-encryption pallet), the QSignature post-quantum signature
type, and deterministic finality.
- Python 3.8+
requests(the only dependency)
pip install -r requirements.txt # just: requests# Check a node
python run_checks.py --rpc http://127.0.0.1:9933
# Public testnet
python run_checks.py --rpc https://testnet.quantova.io
# Machine-readable output (for CI / monitoring)
python run_checks.py --rpc http://127.0.0.1:9933 --json
# Skip the timed finality sample (faster; single-shot reads only)
python run_checks.py --rpc http://127.0.0.1:9933 --fastExit code is 0 when there are no FAIL results and 1 otherwise, so it drops
straight into CI or a monitoring cron.
- Identity & APIs:
state_getRuntimeVersionand a name-presence scan ofstate_getMetadata. - Pallets & post-quantum: confirms the runtime pallet names and the
QSignature/ scheme identifiers appear in the metadata blob. - Finality:
chain_getFinalizedHead/chain_getHeadersampled twice to confirm the finalized head advances. - Properties:
system_properties,system_chain,system_health.
No private keys, no transaction construction, no state mutation anywhere. The only
RPC methods used are read-only (system_*, state_get*, chain_get*).
PASS— the invariant held at the time of the run.WARN— worth a look but not necessarily wrong (for example, a runtime version above the baseline as the chain upgrades, or a property that differs on a custom network).FAIL— a conformance invariant did not hold (for example, the spec name is notquantova-runtime, a pallet is missing, theQSignaturetype is absent, or the finalized head did not advance).
A clean run reflects the checked invariants at that moment; it is not a guarantee of overall correctness or security. See SECURITY.md.
The suite ships an offline self-test that runs the full battery against a mock node in both a healthy and a deliberately broken scenario, proving the failure-detection paths:
python tests/test_offline.pynode-conformance-tests/
node_checks/ scale.py, client.py, report.py, spec.py, checks.py, __init__.py
tests/ test_offline.py
run_checks.py CLI entry point
requirements.txt
README.md
SECURITY.md
LICENSE
LICENSE-OVERVIEW.md
Licensed under the Business Source License 1.1 (BUSL-1.1), © 2026 Quantova Inc. See LICENSE and LICENSE-OVERVIEW.md.