PoA Validator Policy
This document describes the PoA validator policy enforcement mechanism for controlling which validators can participate in consensus during Proof of Authority phases of network operation.
Overview
Section titled “Overview”The PoA policy enforcement allows network operators to restrict consensus participation to a defined set of validators via an allowlist. This is useful during:
- Initial network bootstrap (controlled validator set)
- Network upgrades (limiting participants to trusted validators)
- Emergency situations (excluding potentially malicious validators)
Configuration
Section titled “Configuration”PoA policy is configured via the PoaConfig struct in the consensus engine configuration.
Configuration Options
Section titled “Configuration Options”pub struct PoaConfig { /// Path to a file containing allowed validator public keys (hex-encoded, one per line). pub allowlist_file: Option<PathBuf>,
/// Inline allowlist of validator public keys (hex-encoded). pub allowlist: HashSet<String>,
/// If true, reject participants not in the allowlist. Default: true. pub strict: bool,}Allowlist File Format
Section titled “Allowlist File Format”The allowlist file is a simple text file with one hex-encoded ed25519 public key per line:
# Comments are allowed (lines starting with #)# Empty lines are ignored
a1b2c3d4e5f6... # 64 hex characters (32 bytes)f1e2d3c4b5a6...Each public key must be:
- Exactly 64 hexadecimal characters
- Lowercase (automatically normalized)
- No prefix (no
0x)
CLI Integration
Section titled “CLI Integration”To enable PoA filtering via CLI:
# Using an allowlist filenode --poa-allowlist /path/to/allowlist.txt
# Using inline allowlist (comma-separated)node --poa-allowlist-inline a1b2c3...,f1e2d3...
# Permissive mode (log warnings but allow all)node --poa-allowlist /path/to/allowlist.txt --poa-permissiveEnforcement Modes
Section titled “Enforcement Modes”Strict Mode (default)
Section titled “Strict Mode (default)”In strict mode (strict: true):
- Only validators in the allowlist can participate in consensus
- Non-allowed validators are excluded from the scheme and validator set
- Warnings are logged for each excluded validator
Permissive Mode
Section titled “Permissive Mode”In permissive mode (strict: false):
- All validators can participate regardless of allowlist
- Warnings are logged for validators not in the allowlist
- Useful for monitoring/auditing before enforcing restrictions
Implementation Details
Section titled “Implementation Details”Engine Initialization
Section titled “Engine Initialization”During engine initialization (Engine::new):
- If
poaconfig is provided, load the combined allowlist (file + inline) - Filter participants against the allowlist
- Create the signing scheme with filtered participants only
- Build the validator set from filtered participants
- Log summary: total, allowed, rejected counts
SLA Metrics
Section titled “SLA Metrics”The following metrics are available for monitoring PoA policy enforcement:
| Metric | Type | Description |
|---|---|---|
ashen_poa_allowlist_checks_total | Counter | Total PoA allowlist checks performed |
ashen_poa_validators_allowed | Gauge | Validators allowed after filtering |
ashen_poa_validators_rejected | Gauge | Validators rejected by filtering |
ashen_poa_strict_mode | Gauge | 1 if strict, 0 if permissive |
ashen_poa_missed_proposals_total | Counter | Missed proposals by validator |
ashen_poa_proposal_latency_seconds | Histogram | Proposal latency by validator |
Operational Runbook
Section titled “Operational Runbook”Adding a New Validator
Section titled “Adding a New Validator”- Generate the validator’s ed25519 keypair
- Add the public key (hex) to the allowlist file
- Restart nodes or use hot-reload (if supported)
- Verify in logs: “PoA allowlist filtering applied”
Removing a Validator
Section titled “Removing a Validator”- Remove the public key from the allowlist file
- Restart nodes
- Confirm in logs the validator is excluded
- Monitor for consensus health
Emergency Validator Exclusion
Section titled “Emergency Validator Exclusion”For immediate exclusion without file changes:
# Inline exclusion overrides filenode --poa-allowlist /path/to/allowlist.txt --poa-exclude a1b2c3...Troubleshooting
Section titled “Troubleshooting”Symptom: Consensus not progressing after PoA change
- Check if enough validators remain (need 2/3+1 for BFT)
- Verify allowlist syntax (64 hex chars, no 0x prefix)
- Check logs for “Validator not in PoA allowlist” warnings
Symptom: Validator keeps participating despite exclusion
- Ensure strict mode is enabled (
strict: true) - Verify the node was restarted
- Check the public key format matches exactly
Security Considerations
Section titled “Security Considerations”- The allowlist file should be read-only to the node process
- Use file permissions to restrict access (e.g.,
chmod 600 allowlist.txt) - Consider using a configuration management system for distributed deployments
- Audit all allowlist changes through version control
Future Enhancements
Section titled “Future Enhancements”- Hot reload: Update allowlist without restart
- On-chain governance: Allowlist controlled by governance contract
- Multi-sig approval: Require multiple signatures to modify allowlist
- Time-based policies: Automatic validator rotation schedules