Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
c2a3683
initial commit
kevaundray Oct 16, 2025
f9f4517
add consensus types
kevaundray Oct 16, 2025
accc829
add config
kevaundray Oct 16, 2025
7694d9e
add proof cache
kevaundray Oct 16, 2025
3a37238
add proof gen/verify traits
kevaundray Oct 16, 2025
7368ba2
add registry proof gen/verification
kevaundray Oct 16, 2025
ba14574
add execution proofs to da_checker
kevaundray Oct 20, 2025
ec773ce
commit execution layer stub
kevaundray Oct 21, 2025
971c743
add execution proof boundaries similar to columns
kevaundray Oct 21, 2025
86d0ffc
set min_execution_proof via the BeaconChain
kevaundray Oct 21, 2025
26e13a1
set the zkvm config values from the cli
kevaundray Oct 21, 2025
c5afb78
Use ExecutionProofId since we no longer have multiple subnets
kevaundray Oct 27, 2025
984a1e0
add slot to ExecutionProof and refactor to remove ExecutionProofSubnetId
kevaundray Oct 27, 2025
6dfa83b
refactor
kevaundray Oct 27, 2025
6d6b994
modify chain_spec
kevaundray Oct 27, 2025
94027ce
refactor for ExecutionProof
kevaundray Oct 27, 2025
2a18784
add registry_proof_gen
kevaundray Oct 27, 2025
d50c679
refactor proof_gen
kevaundray Oct 27, 2025
adb890d
refactor proof verification
kevaundray Oct 27, 2025
958d360
commit proof_cache changes -- todo:remove this
kevaundray Oct 27, 2025
b7c3538
simplify engine_api struct
kevaundray Oct 27, 2025
e1a0905
fixup renaming changes
kevaundray Oct 27, 2025
23a8a59
add proof generation service
kevaundray Oct 27, 2025
fda4795
Add execution proof observation and verification
kevaundray Oct 28, 2025
b0f81ed
Add ExecutionProofByRoots RPC layer
kevaundray Oct 28, 2025
665b485
commit debug tests
kevaundray Oct 28, 2025
9d5aacc
remove debug tests
kevaundray Oct 28, 2025
4b9802e
commit GossipTopics/Discovery/PeerManagement
kevaundray Oct 28, 2025
1bcb674
Add proof available checking logic and has_execution_layer_and_proof_…
kevaundray Oct 28, 2025
1db670c
fix missing topic
kevaundray Oct 28, 2025
2af1406
grep rename
kevaundray Oct 28, 2025
643719e
Add verify_execution_proof_for_gossip
kevaundray Oct 28, 2025
9e6ed12
Handle incoming gossip and RPC messages
kevaundray Oct 28, 2025
1965ac7
integrating proof fetching into block sync
kevaundray Oct 28, 2025
0e2a740
fix test
kevaundray Oct 28, 2025
ae89e1f
rename
kevaundray Oct 28, 2025
f2c7f1f
commit top level configurations and wiring
kevaundray Oct 28, 2025
e32c6f6
nit
kevaundray Oct 28, 2025
e7e535b
commit min and max ssz sizes for execution_proof
kevaundray Oct 28, 2025
6f5d3f1
add .yml config
kevaundray Oct 28, 2025
a44d427
Merge branch 'unstable' into kw/sel-alternative
kevaundray Oct 28, 2025
0a8eb90
cargo fmt
kevaundray Oct 28, 2025
aff99ac
delete proof cache
kevaundray Oct 28, 2025
ea49ea7
clippy
kevaundray Oct 29, 2025
3e256d0
proof_gen only with bash script
kevaundray Oct 31, 2025
5a873be
add dummy_el
kevaundray Nov 3, 2025
33c8cc1
Chore: Add DummyEL
kevaundray Nov 3, 2025
64e5a45
update Dockerfile to use caches
kevaundray Nov 3, 2025
f854afa
Prevent unnecessary state advances pre-Fulu (#8388)
michaelsproul Nov 12, 2025
53e73fa
Remove duplicate state in ProtoArray (#8324)
dapplion Nov 12, 2025
fff248d
Migrate `execution_engine_integration` to `alloy` (#8140)
macladson Nov 12, 2025
d54dc68
Add `optimistic_sync` metric (#8059)
chong-he Nov 12, 2025
b5260db
Add extra data in `/eth/v1/debug/fork_choice` (#7845)
chong-he Nov 12, 2025
47b984e
re-targeting of `remove-windows-ci` against `release-v8.0` (#8406)
antondlr Nov 12, 2025
e282363
Gracefully handle deleting states prior to anchor_slot (#8409)
michaelsproul Nov 17, 2025
01a654b
Fix tracing span for execution payload verif (#8419)
michaelsproul Nov 17, 2025
f2b945a
Do not require blobs from checkpoint servers from Fulu epochs. (#8413)
jimmygchen Nov 17, 2025
af1d9b9
Fix custody context initialization race condition that caused panic (…
jimmygchen Nov 17, 2025
02d0c6a
Compute missing_columns correctly (#8425)
pawanjay176 Nov 18, 2025
d59e340
Add nightly tests workflow to test prior forks (#8319)
jimmygchen Nov 19, 2025
8e54f6e
Fix md format (#8434)
jimmygchen Nov 19, 2025
74b8c02
Reimport the checkpoint sync block (#8417)
dapplion Nov 19, 2025
ced49dd
Release v8.0.1 (#8414)
jimmygchen Nov 20, 2025
261322c
Merge remote-tracking branch 'origin/stable' into unstable
michaelsproul Nov 20, 2025
2ba8a8e
Cargo Update (#8443)
AgeManning Nov 24, 2025
0d0232e
Optimise out block header calculation (#8446)
michaelsproul Nov 24, 2025
03832b0
chore: Add Dockerfile.dev for local development (#8295)
kevaundray Nov 24, 2025
bdfade8
Consolidate reqwest versions (#8452)
michaelsproul Nov 24, 2025
d6cec0b
Dockerfile with cargo artifacts caching (#8455)
dapplion Nov 25, 2025
e21a433
Allow manual checkpoint sync without blobs (#8470)
michaelsproul Nov 26, 2025
4494b0a
Update docs on Siren port and other small updates (#8399)
chong-he Nov 27, 2025
070e395
Remove quickcheck in favour of proptest (#8471)
michaelsproul Nov 27, 2025
e291955
Integration tests ergonomics (#7836)
danielrachi1 Nov 27, 2025
847fa3f
Remove `context_deserialize` and import from crates.io (#8172)
macladson Nov 27, 2025
713e477
feat: Add reproducible builds release workflows and push images to Do…
MoeMahhouk Nov 27, 2025
9394663
fix: compare bls changes in op-pool (#8465)
sashass1315 Nov 28, 2025
7cee5d6
Optimise pubkey cache initialisation during beacon node startup (#8451)
jimmygchen Nov 28, 2025
64031b6
Add tracing spans to validator client duty cycles (#8482)
jimmygchen Dec 1, 2025
90dd5bb
Refactor get_validator_blocks_v3 fallback (#8186)
chong-he Dec 1, 2025
a1ad44c
Merge branch 'unstable' into kw/sel-alternative
kevaundray Dec 1, 2025
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
176 changes: 176 additions & 0 deletions .github/workflows/docker-reproducible.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
name: docker-reproducible

on:
push:
branches:
- unstable
- stable
tags:
- v*
workflow_dispatch: # allows manual triggering for testing purposes and skips publishing an image

env:
DOCKER_REPRODUCIBLE_IMAGE_NAME: >-
${{ github.repository_owner }}/lighthouse-reproducible
DOCKER_PASSWORD: ${{ secrets.DH_KEY }}
DOCKER_USERNAME: ${{ secrets.DH_ORG }}

jobs:
extract-version:
name: extract version
runs-on: ubuntu-22.04
steps:
- name: Extract version
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
# It's a tag (e.g., v1.2.3)
VERSION="${GITHUB_REF#refs/tags/}"
elif [[ "${{ github.ref }}" == refs/heads/stable ]]; then
# stable branch -> latest
VERSION="latest"
elif [[ "${{ github.ref }}" == refs/heads/unstable ]]; then
# unstable branch -> latest-unstable
VERSION="latest-unstable"
else
# For manual triggers from other branches and will not publish any image
VERSION="test-build"
fi
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
id: extract_version
outputs:
VERSION: ${{ steps.extract_version.outputs.VERSION }}

verify-and-build:
name: verify reproducibility and build
needs: extract-version
strategy:
matrix:
arch: [amd64, arm64]
include:
- arch: amd64
rust_target: x86_64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8e3c421122bf4cd3b2a866af41a4dd52d87ad9e315fd2cb5100e87a7187a9816
platform: linux/amd64
runner: ubuntu-22.04
- arch: arm64
rust_target: aarch64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8b22455a7ce2adb1355067638284ee99d21cc516fab63a96c4514beaf370aa94
platform: linux/arm64
runner: ubuntu-22.04-arm
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker

- name: Verify reproducible builds (${{ matrix.arch }})
run: |
# Build first image
docker build -f Dockerfile.reproducible \
--platform ${{ matrix.platform }} \
--build-arg RUST_TARGET="${{ matrix.rust_target }}" \
--build-arg RUST_IMAGE="${{ matrix.rust_image }}" \
-t lighthouse-verify-1-${{ matrix.arch }} .

# Extract binary from first build
docker create --name extract-1-${{ matrix.arch }} lighthouse-verify-1-${{ matrix.arch }}
docker cp extract-1-${{ matrix.arch }}:/lighthouse ./lighthouse-1-${{ matrix.arch }}
docker rm extract-1-${{ matrix.arch }}

# Clean state for second build
docker buildx prune -f
docker system prune -f

# Build second image
docker build -f Dockerfile.reproducible \
--platform ${{ matrix.platform }} \
--build-arg RUST_TARGET="${{ matrix.rust_target }}" \
--build-arg RUST_IMAGE="${{ matrix.rust_image }}" \
-t lighthouse-verify-2-${{ matrix.arch }} .

# Extract binary from second build
docker create --name extract-2-${{ matrix.arch }} lighthouse-verify-2-${{ matrix.arch }}
docker cp extract-2-${{ matrix.arch }}:/lighthouse ./lighthouse-2-${{ matrix.arch }}
docker rm extract-2-${{ matrix.arch }}

# Compare binaries
echo "=== Comparing binaries ==="
echo "Build 1 SHA256: $(sha256sum lighthouse-1-${{ matrix.arch }})"
echo "Build 2 SHA256: $(sha256sum lighthouse-2-${{ matrix.arch }})"

if cmp lighthouse-1-${{ matrix.arch }} lighthouse-2-${{ matrix.arch }}; then
echo "Reproducible build verified for ${{ matrix.arch }}"
else
echo "Reproducible build FAILED for ${{ matrix.arch }}"
echo "BLOCKING RELEASE: Builds are not reproducible!"
echo "First 10 differences:"
cmp -l lighthouse-1-${{ matrix.arch }} lighthouse-2-${{ matrix.arch }} | head -10
exit 1
fi

# Clean up verification artifacts but keep one image for publishing
rm -f lighthouse-*-${{ matrix.arch }}
docker rmi lighthouse-verify-1-${{ matrix.arch }} || true

# Re-tag the second image for publishing (we verified it's identical to first)
VERSION=${{ needs.extract-version.outputs.VERSION }}
FINAL_TAG="${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}"
docker tag lighthouse-verify-2-${{ matrix.arch }} "$FINAL_TAG"

- name: Log in to Docker Hub
if: ${{ github.event_name != 'workflow_dispatch' }}
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}

- name: Push verified image (${{ matrix.arch }})
if: ${{ github.event_name != 'workflow_dispatch' }}
run: |
VERSION=${{ needs.extract-version.outputs.VERSION }}
IMAGE_TAG="${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}"
docker push "$IMAGE_TAG"

- name: Clean up local images
run: |
docker rmi lighthouse-verify-2-${{ matrix.arch }} || true
VERSION=${{ needs.extract-version.outputs.VERSION }}
docker rmi "${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}" || true

- name: Upload verification artifacts (on failure)
if: failure()
uses: actions/upload-artifact@v4
with:
name: verification-failure-${{ matrix.arch }}
path: |
lighthouse-*-${{ matrix.arch }}

create-manifest:
name: create multi-arch manifest
runs-on: ubuntu-22.04
needs: [extract-version, verify-and-build]
if: ${{ github.event_name != 'workflow_dispatch' }}
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}

- name: Create and push multi-arch manifest
run: |
IMAGE_NAME=${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}
VERSION=${{ needs.extract-version.outputs.VERSION }}

# Create manifest for the version tag
docker manifest create \
${IMAGE_NAME}:${VERSION} \
${IMAGE_NAME}:${VERSION}-amd64 \
${IMAGE_NAME}:${VERSION}-arm64

docker manifest push ${IMAGE_NAME}:${VERSION}
135 changes: 135 additions & 0 deletions .github/workflows/nightly-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# We only run tests on `RECENT_FORKS` on CI. To make sure we don't break prior forks, we run nightly tests to cover all prior forks.
name: nightly-tests

on:
schedule:
# Run at 8:30 AM UTC every day
- cron: '30 8 * * *'
workflow_dispatch: # Allow manual triggering

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

env:
# Deny warnings in CI
# Disable debug info (see https://github.com/sigp/lighthouse/issues/4005)
RUSTFLAGS: "-D warnings -C debuginfo=0"
# Prevent Github API rate limiting.
LIGHTHOUSE_GITHUB_TOKEN: ${{ secrets.LIGHTHOUSE_GITHUB_TOKEN }}
# Disable incremental compilation
CARGO_INCREMENTAL: 0
# Enable portable to prevent issues with caching `blst` for the wrong CPU type
TEST_FEATURES: portable

jobs:
setup-matrix:
name: setup-matrix
runs-on: ubuntu-latest
outputs:
forks: ${{ steps.set-matrix.outputs.forks }}
steps:
- name: Set matrix
id: set-matrix
run: |
# All prior forks to cover in nightly tests. This list should be updated when we remove a fork from `RECENT_FORKS`.
echo 'forks=["phase0", "altair", "bellatrix", "capella", "deneb"]' >> $GITHUB_OUTPUT

beacon-chain-tests:
name: beacon-chain-tests
needs: setup-matrix
runs-on: 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
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
- name: Run beacon_chain tests for ${{ matrix.fork }}
run: make test-beacon-chain-${{ matrix.fork }}
timeout-minutes: 60

http-api-tests:
name: http-api-tests
needs: setup-matrix
runs-on: 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
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
- name: Run http_api tests for ${{ matrix.fork }}
run: make test-http-api-${{ matrix.fork }}
timeout-minutes: 60

op-pool-tests:
name: op-pool-tests
needs: setup-matrix
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
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
- name: Run operation_pool tests for ${{ matrix.fork }}
run: make test-op-pool-${{ matrix.fork }}
timeout-minutes: 60

network-tests:
name: network-tests
needs: setup-matrix
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
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
- name: Create CI logger dir
run: mkdir ${{ runner.temp }}/network_test_logs
- name: Run network tests for ${{ matrix.fork }}
run: make test-network-${{ matrix.fork }}
timeout-minutes: 60
env:
TEST_FEATURES: portable
CI_LOGGER_DIR: ${{ runner.temp }}/network_test_logs
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: network_test_logs_${{ matrix.fork }}
path: ${{ runner.temp }}/network_test_logs
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"rust-analyzer.cargo.cfgs": [
"!debug_assertions"
]
}
Loading
Loading