# PLAIS QBFT Candidate Runbook

## Topology

- Consensus: QBFT
- Chain ID: `20260718`
- Validators: 4 (`127.0.0.1:30303` through `30306`)
- Read/RPC node: 1 (`127.0.0.1:30307`)
- HTTP RPC: `127.0.0.1:8545`
- Metrics: `127.0.0.1:9545`

The RPC and metrics endpoints must remain bound to localhost until network,
firewall, rate-limit, and external-transfer reviews are complete.

## Independent-host migration

The active four-validator chain must preserve its genesis, validator identities,
and history. Use `npm run evm:init-canonical-migration` and follow
`docs/CANONICAL_VALIDATOR_MIGRATION.md`.

The older `evm:prepare-distributed` and `evm:finalize-distributed` commands
create a different genesis. They are break-glass locked and their output must
not join the canonical candidate network.

## Runtime

- Besu `26.6.1`
- Eclipse Temurin JDK `25.0.3+9`
- Generated chain data and validator keys live under ignored `runtime/`.
- User EVM wallets remain under ignored `data/` and are independent of the node database.

## Operations

Initialize once:

```powershell
npm run evm:setup-qbft
```

Run the four validator processes and the RPC process through PM2. Validate with:

```powershell
npm run test:evm-network
```

The test requires the configured chain ID, four QBFT validators, connected peers,
and a signed transaction included in a block. Do not remove the old candidate data
until a separate archival decision is approved.
# Sync Client fleet and validator roles

Run `npm run evm:check-sync-fleet` to audit every active Sync Client device. This fleet count is separate from the QBFT validator topology: ordinary storage participants are included in the client hardening gate but do not become validators. Run `npm run evm:check-sync-provisioning` for the validator-candidate-only provisioning gate.
