Zephyr Chain is an early-stage blockchain node and wallet stack focused on a production path toward validator-driven consensus, deterministic WASM execution, and a confidential compute marketplace.
The long-term product vision lives in Zaphyr-chain_manifesto.md. Application and use-case framing lives in docs/applications.md. Academic paper materials are maintained locally under paper/ and kept private via .gitignore. This README stays practical: what works now, what changed in the latest iteration, and what comes next.
Implemented today:
- Go HTTP node entrypoint in
cmd/node - DPoS election primitives and tests in
internal/dpos - transaction envelope validation in
internal/tx - durable accounts, mempool, committed blocks, restart-safe state, and snapshot restore in
internal/ledger - durable validator-set snapshots with versioning, proposer scheduling, and quorum summaries in
internal/ledger - durable consensus round state with restart-safe height, round, and round-start tracking in
internal/ledger - durable signed consensus proposals, validator votes, and quorum certificates in
internal/ledger - self-contained consensus proposals that carry the full candidate transaction body plus deterministic template fields
- automatic single-node block production plus manual dev block production
- optional proposer-schedule enforcement for block production when a validator set and local validator address are configured
- optional certificate-gated local block commit and remote block import when consensus enforcement is enabled
- certificate-gated local commit can replay a stored certified proposal body even when the local mempool no longer has that candidate
- optional consensus automation for scheduled self-proposal, validator auto-vote, timeout-driven round advance, proposer rotation, and certified proposer auto-commit on the current devnet path
- transport-backed peer replication in
internal/apiwith the current implementation running over HTTP - signed validator transport-identity proofs in status responses and peer verification views when a validator private key is configured
- optional strict peer-admission enforcement and peer-to-validator binding on the current HTTP transport
- peer status tracking, peer admission state, per-peer sync telemetry, block fetch by height, block import, snapshot-based catch-up, and consensus artifact replication for admitted peers
- consensus visibility endpoints for status, validator snapshots, active round inspection, proposer schedule inspection, latest consensus artifacts, and next-block template preview
- operator-facing observability endpoints for readiness, alerts, SLO summaries, alert-rule exports, recording-rule exports, dashboard bundles, Grafana dashboard export, JSON metrics, Prometheus metrics, and structured logs
- Vue wallet in
apps/wallet - wallet account generation, import/export, local signing, account inspection, faucet funding, and transaction broadcast
Implemented in this iteration:
- failed outgoing proposal, vote, and block dissemination now lands in durable
replication_blockedpeer incidents with artifact-specificreasonlabels and transport-oriented error-code rollups GET /v1/alertsnow separates general peer-sync degradation from targetedpeer_import_blocked,peer_admission_blocked, andpeer_replication_blockedwarnings built from durable peer incident rollupsGET /v1/alert-rulesandGET /v1/alert-rules/prometheusnow export matching peer-import, peer-admission, and peer-replication diagnostic rules for scrape-based monitoring stacksGET /metricsnow exports retained peer incident counts and latest observation timestamps per peer with the latest state, reason, and error-code labels attached for scrape-based drill-downGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow export a canonical per-peer incident-pressure rollup so downstream dashboards can reuse that peer view without rewriting PromQLGET /v1/dashboardsandGET /v1/dashboards/grafananow expose peer incident reason panels plus a per-peer incident pressure panel built on that recording rule alongside state and error-code rollups so dissemination failures are visible in the peer-sync bundleGET /v1/alertsnow also derives a targeted aggregatepeer_snapshot_restoredwarning plus repair-path-specificpeer_snapshot_restore_divergence,peer_snapshot_restore_import_repair, andpeer_snapshot_restore_fetch_fallbackwarnings from retainedsnapshot_restoredincidents so snapshot-based peer repair shows up as a first-class operator signal without hiding the exact repair pathGET /v1/alert-rulesandGET /v1/alert-rules/prometheusnow additionally exportZephyrPeerSnapshotRestoreso the snapshot-repair signal can be promoted into Prometheus-based alerting without custom rule authoringGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow additionally export the canonical peer-sync rollupzephyr:peer_sync:snapshot_restore_pressureso dashboards can track retained snapshot-repair pressure without re-deriving it from raw incident metricsGET /v1/dashboardsandGET /v1/dashboards/grafananow add aPeer snapshot restore pressurestat to the peer-sync bundle so divergence, import-repair, and fetch-fallback recovery remain visible next to state, reason, error-code, and per-peer incident pressureGET /v1/alert-rulesandGET /v1/alert-rules/prometheusnow additionally export repair-path-specificZephyrPeerSnapshotRestoreDivergence,ZephyrPeerSnapshotRestoreImportRepair, andZephyrPeerSnapshotRestoreFetchFallbackrules so downstream alerting can split divergence repair from import-repair and fetch-fallback paths without custom PromQLGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow additionally export the canonical peer-sync rollupzephyr:peer_sync:snapshot_restore_pressure_by_reasonso dashboards and alert managers can reuse the filtered divergence, import-repair, and fetch-fallback series directlyGET /v1/dashboardsandGET /v1/dashboards/grafananow add aPeer snapshot restore reasonspanel to the peer-sync bundle so repair-path pressure is graphed explicitly instead of only being inferred from the wider incident-reason panelGET /v1/recording-rules,GET /v1/recording-rules/prometheus, andGET /v1/dashboardsnow preserve the compatibility aggregatepeer_snapshot_restoredcode alongside the splitpeer_snapshot_restore_*codes in related-alert metadata so downstream rollups and dashboard bundles can pivot incrementally without losing the older aggregate signalGET /v1/metricsnow carries horizon-awarepeerSyncSummary.horizonsviews for5m,15m,1h,6h, and24h,GET /metricsmirrors them throughzephyr_peer_sync_horizon_*gauges, andGET /v1/healthnow includes recent peer incident occurrence and affected-peer horizon detail so operators can tell whether retained peer pressure is fresh or lingeringGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow additionally exportzephyr:peer_sync:incident_pressure_by_horizon, andGET /v1/dashboardsplusGET /v1/dashboards/grafananow add aPeer incident pressure horizonspanel so the peer-sync bundle can compare recent retained pressure across short and long windows without rebuilding PromQLGET /metricsnow also exports per-peer snapshot-repair metadata throughzephyr_peer_snapshot_restore_last_height,zephyr_peer_snapshot_restore_last_observed_at_seconds, andzephyr_peer_snapshot_restore_age_seconds, whileGET /v1/recording-rulesplusGET /v1/recording-rules/prometheusnow addzephyr:peer_sync:snapshot_restore_pressure_by_peerandzephyr:peer_sync:snapshot_restore_age_by_peerfor canonical per-peer repair pressure and repair age drill-downGET /v1/dashboardsandGET /v1/dashboards/grafananow addPeer snapshot restore pressure by peer,Peer snapshot restore heights, andPeer snapshot restore ageso operators can correlate repair pressure, retained repair reason, the latest restored height, and whether a restore is fresh before drilling into/v1/peersfor block-hash andrecentIncidentsdetailGET /v1/metricsnow includeschainThroughputtotals plus rolling1m,5m, and15mwindows for committed blocks, committed transactions, average transactions per block, and recent TPS baselining, along with asettlementThroughputview carrying raw queue-drain lag, latest commit age, warn or fail thresholds, active alert metadata, normalized warn or fail utilization ratios, recent 1m, 5m, and 15m backlog-drain estimates, per-estimate warn utilization ratios, and an explicitpeakDrainEstimatesummary for the current worst-case backlog projectionGET /metricsnow also exports committed-block, committed-transaction, latest-block-interval, and rolling throughput gauges plus settlement queue-drain gauges such aszephyr_settlement_queue_drain_lag_seconds,zephyr_settlement_queue_drain_threshold_seconds,zephyr_settlement_queue_drain_utilization_ratio,zephyr_settlement_estimated_queue_drain_warn_utilization_ratio,zephyr_settlement_estimated_queue_drain_warn_utilization_ratio_max,zephyr_settlement_estimated_queue_drain_seconds, andzephyr_settlement_estimated_queue_drain_seconds_maxso Prometheus-style monitoring can track both recent TPS and settlement pressure without re-deriving chain historyGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow additionally export canonicalzephyr:chain:transactions_per_second_1m,zephyr:chain:transactions_per_second_5m, andzephyr:chain:transactions_per_second_15mrollups for dashboard reuseGET /v1/dashboardsandGET /v1/dashboards/grafananow add aRecent transaction throughputoverview panel built on those rollups so operators can baseline recent TPS alongside readiness and peer healthGET /v1/healthnow includes asettlement_throughputcheck that watches queued transaction drain against the configured automatic block interval when block production is enabled and carries the current worst-case drain forecast in its detailGET /v1/alertsandGET /v1/slonow derivesettlement_throughput_reduced,settlement_throughput_stalled, and thesettlement_throughputobjective so slow or stalled queue drain becomes first-class operator evidence, with detail strings now carrying the current worst-case drain forecast when recent throughput baselines existGET /v1/alert-rulesandGET /v1/alert-rules/prometheusnow exportZephyrSettlementThroughputAtRiskandZephyrSettlementThroughputStalledso the same queue-drain signal can be promoted into Prometheus-based alertingGET /v1/recording-rulesandGET /v1/recording-rules/prometheusnow additionally export canonicalzephyr:settlement_throughput:at_riskandzephyr:settlement_throughput:breachedrollups plus normalizedzephyr:settlement_queue_drain:warn_utilizationandzephyr:settlement_queue_drain:fail_utilizationseries plus canonicalzephyr:settlement_queue_drain:estimate_seconds_1m,zephyr:settlement_queue_drain:estimate_seconds_5m,zephyr:settlement_queue_drain:estimate_seconds_15m, andzephyr:settlement_queue_drain:estimate_seconds_maxrollups and canonicalzephyr:settlement_queue_drain:estimate_warn_utilization_1m,zephyr:settlement_queue_drain:estimate_warn_utilization_5m,zephyr:settlement_queue_drain:estimate_warn_utilization_15m, andzephyr:settlement_queue_drain:estimate_warn_utilization_maxrollups for queue-drain dashboards and fleet summariesGET /v1/dashboardsandGET /v1/dashboards/grafananow add aSettlement throughput stateoverview panel, a rawSettlement queue-drain lagpanel, a normalizedSettlement queue-drain utilizationpanel, anEstimated queue-drain pressurepanel built on canonical warn-normalized drain-estimate recording rules, aWorst-case estimated queue-drain pressurestat built on the canonical max projected-pressure rollup, anEstimated queue-drain timepanel built on canonical drain-estimate recording rules, and aWorst-case estimated queue-drain timestat built on the canonical max drain-estimate rollup so operators can see both absolute lag, threshold pressure, and recent backlog-drain expectations next to recent TPS baselines; on passive nodes these settlement-specific panels now stay visible in JSON withdisabledReason, while Grafana export keeps only the enabled subsetGET /v1/peersnow backfills the latest import, snapshot-repair, and replication-failure telemetry from durable peer incidents so operator context survives restart before the next live sync pass- successful local certified commits now record a durable
block_commitconsensus action so recovery history and action metrics cover the full proposer path from proposal and vote through commit - focused tests now cover peer import, admission, replication, and snapshot-restore alerts, per-peer Prometheus incident metrics, restart-safe per-peer telemetry reconstruction, JSON and Prometheus throughput metrics including settlement alert metadata, normalized utilization ratios, raw settlement-lag gauges, recent backlog-drain estimates, the explicit peak drain-estimate summary, warn-normalized drain-estimate ratios, explicit max drain gauges, settlement health or alert or SLO detail enrichment with worst-case drain forecasts, the canonical max projected-pressure and max drain-estimate recording rules, throughput health or alert or SLO projections, alert-rule export, dashboard export, and durable
block_commithistory across the operator surfaces
Planned but not implemented yet:
- authenticated peer discovery and replay-safe transport over libp2p on top of the new HTTP admission and binding policy
- broader consensus recovery coverage plus richer dashboard packages, longer-horizon aggregation, and export adapters beyond the current local proposal, vote, block-commit, peer-import, snapshot-recovery, JSON metrics, Prometheus text export, alert-rule bundles, recording-rule bundles, dashboard bundles, Grafana dashboard export, derived readiness, alerts, SLO summaries, structured event logs, durable peer-sync history, and derived peer-sync summary surfaces
- on-chain staking and governance-driven validator updates instead of ad hoc election API writes
- deterministic WASM smart-contract runtime with native fee metering
- confidential compute marketplace for encrypted off-chain jobs paid in native tokens, with partitioned worker-lane scaling ahead of any full consensus-sharding step
- production observability, recovery tooling, and public testnet operations
cmd/node: node process entrypoint and environment-based runtime configurationinternal/api: HTTP handlers, peer replication, consensus surface, transport abstraction, sync loops, automation loop, and status endpointsinternal/consensus: signed proposal and vote message primitivesinternal/dpos: candidate, vote, validator, and election service logicinternal/ledger: persisted accounts, mempool entries, committed blocks, validator snapshots, round state, consensus artifacts, snapshots, and commit/import logicinternal/tx: transaction envelope validation, address derivation, and signature verificationapps/wallet: reference light wallet built with Vue 3, Vite, and Tailwind CSSdocs/: architecture, API, usage, roadmap, and applications guidespaper/: private local academic paper workspace, draft manuscript materials, and evaluation planning notes kept out of git via.gitignorevar/: default local runtime state directory for the node, ignored by git
- Go 1.22 or newer
- Node.js
- npm
PowerShell note: if your shell blocks npm, use npm.cmd instead.
From the repository root:
go run ./cmd/nodeBy default the node:
- listens on
:8080 - stores durable state in
var/node - produces blocks every
15swhen transactions are queued - runs the consensus automation ticker every
1s, but automation stays off untilZEPHYR_ENABLE_CONSENSUS_AUTOMATION=true - uses a
5sconsensus round timeout once automation is enabled - runs peer sync only if
ZEPHYR_PEERSis configured - exposes consensus status even before a validator set has been elected
Useful probes:
Invoke-RestMethod http://localhost:8080/health
curl.exe -i http://localhost:8080/v1/health
Invoke-RestMethod http://localhost:8080/v1/alerts
Invoke-RestMethod http://localhost:8080/v1/slo
Invoke-RestMethod http://localhost:8080/v1/alert-rules
Invoke-RestMethod http://localhost:8080/v1/recording-rules
Invoke-RestMethod http://localhost:8080/v1/dashboards
Invoke-RestMethod http://localhost:8080/v1/status
curl.exe http://localhost:8080/metrics
curl.exe http://localhost:8080/v1/alert-rules/prometheus
curl.exe http://localhost:8080/v1/recording-rules/prometheus
curl.exe http://localhost:8080/v1/dashboards/grafanaIn a second terminal:
cd apps/wallet
npm install
npm run devIf PowerShell execution policy blocks npm, run:
cd apps/wallet
npm.cmd install
npm.cmd run devVite serves the wallet on http://localhost:5173 by default.
Node A, producer:
$env:ZEPHYR_NODE_ID="node-a"
$env:ZEPHYR_HTTP_ADDR=":8080"
$env:ZEPHYR_DATA_DIR="var/devnet-a"
$env:ZEPHYR_PEERS="http://localhost:8081"
$env:ZEPHYR_ENABLE_BLOCK_PRODUCTION="true"
$env:ZEPHYR_ENABLE_PEER_SYNC="true"
go run ./cmd/nodeNode B, replica:
$env:ZEPHYR_NODE_ID="node-b"
$env:ZEPHYR_HTTP_ADDR=":8081"
$env:ZEPHYR_DATA_DIR="var/devnet-b"
$env:ZEPHYR_PEERS="http://localhost:8080"
$env:ZEPHYR_ENABLE_BLOCK_PRODUCTION="false"
$env:ZEPHYR_ENABLE_PEER_SYNC="true"
go run ./cmd/nodeUse the wallet against Node A. Node B will follow through transaction, block, snapshot, and consensus-artifact sync from admitted peers.
For production-style consensus enforcement on the current devnet flow, run a node with:
$env:ZEPHYR_NODE_ID="node-a"
$env:ZEPHYR_VALIDATOR_ADDRESS="zph_validator_a"
$env:ZEPHYR_VALIDATOR_PRIVATE_KEY="<base64-pkcs8-p256-private-key>"
$env:ZEPHYR_ENFORCE_PROPOSER_SCHEDULE="true"
$env:ZEPHYR_REQUIRE_CONSENSUS_CERTIFICATES="true"
go run ./cmd/nodeThen use:
Invoke-RestMethod http://localhost:8080/v1/status
Invoke-RestMethod http://localhost:8080/v1/dev/block-template
Invoke-RestMethod http://localhost:8080/v1/consensusGET /v1/status exposes the node's signed transport identity when ZEPHYR_VALIDATOR_PRIVATE_KEY is configured. The template response gives you the exact height, previousHash, producedAt, full transactions, ordered transactionIds, and blockHash that a signed proposal must certify. Once a matching quorum certificate exists, POST /v1/dev/produce-block can commit that exact block candidate from the stored proposal body.
Initial round-0 proposer:
$env:ZEPHYR_NODE_ID="node-a"
$env:ZEPHYR_HTTP_ADDR=":8080"
$env:ZEPHYR_DATA_DIR="var/devnet-a"
$env:ZEPHYR_PEERS="http://localhost:8081"
$env:ZEPHYR_VALIDATOR_PRIVATE_KEY="<base64-pkcs8-p256-private-key-a>"
$env:ZEPHYR_ENABLE_BLOCK_PRODUCTION="true"
$env:ZEPHYR_ENABLE_PEER_SYNC="true"
$env:ZEPHYR_ENABLE_CONSENSUS_AUTOMATION="true"
$env:ZEPHYR_CONSENSUS_INTERVAL="250ms"
$env:ZEPHYR_CONSENSUS_ROUND_TIMEOUT="2s"
$env:ZEPHYR_ENFORCE_PROPOSER_SCHEDULE="true"
$env:ZEPHYR_REQUIRE_CONSENSUS_CERTIFICATES="true"
go run ./cmd/nodeSecond validator:
$env:ZEPHYR_NODE_ID="node-b"
$env:ZEPHYR_HTTP_ADDR=":8081"
$env:ZEPHYR_DATA_DIR="var/devnet-b"
$env:ZEPHYR_PEERS="http://localhost:8080"
$env:ZEPHYR_VALIDATOR_PRIVATE_KEY="<base64-pkcs8-p256-private-key-b>"
$env:ZEPHYR_ENABLE_BLOCK_PRODUCTION="true"
$env:ZEPHYR_ENABLE_PEER_SYNC="true"
$env:ZEPHYR_ENABLE_CONSENSUS_AUTOMATION="true"
$env:ZEPHYR_CONSENSUS_INTERVAL="250ms"
$env:ZEPHYR_CONSENSUS_ROUND_TIMEOUT="2s"
$env:ZEPHYR_REQUIRE_PEER_IDENTITY="true"
$env:ZEPHYR_PEER_VALIDATORS="http://localhost:8080=zph_validator_a"
$env:ZEPHYR_REQUIRE_CONSENSUS_CERTIFICATES="true"
go run ./cmd/nodeWith an active validator set and queued transactions, the scheduled proposer self-builds and signs the next proposal, active validators auto-vote, and the scheduled proposer auto-commits as soon as a matching quorum certificate exists. If the scheduled proposer stalls past the round timeout, the node advances the round, rotates the proposer, and the new proposer can reuse the latest stored candidate body for that same height.
ZEPHYR_HTTP_ADDR: HTTP bind address for the Go nodeZEPHYR_NODE_ID: human-readable node identifier used in peer replication headers and status outputZEPHYR_VALIDATOR_ADDRESS: chain-level validator address used for proposer-schedule enforcement and status reportingZEPHYR_VALIDATOR_PRIVATE_KEY: base64-encoded PKCS#8 P-256 private key used to derive and sign the node's validator transport identity plus automated proposal and vote messagesZEPHYR_DATA_DIR: local directory used for durable node stateZEPHYR_PEERS: comma-separated peer base URLs such ashttp://localhost:8081,http://localhost:8082ZEPHYR_BLOCK_INTERVAL: automatic block-production interval such as15sZEPHYR_CONSENSUS_INTERVAL: automation ticker interval such as250msor1sZEPHYR_CONSENSUS_ROUND_TIMEOUT: timeout window for the active round before automation advances to the next roundZEPHYR_SYNC_INTERVAL: peer poll/sync interval such as5sZEPHYR_MAX_TXS_PER_BLOCK: maximum committed transactions per produced blockZEPHYR_ENABLE_BLOCK_PRODUCTION:trueorfalseZEPHYR_ENABLE_CONSENSUS_AUTOMATION:trueorfalse; when enabled, active validators automatically propose, vote, and advance rounds on the current devnet pathZEPHYR_ENABLE_PEER_SYNC:trueorfalseZEPHYR_ENABLE_STRUCTURED_LOGS:trueorfalse; when enabled, the node emits newline-delimited JSON event logs for diagnostics, peer incidents, and snapshot recoveryZEPHYR_REQUIRE_PEER_IDENTITY:trueorfalse; when enabled, replicated peer POST requests must include a valid signed transport identityZEPHYR_PEER_VALIDATORS: comma-separated<peer-url>=<validator-address>bindings used to pin configured peers to expected validatorsZEPHYR_ENFORCE_PROPOSER_SCHEDULE:trueorfalse; when enabled and a validator set exists, only the scheduled proposer for the active round may produce the next block locallyZEPHYR_REQUIRE_CONSENSUS_CERTIFICATES:trueorfalse; when enabled and a validator set exists, local block commit and remote block import require a matching proposal and quorum certificate
Default values:
ZEPHYR_HTTP_ADDR::8080ZEPHYR_NODE_ID:node-localZEPHYR_VALIDATOR_ADDRESS: emptyZEPHYR_VALIDATOR_PRIVATE_KEY: emptyZEPHYR_DATA_DIR:var/nodeZEPHYR_PEERS: emptyZEPHYR_BLOCK_INTERVAL:15sZEPHYR_CONSENSUS_INTERVAL:1sZEPHYR_CONSENSUS_ROUND_TIMEOUT:5sZEPHYR_SYNC_INTERVAL:5sZEPHYR_MAX_TXS_PER_BLOCK:100ZEPHYR_ENABLE_BLOCK_PRODUCTION:trueZEPHYR_ENABLE_CONSENSUS_AUTOMATION:falseZEPHYR_ENABLE_PEER_SYNC:trueZEPHYR_ENABLE_STRUCTURED_LOGS:falseZEPHYR_REQUIRE_PEER_IDENTITY:falseZEPHYR_PEER_VALIDATORS: emptyZEPHYR_ENFORCE_PROPOSER_SCHEDULE:falseZEPHYR_REQUIRE_CONSENSUS_CERTIFICATES:false
VITE_ZEPHYR_API_BASE: base URL used by the wallet for node API calls- default:
http://localhost:8080
Example .env.local inside apps/wallet:
VITE_ZEPHYR_API_BASE=http://localhost:8080- The wallet generates an ECDSA P-256 keypair in the browser using Web Crypto.
- It derives a Zephyr-style address from the SHA-256 hash of the exported public key.
- The wallet stores the private key, public key, and address in browser
localStorage. - The wallet can inspect node-side account state and use a dev faucet for local funding.
- The wallet signs a canonical transaction payload locally and sends the signed envelope to the node.
- The node validates the payload, address, signature, nonce, and available balance before persisting the transaction in the durable mempool.
- A block-producing node can build a deterministic next-block template from the current mempool and latest chain tip.
- DPoS elections persist a durable validator snapshot with versioning, voting-power totals, and next-proposer scheduling metadata.
- Consensus state now persists the active height, round, and round start time separately from blocks and validator snapshots.
- Operators can still submit signed proposals for the active round's concrete block template, including the exact
previousHash,producedAt, fulltransactions, orderedtransactionIds, and derivedblockHash. - Validators can verify those proposal transactions directly from the proposal body instead of depending on local mempool convergence alone.
- If consensus automation is enabled, the scheduled proposer for the active round can build that same template, sign a proposal, persist it, and disseminate it without an operator POST.
- Active validators with automation enabled can sign and replicate a vote for the current known proposal.
- If the active round times out, the node advances the round, rotates the scheduled proposer, and can accept higher-round messages from peers even if its own timer had not fired yet.
- A new higher-round proposer can reuse the latest stored candidate body for that height instead of depending only on local mempool state.
- Once vote power crosses quorum, the node stores a durable commit certificate artifact for that height and round.
- If proposer-schedule enforcement is enabled, a node can refuse to produce a block unless its configured validator address matches the scheduled proposer for the active round.
- If consensus-certificate enforcement is enabled, local block commit and remote block import both require a proposal and quorum certificate for the exact block template being committed.
- A scheduled proposer with automation enabled and certificate enforcement turned on can auto-commit immediately from the stored certified proposal body.
- A consensus-gated local commit can replay the stored certified proposal body even when the local mempool does not contain that candidate anymore.
- If a validator private key is configured, the node derives a signed transport identity for its validator address and exposes that proof in runtime status.
- Configured peer nodes receive transactions, self-contained consensus proposals, votes, and blocks over the current transport implementation, verify peer identity proofs when available, enforce admission and validator binding when configured, import blocks when possible, and fall back to snapshot restore when they need catch-up.
- the current multi-node layer is still HTTP-based under the new transport abstraction, not libp2p networking
- peer admission and validator pinning can now be enforced over the current HTTP transport, but peer discovery is still static configuration rather than libp2p
- the round engine now supports timeout-driven proposer rotation, latest-artifact rebroadcast after link recovery, richer
roundEvidence, per-heightroundHistory,blockReadiness, import-awarerecovery, durable peer-sync incident history, bounded rejection diagnostics, machine-readableGET /v1/metrics, Prometheus-styleGET /metrics, derivedGET /v1/health, derivedGET /v1/alertsincluding peer import, admission, replication, and snapshot-restore warnings, derivedGET /v1/slo, recommendedGET /v1/alert-rules, exportedGET /v1/alert-rules/prometheus, recommendedGET /v1/recording-rules, exportedGET /v1/recording-rules/prometheus, recommendedGET /v1/dashboards, exportedGET /v1/dashboards/grafana, and local consensus-action history across restart for proposal, vote, round-advance, block-commit, import, and snapshot-repair events, but broader recovery tooling is still missing - crash recovery now persists active round metadata plus a bounded local consensus-action WAL, and peer snapshot restore preserves local recovery, diagnostics, and peer-sync incident history, but replay coverage is still centered on local proposal, vote, certified block-commit, and import-repair paths rather than the full consensus lifecycle
- DPoS elections still happen through an API call, not an on-chain staking/governance flow
- snapshot restore is a state catch-up mechanism, not a trust-minimized proof-based sync protocol
- WASM smart-contract execution is planned, but not implemented yet
- confidential compute jobs, worker attestation, escrow, and settlement are planned, but not implemented yet
- wallet private keys are stored unencrypted in browser
localStorage
Because of these limitations, the current MVP should still be treated as a development prototype, not a production blockchain network.
The production roadmap now lives in docs/roadmap.md.
Short version:
- Move the new enforced HTTP peer-admission and validator-binding policy toward authenticated libp2p discovery plus replay-safe transport behavior.
- Extend the new
blockReadiness,roundHistory,roundEvidence,recovery,diagnostics,peerSyncHistory,peerSyncSummary, per-peerrecentIncidents,GET /v1/metrics,GET /metrics,GET /v1/health,GET /v1/alerts,GET /v1/slo,GET /v1/alert-rules,GET /v1/alert-rules/prometheus,GET /v1/recording-rules,GET /v1/recording-rules/prometheus,GET /v1/dashboards,GET /v1/dashboards/grafana, and structured event logs into deeper recovery, longer-horizon incident retention, richer exported metrics, broader dashboard coverage, and production incident tooling. - Move validator lifecycle changes behind staking, delegation, slashing, and governance state transitions.
- Add deterministic WASM execution, native fee metering, and the confidential compute lane.
- Add production observability, recovery tooling, and public testnet operations.
- docs/architecture.md
- docs/api.md
- docs/usage.md
- docs/roadmap.md
- docs/applications.md
- paper/README.md
- Zaphyr-chain_manifesto.md
Zephyr Chain is licensed under the MIT License. See LICENSE.