Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2d553e1
perf(consensus): precompute auth data root concurrently in the checkp…
p0mvn Jun 19, 2026
66bbd25
perf: de-duplicate the librustzcash conversion for txid and auth digest
p0mvn Jun 18, 2026
a0dccf1
perf: de-duplicate the librustzcash conversion for txid and auth digest
p0mvn Jun 19, 2026
e9d6c66
perf(state): parallelize per-block serialization in the finalized blo…
p0mvn Jun 19, 2026
54ce7b0
perf(state): gate parallel block batch-prep on a transaction-count th…
p0mvn Jun 19, 2026
5fa641a
perf(chain): compute ZIP-244 txid and auth digest natively (#131)
p0mvn Jun 19, 2026
c1b82a5
perf(chain): drop the discarded librustzcash reparse on v5 deserializ…
p0mvn Jun 19, 2026
58ff689
perf(chain): defer Sapling cv/epk decompression, enforce on the seman…
p0mvn Jun 19, 2026
64bc60f
perf(state): parallelize and de-duplicate the committer's UTXO/addres…
p0mvn Jun 19, 2026
0eb3e23
perf(state): optimize checkpoint prepare digest fanout (#148)
p0mvn Jun 19, 2026
91d5997
perf(state): precompute note-commitment tree hashing off the committe…
p0mvn Jun 20, 2026
e96d118
[REVERT] Roman's AI workspace
p0mvn Jun 21, 2026
2419cc4
perf(sync): hedge head-of-line block download on registry-miss [proto…
p0mvn Jun 21, 2026
79e1fd1
perf(state): overlap raw-transaction serialization with the committer…
p0mvn Jun 23, 2026
f363402
perf(state): run write_block on the committer thread instead of the c…
p0mvn Jun 23, 2026
be10a04
test(zebrad): accept CommitCheckpointPrecomputed in legacy sync vectors
evan-forbes Jun 27, 2026
8072b5c
fix: stabilize flaky Zakura network and VCT fast-sync tests (#293)
evan-forbes Jun 27, 2026
c93ff28
docs: add CHANGELOG_PARAMS.md to track tuned parameters (#304)
evan-forbes Jun 28, 2026
d46bc60
feat(perf): add offline commit-pipeline replay benchmark (zebra-repla…
p0mvn Jun 28, 2026
c38863a
feat(perf): add write-worker replay mode + bounded prefetch to zebra-…
p0mvn Jun 28, 2026
25dc3ba
feat(perf): add checkpoint-verifier and block-sync-sequencer replay r…
p0mvn Jun 29, 2026
9747079
chore(zakura): add default bootstrap peers (#324)
evan-forbes Jun 30, 2026
095b00e
fix(network): close peers after repeated receive timeouts (#319)
evan-forbes Jul 1, 2026
0a184db
feat(state): skip the transparent address index in pruned checkpoint-…
p0mvn Jul 1, 2026
397910e
fix: resolve ironwood rebase fallout
p0mvn Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
fail-fast = true
status-level = "pass"

# --- Test groups ---

# Zakura networking tests dial real iroh/QUIC endpoints and register peers within
# a bounded deadline. Running many of them at once oversubscribes the CPU and
# starves those handshakes/upgrades, which surfaced as flaky timeouts and upgrade
# races in the PR lane (which has no retries). Cap their concurrency so they do
# not starve each other. This complements the generous `TEST_NET_TIMEOUT` deadline
# in the zebra-network testkit: the deadline absorbs slow connects, the group keeps
# the contention that causes them from piling up. It does not exclude any tests, so
# coverage is unchanged.
[test-groups]
zakura-network = { max-threads = 4 }

# --- Platform-specific overrides ---

# Skip Windows-incompatible tests
Expand All @@ -13,6 +26,14 @@ platform = 'cfg(target_os = "windows")'

filter = "not test(=trusted_chain_sync_handles_forks_correctly) and not test(=delete_old_databases)"

# Bound the Zakura networking tests (real iroh/QUIC connects) to the serial test
# group defined above. This override lives on the `default` profile so it applies
# to every profile (all-tests, full-tests, ...). It only assigns a test group; it
# does not filter any tests out, so coverage is unchanged.
[[profile.default.overrides]]
filter = "package(zebra-network) and (test(~zakura::legacy_gossip::tests) or test(~zakura::testkit::cluster::tests) or test(~zakura::testkit::gossip::tests) or test(~zakura::testkit::mock_blocksync) or test(~mutual_p2p))"
test-group = "zakura-network"

# --- All Tests profile ---
# CI-friendly test selection.
#
Expand Down
17 changes: 17 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// Rust build artifacts (~140G in target/, ~5G in unity-node/target/) saturate
// the file watcher and index, which hangs the extension host (agents + terminal).
// These dirs are gitignored, so hiding them from the editor is safe.
"files.watcherExclude": {
"**/target/**": true,
"**/.git/objects/**": true
},
"search.exclude": {
"**/target": true
},
"files.exclude": {
"**/target": true
},
// Let rust-analyzer manage the workspace without a redundant cargo check storm.
"rust-analyzer.files.excludeDirs": ["target"]
}
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ cargo nextest run --profile sync-large-checkpoints-empty

- Update `CHANGELOG.md` under `[Unreleased]` for user-visible changes
- Update crate `CHANGELOG.md` for library-consumer-visible changes
- When changing a tunable parameter (a constant, `Config` default, timeout, window/limit, or backoff/growth coefficient), add a row to `CHANGELOG_PARAMS.md` in the same PR — record the parameter, location, old → new, PR link, and a one-line why
- Apply the appropriate PR label (`C-feature`, `C-bug`, `C-security`, etc.)
- See `CHANGELOG_GUIDELINES.md` for detailed formatting rules

Expand Down
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ and this project adheres to [Semantic Versioning](https://semver.org).
data. This moves ZIP-244 authorizing-data commitment work off the finalized
committer's critical path when available, while preserving the existing
recompute fallback.
- Skip the transparent address index (balances, address→utxo, address→tx) on a
pruned, checkpoint-syncing node. The index is RPC-only state, not consensus, so
the minimal fast-validator configuration no longer does the per-block
address-balance reads or the index writes (like pruned mode already skips
raw-transaction storage). Address-lookup RPCs (`getaddressbalance`,
`getaddressutxos`, `getaddresstxids`) return an explicit "index disabled"
error in this mode instead of wrong (empty) results. Archive nodes, and pruned
nodes with checkpoint sync disabled (full semantic verification), are unchanged.
- Compute the v5 ZIP-244 txid and authorizing-data digest natively. Both
previously routed through `Transaction::to_librustzcash`, which re-serializes
and reparses the whole transaction — decompressing every Jubjub and Pallas
Expand Down Expand Up @@ -112,13 +120,31 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- Limit RocksDB write-ahead logs to 4 GiB in the finalized state database. Heavy
sync could otherwise accumulate tens of GiB of WAL files, making restarts spend
minutes replaying logs before Zebra could resume syncing.
- Precompute note-commitment tree hashing ahead of the finalized committer. The
per-leaf Merkle hashing for a block (the dominant committer cost on shielded
blocks) depends only on the starting note count, not the frontier's hashes, so
the finalized write loop now does a one-block look-ahead and runs the next
block's Sapling/Orchard hashing on idle cores while the current block commits;
the committer then only applies the precomputed subtree roots onto the frontier
(`update_trees_parallel_with` in `zebra-chain`). The precompute is applied only
if its starting tree size still matches at commit time and otherwise falls back
to inline hashing, so it affects only speed, never the resulting tree. This cuts
the committer's tree-update cost by ~54% (12.5 → 5.7 ms/block) where the
committer is the bottleneck.

### Changed

- Increased Zakura's default connection, handshake, stream-open, and QUIC
window limits, and configured default native Zakura bootstrap peers. The
larger defaults are intended for the production native-P2P sync path rather
than the earlier conservative test-network envelope.
- Transparent address-index RPCs (`getaddressbalance`, `getaddressutxos`, and
`getaddresstxids`) now require archive storage mode. Pruned nodes return an
error for these calls because pruned storage does not guarantee complete
address-index data. A pruned database is now durably marked from its first
commit (state database format minor version bump), so this holds even during the
initial-sync window before raw-transaction pruning starts, and the database can
no longer be reopened as an archive in that window.
- Extended finalized-state value-pool disk serialization with an Ironwood slot
after the deferred pool, keeping older value-pool records readable.
- Use V3 chain-history entries from NU6.3 onward, including Ironwood note
Expand Down Expand Up @@ -252,6 +278,14 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- Treat missing transaction inventory responses during mempool download as a
recoverable download failure, avoiding a panic when public peers no longer
have a gossiped transaction available.
- Stop the database format-validity check from panicking with "just checked for
genesis block" while a verified-commitment-trees fast sync is in progress. The
check runs on a background thread, concurrently with block commits, and could
read its `is_vct_synced()` guard as `false` and then read an absent genesis
note-commitment tree once a concurrent fast-sync commit set the marker in
between. It now treats an absent genesis tree as a (mid-flight) fast-synced
database — where the genesis-root-caching invariant does not apply — instead of
panicking.
- Roll back the Zakura header store together with finalized block data, so
databases produced by `zebra-rollback-state` can resume Zakura body sync from
the new body tip instead of stalling behind stale headers and falling back to
Expand Down
Loading