Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
acb9318
proof engine test converage
frisitano Feb 5, 2026
1031ba8
forkchoice integration
frisitano Feb 7, 2026
0de5b0c
integrate engine and proof engine in execution layer interface
frisitano Feb 9, 2026
6c8e626
introduce validator client proof service
frisitano Feb 9, 2026
5cbe70a
introduce validator client proof service with execution layer proof e…
frisitano Feb 9, 2026
92f60eb
integration tests and updates
frisitano Feb 18, 2026
826cf7b
add preliminary ProofSync subsystem in SyncManager
frisitano Feb 25, 2026
c71cbff
proof sync testing
frisitano Feb 27, 2026
bad8521
use execution status message for proof sync
frisitano Mar 7, 2026
1db3e8a
chore: fix clippy lint errors
nova-tau-assistant Mar 8, 2026
8eeff74
Trigger CI
nova-tau-assistant Mar 8, 2026
eaa1bce
Address PR feedback: remove fork check, rename ExecutionProofStatus f…
nova-tau-assistant Mar 8, 2026
01f434a
Test webhook notification
nova-tau-assistant Mar 8, 2026
79eb734
Remove webhook test file
nova-tau-assistant Mar 8, 2026
f27b0b2
Trigger CI for webhook test
nova-tau-assistant Mar 8, 2026
a2545ba
Test new telegram-bot framework webhook
nova-tau-assistant Mar 8, 2026
f7d5aaa
Test: CI trigger
nova-tau-assistant Mar 8, 2026
1a01e61
Trigger CI for webhook test
nova-tau-assistant Mar 8, 2026
c2920c3
Fix: cargo fmt formatting
nova-tau-assistant Mar 8, 2026
86bdaee
Fix: Remove unused import RpcRequestSendError
nova-tau-assistant Mar 8, 2026
377abff
Fix CI failures: cargo fmt, unused imports, dead code warnings
nova-tau-assistant Mar 8, 2026
efbf658
fix: resolve CI failures - formatting, deps, tests
nova-tau-assistant Mar 8, 2026
085d788
fix: resolve CI failures - clippy result_large_err fixes
nova-tau-assistant Mar 8, 2026
9d29e7e
fix: resolve all CI failures - comprehensive fix
nova-tau-assistant Mar 8, 2026
6044ae0
fix ci
frisitano Mar 9, 2026
7560721
fix: resolve remaining CI failures
frisitano Mar 10, 2026
bb30520
fix: address PR review comments and CI failures
frisitano Mar 10, 2026
7c4d57b
refactor: address PR review comments - proof sync architecture cleanup
frisitano Mar 10, 2026
65eda5e
small refactor
frisitano Mar 11, 2026
d842ef1
fix lint
frisitano Mar 11, 2026
9801bc9
fix lint
frisitano Mar 11, 2026
0bf1f1b
refactor
frisitano Mar 11, 2026
270388e
cargo fmt
frisitano Mar 11, 2026
a511ba9
ci fixes
frisitano Mar 13, 2026
bf9d7c2
increase genesis delays to fix CI timing failures
frisitano Mar 13, 2026
d3fae44
ci fixes
frisitano Mar 13, 2026
504ffa4
simulator: delay extra node join to END_EPOCH - 3
frisitano Mar 15, 2026
5394832
fix(simulator): remove Supernode custody from non-boot nodes and redu…
nova-tau-assistant Mar 16, 2026
3f60ae3
Merge pull request #5 from frisitano/feat/execution-status-ci-fix
frisitano Mar 16, 2026
355c8eb
Merge pull request #1 from frisitano/feat/execution-status
frisitano Mar 17, 2026
af38e14
proof engine persistence
nova-tau-assistant Mar 17, 2026
3303ede
refactor: proof engine persistence
frisitano Mar 17, 2026
5ece898
fix fmt and lint
frisitano Mar 17, 2026
73b5e29
refactor proof engine persistence load
frisitano Mar 17, 2026
0efb610
refactor proof engine persistence load
frisitano Mar 17, 2026
89cfe91
cargo fmt
frisitano Mar 17, 2026
c368e1b
Merge pull request #6 from frisitano/feat/production-proof-storage
frisitano Mar 17, 2026
78bbb5f
feat: validator proof resigning
nova-tau-assistant Mar 17, 2026
597687d
refactor api
nova-tau-assistant Mar 17, 2026
ba18da6
refactor
frisitano Mar 17, 2026
ecfbdee
clean up
frisitano Mar 17, 2026
0e1f562
deprecate SseBlockFull
frisitano Mar 17, 2026
9b26292
gossip behaviour
frisitano Mar 17, 2026
61116c3
gossip behaviour
frisitano Mar 17, 2026
29e2770
Merge pull request #7 from frisitano/feat/validator-resigning
frisitano Mar 17, 2026
292f0e1
Merge remote-tracking branch 'origin/feat/eip8025' into feat/proof-en…
nova-tau-assistant Mar 17, 2026
22e0b2f
refactor: introduce ProofNodeClient abstraction
nova-tau-assistant Mar 18, 2026
fceb121
refactor
frisitano Mar 18, 2026
f820b5d
refactor proof engine implementation
frisitano Mar 18, 2026
360cf57
clean up
frisitano Mar 18, 2026
4f2dbb2
lint
frisitano Mar 18, 2026
c7470d6
Merge pull request #8 from frisitano/feat/proof-engine-api-update
frisitano Mar 18, 2026
e8c393e
feat: add zstd compression to ProofEngine persistence
nova-tau-assistant Mar 19, 2026
3014880
feat: add proof engine zkboost integration test framework
nova-tau-assistant Mar 19, 2026
578d3c6
refactor: center ProofType encoding as the main compatibility boundary
nova-tau-assistant Mar 19, 2026
6911853
docs: attribute proof_types bug fix to zkboost integration harness
nova-tau-assistant Mar 19, 2026
452cadb
cargo fmt
frisitano Mar 19, 2026
4b22800
Merge pull request #9 from frisitano/feat/check-proof-storage-compres…
frisitano Mar 19, 2026
c79686a
refactor: replace mock zkboost server with upstream types
nova-tau-assistant Mar 19, 2026
39f0e59
test: validate ProofNodeClient against real zkboost server
nova-tau-assistant Mar 19, 2026
cbfcf23
clean up
frisitano Mar 19, 2026
59bc873
rebuild lock file
frisitano Mar 19, 2026
413b587
clean up
frisitano Mar 19, 2026
e15b5b4
Merge pull request #10 from frisitano/feat/proof-engine-zkboost-ingre…
frisitano Mar 19, 2026
a9202de
feat: add proof engine SSE monitor for proof completion loop
nova-tau-assistant Mar 19, 2026
751edc0
update msrc
frisitano Mar 19, 2026
9397dc0
Merge pull request #11 from frisitano/feat/proofservice-proof-complet…
frisitano Mar 19, 2026
975f777
Feat/fix zkboost GitHub workflow (#13)
frisitano Mar 19, 2026
c9777df
Feat/eip8025 kurtosis refactor minimal (#12)
frisitano Mar 20, 2026
78c235a
feat: eip8025 (#17)
frisitano Mar 20, 2026
3b27324
Feat/execution proof peer validator scoring (#14)
frisitano Mar 23, 2026
62ec9f4
feat: execution proof scoring improvements (#16)
frisitano Mar 23, 2026
26202ba
(fix) proof engine tests (#17)
frisitano Mar 24, 2026
190713b
feat: execution proof sync protocol hardening (#18)
frisitano Mar 25, 2026
aa0373a
integrate zkboost (#15)
frisitano Mar 25, 2026
3074529
Merge eth/feat/eip8025 into feat/eip8025
frisitano Mar 25, 2026
fd7ed0c
optimisations
frisitano Mar 25, 2026
842f767
feat: Integrate eip8025 advancements (#18)
frisitano Mar 26, 2026
41a64b2
Merge remote-tracking branch 'eth/feat/eip8025' into feat/eip8025
frisitano Mar 26, 2026
c898fde
feat: test improvements and code hygiene (#19)
frisitano Mar 27, 2026
8175c79
Feat/eip8025 networking improvements (#21)
frisitano Mar 30, 2026
b5297c9
feat: use static grafana dashboards via local branch reference
frisitano Mar 30, 2026
d6c220b
feat: add lighthouse tags and zkboost instance selector to dashboards
frisitano Mar 31, 2026
a1b59e6
feat: add prometheus metrics and grafana dashboards for proof engine …
frisitano Mar 31, 2026
48f1e99
feat: add GPU zkboost network params for real ere-server-zisk provers
frisitano Mar 31, 2026
448dea9
fix: use block scope to drop RwLockWriteGuard before await in new_pay…
frisitano Mar 31, 2026
5d0b8f2
chore: apply cargo fmt and clippy lint fixes
frisitano Mar 31, 2026
1b503b3
chore: remove dashboards from local repo (moved to ethereum-package)
frisitano Mar 31, 2026
9ad5526
ci: check zkboost proof count via metrics endpoint instead of log scr…
frisitano Mar 31, 2026
298c8dd
feat: network sync refactor - min req message size (#22)
frisitano Mar 31, 2026
49528cb
Merge feat/kurtosis-grafana into feat/eip8025
frisitano Mar 31, 2026
cf4b8d8
fix: resolve merge conflict with feat/eip8025 proof_sync refactor
frisitano Mar 31, 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
4 changes: 2 additions & 2 deletions .github/workflows/docker-reproducible.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ jobs:
- arch: amd64
rust_target: x86_64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8e3c421122bf4cd3b2a866af41a4dd52d87ad9e315fd2cb5100e87a7187a9816
rust:1.91-bullseye@sha256:ed6afcf912afc6aeddf0d1ff0dc6894c9b1c8f865964ef3f533e3ea77a64ffea
platform: linux/amd64
runner: ubuntu-22.04
- arch: arm64
rust_target: aarch64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8b22455a7ce2adb1355067638284ee99d21cc516fab63a96c4514beaf370aa94
rust:1.91-bullseye@sha256:2f06f086e3ceb2940b6f400f576aeec1abf6b6a7cbeb55a163ec2f9c0bbb1ed6
platform: linux/arm64
runner: ubuntu-22.04-arm
runs-on: ${{ matrix.runner }}
Expand Down
139 changes: 139 additions & 0 deletions .github/workflows/kurtosis-eip8025.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Test that the EIP-8025 Kurtosis testnet starts and the proof engine integrates
# correctly with real zkboost-server backends.
name: kurtosis eip8025

on:
push:
branches:
- unstable
pull_request:
merge_group:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
run-eip8025-testnet:
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v5

- name: Install Kurtosis
run: |
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
sudo apt update
sudo apt install -y kurtosis-cli
kurtosis analytics disable

- name: Install yq
run: |
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
sudo chmod +x /usr/local/bin/yq

- name: Start EIP-8025 zkboost testnet
run: ./start_eip8025_zkboost_testnet.sh
working-directory: scripts/local_testnet

- name: Wait for chain liveness
run: |
BEACON_URL=$(kurtosis port print eip8025-zkboost cl-1-lighthouse-reth http)
echo "Polling $BEACON_URL for head slot > 10..."
for i in $(seq 1 20); do
SLOT=$(curl -sf "$BEACON_URL/eth/v1/beacon/headers/head" \
| jq -r '.data.header.message.slot' 2>/dev/null || echo 0)
echo " attempt $i: head slot = $SLOT"
if [ "$SLOT" -gt 10 ]; then
echo "Chain is live at slot $SLOT"
break
fi
if [ "$i" -eq 20 ]; then
echo "Timed out waiting for head slot > 10"
exit 1
fi
sleep 30
done

- name: Inspect beacon node state
run: |
set -euo pipefail
ENCLAVE=eip8025-zkboost
SERVICES=(cl-1-lighthouse-reth cl-2-lighthouse-reth cl-3-lighthouse-reth cl-4-lighthouse-reth)
FAILED=0

for SVC in "${SERVICES[@]}"; do
URL=$(kurtosis port print "$ENCLAVE" "$SVC" http)
echo "=== $SVC ($URL) ==="

# Syncing status — must not be syncing
SYNCING=$(curl -sf "$URL/eth/v1/node/syncing" | jq -r '.data.is_syncing')
echo " is_syncing: $SYNCING"
if [ "$SYNCING" != "false" ]; then
echo " FAIL: $SVC is still syncing"
FAILED=1
fi

# Peer count — must have at least one connected peer
PEERS=$(curl -sf "$URL/eth/v1/node/peer_count" | jq -r '.data.connected')
echo " connected peers: $PEERS"
if [ "${PEERS:-0}" -lt 1 ]; then
echo " FAIL: $SVC has no connected peers"
FAILED=1
fi

# Head slot — must be non-zero
SLOT=$(curl -sf "$URL/eth/v1/beacon/headers/head" | jq -r '.data.header.message.slot')
echo " head slot: $SLOT"
if [ "${SLOT:-0}" -lt 1 ]; then
echo " FAIL: $SVC head slot is 0"
FAILED=1
fi

# Finality checkpoints — informational, log the finalized epoch
FINALIZED=$(curl -sf "$URL/eth/v1/beacon/states/head/finality_checkpoints" \
| jq -r '.data.finalized.epoch')
echo " finalized epoch: $FINALIZED"
done

exit "$FAILED"

- name: Check zkboost sidecars are running and generating proofs
run: |
ENCLAVE=eip8025-zkboost

# Both zkboost services must be in RUNNING state
kurtosis enclave inspect "$ENCLAVE" | grep -E "zkboost-[12].*RUNNING" \
|| { echo "FAIL: one or more zkboost services not in RUNNING state"; exit 1; }

# Each zkboost sidecar must have generated at least one proof.
# Check via the Prometheus metrics endpoint (zkboost_prove_total) rather than
# log scraping — kurtosis service logs may not be available in all CI environments.
for SVC in zkboost-1 zkboost-2; do
URL=$(kurtosis port print "$ENCLAVE" "$SVC" http)
COUNT=$(curl -sf "$URL/metrics" \
| awk '/^zkboost_prove_total\{/ {sum += $2} END {print int(sum)}')
echo "$SVC: $COUNT proofs generated"
if [ "${COUNT:-0}" -lt 1 ]; then
echo "FAIL: $SVC has not generated any proofs"
exit 1
fi
done

- name: Stop testnet and collect logs
if: always()
run: |
mkdir -p scripts/local_testnet/logs
ENCLAVE=eip8025-zkboost
for SVC in cl-1-lighthouse-reth cl-2-lighthouse-reth cl-3-lighthouse-reth cl-4-lighthouse-reth \
zkboost-1 zkboost-2; do
kurtosis service logs "$ENCLAVE" "$SVC" > "scripts/local_testnet/logs/${SVC}.log" 2>&1 || true
done
kurtosis enclave rm -f "$ENCLAVE" || true

- name: Upload logs artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: logs-kurtosis-eip8025
path: scripts/local_testnet/logs
retention-days: 3
22 changes: 22 additions & 0 deletions .github/workflows/test-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ env:
CARGO_INCREMENTAL: 0
# Enable portable to prevent issues with caching `blst` for the wrong CPU type
TEST_FEATURES: portable
# Use Clang for C/C++ compilation. Required because leveldb-sys uses
# -Wthread-safety which is a Clang-only flag unsupported by GCC.
CC: clang
CXX: clang++
jobs:
check-labels:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -102,6 +106,23 @@ jobs:
if: env.SELF_HOSTED_RUNNERS == 'true'
continue-on-error: true
run: sccache --show-stats
proof-engine-tests:
name: proof-engine-tests
needs: [check-labels]
if: needs.check-labels.outputs.skip_ci != 'true'
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-4x' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v5
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run proof engine tests sequentially
run: make test-proof-engine
beacon-chain-tests:
name: beacon-chain-tests
needs: [check-labels]
Expand Down Expand Up @@ -437,6 +458,7 @@ jobs:
'check-labels',
'target-branch-check',
'release-tests-ubuntu',
'proof-engine-tests',
'beacon-chain-tests',
'op-pool-tests',
'network-tests',
Expand Down
70 changes: 70 additions & 0 deletions .github/workflows/zkboost-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: zkboost-tests

on:
push:
branches:
- stable
- staging
- trying
- 'pr/*'
pull_request:
merge_group:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
RUSTFLAGS: "-D warnings -C debuginfo=0"
CARGO_INCREMENTAL: 0
TEST_FEATURES: portable
# Use Clang for C/C++ compilation. Required because leveldb-sys uses
# -Wthread-safety which is a Clang-only flag unsupported by GCC.
CC: clang
CXX: clang++

jobs:
check-labels:
runs-on: ubuntu-latest
name: Check for 'skip-ci' label
outputs:
skip_ci: ${{ steps.set-output.outputs.SKIP_CI }}
steps:
- name: check for skip-ci label
id: set-output
env:
LABELS: ${{ toJson(github.event.pull_request.labels) }}
run: |
SKIP_CI="false"
if [ -z "${LABELS}" ] || [ "${LABELS}" = "null" ]; then
LABELS="none";
else
LABELS=$(echo ${LABELS} | jq -r '.[].name')
fi
for label in ${LABELS}; do
if [ "$label" = "skip-ci" ]; then
SKIP_CI="true"
break
fi
done
echo "skip_ci=$SKIP_CI" >> $GITHUB_OUTPUT

zkboost-tests:
name: zkboost-tests
needs: [check-labels]
if: needs.check-labels.outputs.skip_ci != 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install dependencies
run: sudo apt update && sudo apt install -y git gcc g++ make cmake pkg-config llvm-dev libclang-dev clang
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run proof_engine_zkboost integration tests
run: make test-zkboost
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ genesis.ssz

# VSCode
/.vscode

md-docs/
9 changes: 6 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"rust-analyzer.cargo.cfgs": [
"!debug_assertions"
]
"rust-analyzer.checkOnSave.enable": true,
"rust-analyzer.check.command": "clippy",
"rust-analyzer.check.allTargets": false,

"rust-analyzer.check.extraEnv": { "CARGO_BUILD_JOBS": "4" },
"rust-analyzer.cargo.features": ["test-utils"]
}
Loading
Loading