Skip to content

feat: merge-train/spartan#22428

Merged
alexghr merged 16 commits intonextfrom
merge-train/spartan
Apr 10, 2026
Merged

feat: merge-train/spartan#22428
alexghr merged 16 commits intonextfrom
merge-train/spartan

Conversation

@AztecBot
Copy link
Copy Markdown
Collaborator

@AztecBot AztecBot commented Apr 9, 2026

BEGIN_COMMIT_OVERRIDE
fix(stdlib): use bigint arithmetic in GasFees.mul() for non-integer scalars (#22383)
fix(node-lib): reuse existing fileStore in snapshot sync instead of recreating (#22375)
fix: gate req/resp data protocols for unauthenticated peers (#22406)
fix(p2p): use per-batch ops array in AztecDatastore.batch() (#22357)
chore(pipeline): spartan config (#21285)
chore: add claude skill to send txs (#22439)
feat(pipeline): minimize deadzone w cross slot attesting (#21435)
fix(p2p): avoid 32-bit overflow in attestation pool block position key (#22412)
fix(prover-client): increment retry count on timeout re-enqueue to prevent infinite loop (#22355)
fix: remove redundant p2pClient.start() call (#22438)
chore: add kubectl binary to spartan .gitignore (#22454)
END_COMMIT_OVERRIDE

danielntmd and others added 2 commits April 9, 2026 08:17
…calars (#22383)

GasFees.mul() converted bigint fee values to Number for non-integer
scalar multiplication, silently losing precision for values above 2^53.
Since gas fees are UInt128 and can exceed 2^53 under realistic
conditions (e.g. when the fee asset depreciates relative to ETH), this
produced incorrect fee calculations in wallet code that calls .mul(1.5).

Replaced the Number conversion with scaled bigint arithmetic that
preserves full precision for all UInt128 values while maintaining the
ceiling behavior needed for fee padding.

Co-authored-by: danielntmd <danielntmd@nethermind.io>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ecreating (#22375)

## Summary

`snapshotSync` accepted a URL string and created a new
`ReadOnlyFileStore` internally, discarding the instance already created
by the caller. This resulted in redundant object instantiation during
snapshot downloads.

## Changes

- Changed `snapshotSync` to accept a `fileStore: ReadOnlyFileStore`
instead of `snapshotsUrl: string`, removing the redundant
`createReadOnlyFileStore` call inside the function.
- Updated `trySnapshotSync` to pass the pre-created `fileStore` from
each snapshot candidate.
- Updated `downloadEpochProvingJob` to pass its already-created
`fileStore` through to `snapshotSync`.

Co-authored-by: danielntmd <danielntmd@nethermind.io>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
deffrian and others added 9 commits April 9, 2026 10:11
When `p2pAllowOnlyValidators` is enabled, unauthenticated peers were
excluded from gossipsub, but could still freely query block data and
transactions through req/resp protocols (BLOCK, BLOCK_TXS, TX) with no
authentication check.

This adds an authentication gate in `ReqResp.streamHandler()` that
rejects unauthenticated peers on all protocols except those needed for
the handshake flow (PING, STATUS, AUTH, GOODBYE)

Ref: A-698
## Summary

- `AztecDatastore.batch()` stored batch operations in a shared
class-level `#batchOps` array, meaning concurrent batches would corrupt
each other's operations. Replaced with a local `ops` array per batch
call, matching the reference `BaseDatastore` implementation from
`datastore-core`.
- Added a test that verifies concurrent batches don't interfere with
each other.

Fixes
[A-761](https://linear.app/aztec-labs/issue/A-761/audit-92-aztecdatastorebatch-shares-batchops-across-concurrent-batches)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pipelined mbps spartan scenario
This PR adds a claude skill that uses the published cli-wallet package
to interact with a live network. It can deploy contracts, send txs and
query state.
## Overview

Allow validators to attest to old proposals slightly into the next slot,
this allows validators from the slot before to send their checkpoint
proposals
later in their own slot.

## Key points
- Allows timetable to extend past the current slot 
- Decouples attestation gathering from the hot path for sequencers - it
can move async
- Refactor of the timetable model into stdlib so it can be consumed
elsewhere
Copy link
Copy Markdown
Collaborator

@ludamad ludamad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Auto-approved

@AztecBot AztecBot enabled auto-merge April 9, 2026 19:26
@AztecBot
Copy link
Copy Markdown
Collaborator Author

AztecBot commented Apr 9, 2026

🤖 Auto-merge enabled after 4 hours of inactivity. This PR will be merged automatically once all checks pass.

@AztecBot AztecBot added this pull request to the merge queue Apr 9, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Apr 9, 2026
spypsy and others added 5 commits April 9, 2026 19:12
#22412)

## Summary
- Replace bit-shift (`<<`) with multiplication in
`AttestationPool.getBlockPositionKey` to prevent 32-bit signed integer
overflow on large slot numbers. JavaScript's `<<` converts operands to
signed 32-bit ints, which overflows after slot ~2^21. Using
multiplication keeps values in float64 range (safe up to 2^53).

Fixes
[A-760](https://linear.app/aztec-labs/issue/A-760/audit-91-attestationpoolgetblockpositionkey-bit-shift-overflow-after)
…event infinite loop (#22355)

## Summary

- Timed-out proving jobs in `ProvingBroker.reEnqueueExpiredJobs()` were
being re-enqueued without incrementing the retry count or checking
`maxRetries`, creating an infinite retry loop for jobs that consistently
time out.
- Now the timeout path increments the retry counter and rejects jobs
that exceed `maxRetries`, matching the behavior of the error retry path
in `#reportProvingJobError`.

Fixes
[A-715](https://linear.app/aztec-labs/issue/A-715/audit-35-timed-out-proving-jobs-re-enqueue-without-incrementing-retry)
Removes the duplicate `p2pClient.start()`. The P2P client is already
fully started (and synced) by the unconditional `await
p2pClient.start()` earlier in `createAztecNode`.

The second call just hits the guard clause (`if state !== IDLE return
syncPromise`) and is a no-op. This is just for cleanup

Fixes
[A-736](https://linear.app/aztec-labs/issue/A-736/audit-60-p2p-client-start-called-twice-in-serverts-duplicate-listeners)
## Summary

- Add `scripts/kubectl` to `spartan/.gitignore` to prevent the
downloaded kubectl binary from being accidentally committed
- The binary is downloaded by `spartan/scripts/deploy_network.sh` at
runtime

ClaudeBox log: https://claudebox.work/s/98e0d3700d589d71?run=3
@alexghr alexghr enabled auto-merge April 10, 2026 08:46
@alexghr alexghr added this pull request to the merge queue Apr 10, 2026
@AztecBot
Copy link
Copy Markdown
Collaborator Author

Flakey Tests

🤖 says: This CI run detected 1 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (8;;http://ci.aztec-labs.com/08eb7a6ff1937356�08eb7a6ff19373568;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_epochs/epochs_invalidate_block.parallel.test.ts "proposer invalidates multiple checkpoints" (411s) (code: 0) group:e2e-p2p-epoch-flakes

Merged via the queue into next with commit fb13de6 Apr 10, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants