Skip to content
GitHub

Run a validator

Maya2C keeps its shared notebook with a group of validators. Each one is a computer that keeps a copy, signs pages, and helps seal them. The more honest validators run by different people, the harder it is for anyone to cheat.

To become one you need three things: a key (a secret you keep on your computer, like the key to a safe), a computer that stays on, and a seat that the group accepts. A seat that never answers counts against the group. So new seats are checked before they are added.

Status
Validator softwareShipped: maya2c-node on the releases page
Registering a keyShipped: l1-wallet register-validator
Rejoining after an outageShipped: attested checkpoints, --catch-up-from (ADR-038)
Committee todayFour validators, all run by the project, on one machine. Real multi-signer DAG-BFT, but not independent: one machine failing halts the chain until it returns (it does not fork it). Mainnet launches the same way, and other machines join after launch (ADR-047). Live membership is on the status page.
Connecting to the networkA public WebSocket bootnode at p2p.maya2c.dev, and a bootstrap endpoint for snapshots and headers at bootstrap.maya2c.dev
Open registrationNot yet. Registrations are reviewed; see below.

Today every validator seat carries one vote, whatever its stake. A registration whose node never comes online still takes a seat, and with enough absent seats no quorum can form and the chain stops (ADR-039). The arithmetic is in the scientists tab below.

Until votes are weighted by stake, the testnet validator only proposes registrations above a bond floor that the faucet cannot fund. The project funds the bond of each approved operator. This is a stopgap for a testnet. It is not how mainnet will work.

  • An always-on machine. Measured on 2026-10-04 after 3 h 47 min and 12,277 blocks on the testnet validator: 39 MB of memory, 59 s of CPU time, and 150 MB of data, about 1 GB a day at that rate with empty blocks. Busier blocks need more. Plan disk for growth or run with pruning.
  • A stable connection, and an inbound TCP port you can open.
  • Willingness to update within 48 hours of a release marked required.
  1. Install maya2c-node and l1-wallet from the releases page, and check them against SHA256SUMS.

  2. Make a validator key. This prints its public key:

    Terminal window
    maya2c-node --generate-validator-key validator.key

    The file is the secret. Keep it on the validator machine only, readable by you alone, and back it up offline. Losing it costs your seat. Leaking it lets someone sign as you, which is slashed as double signing.

  3. Make a wallet with l1-wallet generate (it writes wallet.key by default), then note the address with l1-wallet address.

  4. Apply by opening a validator application with the public key and the address. Never paste a key file.

  5. Once approved and funded, register:

    Terminal window
    l1-wallet --rpc-url https://rpc.maya2c.dev/rpc register-validator \
    --validator-key validator.key --bond <the amount agreed>

    The flags are those in bins/l1-wallet/src/main.rs: --validator-key, --bond (required), --commission-bps (default 0). The command prints your validator id. The committee is recomputed at each epoch boundary, every 3,600 blocks, and you join it at the first boundary after the registration is final.

  6. Get the testnet genesis from maya2c.dev/testnet/genesis.json and check that it hashes to dd9bb356c94b7699e6e8d2595681faee48be435b02dc927677cbf833e55edd5d (SHA-256):

    Terminal window
    sha256sum genesis.json
  7. Run the node. It dials the bootnode over WebSocket, so it works from behind NAT. Flags from print_usage in bins/maya2c-node/src/main.rs:

    Terminal window
    maya2c-node --genesis genesis.json --data-dir data \
    --validator-key validator.key \
    --bootnode /dns4/p2p.maya2c.dev/tcp/443/wss/p2p/12D3KooWJqH5AUQ1zPkMke18rcc8VHN2TWQ5XudGX3tP8zPLuyjB \
    --prune-depth 3600
    • --prune-depth 3600 prunes block bodies older than 3,600 blocks; it implies --prune.
    • To start from a peer’s state snapshot rather than replaying every block, add --bootstrap-from <peer JSON-RPC URL>.
    • Without --validator-key the node only observes. Never run one key on two machines.

    A fresh node run this way on 2026-10-04 loaded the snapshot at height 52,414, caught up 458 attested blocks and was following the tip (57,139 against 57,140).

FlagEffect
--versionPrints the binary name and version, and exits. Only as the first argument.
--config <PATH>Operational settings file; flags override it
--print-config-templatePrints the default template
--min-register-bond <N>Never propose a registration bonding less than N (ADR-039)
--catch-up-from <URL>Rejoin through a peer’s attested checkpoint (ADR-038); repeatable
--snapshot-interval <N>Snapshot every N blocks; validators default to 3,600, 0 turns it off
--remote-signer <ADDR>Sign through maya2c-signer instead of a key file (ADR-033)
  • Downtime is slashed. A validator that commits fewer than half of the anchor slots it led in an epoch loses 1% of its bond and is jailed for two epochs.
  • Double signing is slashed hard. 50% of the bond, and the key is retired. Evidence can be filed for unbonding_epochs + 1 epochs after the offence.
  • Undelegating takes the whole stake or leaves at least the minimum. A zero or dust undelegation is refused.
  • Your node votes on every round. Its signatures are ML-DSA-65, the NIST post-quantum standard, like every other signature on the chain.