Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
0009021
feat: replace soft tx cache with revalidation-based validation cache
mpskowron Feb 22, 2026
6432df8
Merge branch 'main' into skowron/tx-revalidation
mpskowron Apr 8, 2026
f684d77
fix: tests and cargo fmt
mpskowron Apr 8, 2026
6a638a0
Merge branch 'main' into skowron/tx-revalidation
mpskowron Apr 8, 2026
86ba80a
fix: remove unnecessary metrics change; do not apply tx on pool reval…
mpskowron Apr 8, 2026
1a6bec4
Merge branch 'main' into skowron/tx-revalidation
mpskowron Apr 10, 2026
54971f6
Merge branch 'main' into skowron/tx-revalidation
mpskowron Apr 15, 2026
eb99bf6
perf: store sp of ledger state in cache
mpskowron Apr 15, 2026
e0c3c69
chore: changelog
mpskowron Apr 15, 2026
dfaf5d1
Merge branch 'main' into skowron/tx-revalidation
mpskowron Apr 20, 2026
29d5e88
docs: add initial notes on batch verification implementation
ozgb Jul 8, 2026
d877033
Merge branch 'main' into skowron/tx-revalidation
ozgb Jul 10, 2026
03a3d38
feat: bump ledger to js/batch-verification; prepare for implementation
ozgb Jul 13, 2026
b731346
feat(node,ledger): batch ZK-proof verification core + block-import in…
ozgb Jul 13, 2026
c5c202d
feat(node,ledger): batch-verify mempool ingress + isolation fallback
ozgb Jul 14, 2026
11a896d
Merge branch 'main' into ozgb-batch-proof-verification
ozgb Jul 14, 2026
56b77a1
chore: fix Cargo.lock
ozgb Jul 14, 2026
8ea9301
fix: cargo check errors
ozgb Jul 14, 2026
0b54993
feat(node): record block-import batch-verify crypto time
ozgb Jul 14, 2026
ccb3b99
test: add docker batch-verify block-import perf harness
ozgb Jul 14, 2026
2f05c19
feat(node,ledger): per-midnight-tx proof-verify metrics
ozgb Jul 14, 2026
1305572
fix(ledger): record inline proof-verify metric on the pre_dispatch path
ozgb Jul 15, 2026
12fc88c
test(node): run batch-verify benchmark against a locally-built node
ozgb Jul 15, 2026
cf120d1
Merge branch 'main' into skowron/tx-revalidation
chrispalaskas Jul 15, 2026
aa731a1
chore: DCO remediation for michal.skowron@iohk.io
mpskowron Jul 15, 2026
b3c655d
chore: DCO remediation for michal.skowron@shielded.io
mpskowron Jul 15, 2026
214eebf
Merge branch 'main' into skowron/tx-revalidation
chrispalaskas Jul 27, 2026
d006477
chore(deps): bump ledger batch-verification pins to js/batch-verifica…
ozgb Jul 28, 2026
94b2895
fix(ledger,toolkit): seed Zswap/Dust proving keys instead of fetching…
ozgb Jul 29, 2026
7953d7b
fix(ledger,toolkit): dispatch proving per ZKIR generation on ledger 9
ozgb Jul 29, 2026
e3f845a
chore: regenerated genesis undeployed
ozgb Jul 29, 2026
bc84a34
chore(deps): bump ledger batch-verification pins to js/batch-verifica…
ozgb Jul 30, 2026
fee713e
refactor(ledger): use the ledger's failed-index localization to isola…
ozgb Jul 30, 2026
6f3cb22
Merge branch 'main' into ozgb-batch-proof-verification
ozgb Jul 31, 2026
465ba60
fix(ledger): clear clippy warnings in the batch-verification path
ozgb Jul 31, 2026
58338e3
feat(ledger): log per-tx mempool validation on the batch-verify path
ozgb Jul 31, 2026
7165959
Merge branch 'main' into skowron/tx-revalidation
ozgb Aug 10, 2026
d1d6cc9
chore: remove TX_VALIDATION_CACHE_TTL
ozgb Aug 11, 2026
624b3f5
chore: move change file to correct location
ozgb Aug 11, 2026
202ba1d
perf: keep validation cache entries across rejections
ozgb Aug 11, 2026
3dd295e
Merge branch 'main' into skowron/tx-revalidation
ozgb Aug 11, 2026
00de928
chore(deps): bump batch-verification ledger pins to ef5f7a04
ozgb Aug 14, 2026
a636dff
chore(deps): bump batch-verification ledger pins to 99f6dbfb
ozgb Aug 17, 2026
9ee88ac
Merge remote-tracking branch 'origin/main' into ozgb-batch-proof-veri…
ozgb Aug 17, 2026
f1c944d
fix(ci): unbreak the two ledger-helpers tests and seed zk keys in the…
ozgb Aug 17, 2026
c63d62b
chore(genesis): regenerate undeployed and local genesis for the dust-…
ozgb Aug 17, 2026
c9d9e55
test(toolkit): ignore hardfork_single_tx on the batch-verification pin
ozgb Aug 17, 2026
2c5df2b
chore: merge skowron/tx-revalidation (PR #744) into combined test branch
chrispalaskas Aug 18, 2026
c6590ef
chore: apply ozgb-ledger-intermediate-states (PR #1443) onto combined…
chrispalaskas Aug 18, 2026
ca3e1ab
fix(pallet-midnight): make test-utils feature build with PR #744 mock…
chrispalaskas Aug 18, 2026
f9c315c
revert: drop PR #1443 (stop persisting intermediate ledger states)
chrispalaskas Sep 1, 2026
6bd32a6
feat(node): apply PR #2050 (keep intra-block ledger states live)
chrispalaskas Sep 1, 2026
0871f45
feat(runtime): raise block length to 5 MiB and zero the flat per-tx w…
chrispalaskas Sep 1, 2026
22f2ea3
chore: cargo fmt
chrispalaskas Sep 1, 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
33 changes: 33 additions & 0 deletions Batch-Implemenation-Plan-Prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
❯ Let's create an implementation plan for the batch verification work

read the current notes

My thinking:

- let's create a large LRU cache in our ledger/ crate - this cache will live on the native side of the node, and will be large (1000?) - mapping <tx-hashes> -> <proof-verification-result:bool>
- we don't want this cache to miss - a cache miss should result in an error log (since it represents potentially pretty slow block production/verification)

- Let's leave the batch verification implementation open for now - just know that this is the API we'll use for the ledger:
```
// Pass defer_proofs() so Transaction::well_formed skips inline verification.
let deferred = WellFormedStrictness::default().defer_proofs();
let mut all_evidence = vec![];
for tx in &block_transactions {
tx.well_formed(ref_state, deferred, tblock)?;
all_evidence.extend(tx.collect_proof_evidence(ref_state)?);
}
// One batch verify covers contract + dust + zswap proofs for the entire block.
P::batch_proof_verify(&all_evidence, deferred.proof_verification_mode)?;
```

We should compute this on mempool entry (let's abstract into a func with a todo!() implementation for now, but focus instead on the data flow) and on block import

On mempool entry, we should use the algorithm in the notes, and create a custom implementation of ChainApi to feed this queue. The VerifiedTransaction returned from well_formed() should be added to the tx validation cache (soft and strict) once the proofs have been verified. We should add a `todo!()` function for the fallback if batch proof verification fails

For block import, let's create a BlockImport wrapper as indicated by the notes. Block import will first do all the wellformed checks with deffered proofs, then attempt to batch-verify the proofs. There is no fallback for block import - if block import fails, that's it.

Whenever a transaction is being processed, it should check the proof-verified cache. If there is a cache miss, this is an error log (the cache should always be filled, either when a block is imported, or a tx is entering the mempool)

The exception to this is the ingress points, in the mempool and in block import. These points should not poll the proof-verification or tx-validation caches.

Create an implementation plan based on this
614 changes: 614 additions & 0 deletions Batch-Verification-Notes.md

Large diffs are not rendered by default.

Loading