Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
46c9c67
refactor: simplify isValidBlsToExecutionChange() (#8746)
twoeths Jan 22, 2026
90493eb
refactor: simplify assertValidAttesterSlashing() assertValidProposerS…
twoeths Jan 22, 2026
87ff5db
chore(deps): bump systeminformation from 5.23.8 to 5.27.14 (#8734)
dependabot[bot] Jan 22, 2026
3bbeaed
chore(deps): bump axios from 1.8.2 to 1.12.0 (#8681)
dependabot[bot] Jan 22, 2026
ad23ef5
chore(deps): bump js-yaml from 4.1.0 to 4.1.1 (#8733)
dependabot[bot] Jan 22, 2026
0321dbc
chore: remove getAttestationsForBlockPreElectra (#8721)
twoeths Jan 22, 2026
268dcb0
chore(deps): bump qs from 6.11.1 to 6.14.1 (#8724)
dependabot[bot] Jan 22, 2026
171bfe3
test: allow custom db path and `resumeFromDb` in `getDevBeaconNode` (…
vedant-asati Jan 22, 2026
cc77fcf
refactor: remove build() and async shuffling calculation (#8688)
guha-rahul Jan 22, 2026
219c3c2
fix: return reward delta instead of validator balance as sync committ…
nflaig Jan 22, 2026
3932675
fix: pass fork info used to compute domain to remote signer (#8776)
nflaig Jan 23, 2026
b2437a6
fix: avoid BeaconState commit() clone() in beacon-node (#8728)
twoeths Jan 23, 2026
ad129ce
fix: handle slot 0 correctly in data column sidecar RPC handler (#8783)
qu0b Jan 23, 2026
0bce7eb
chore: update test current file launch config to work with pnpm (#8775)
nflaig Jan 23, 2026
addea91
feat: support single db batch operation (#8268)
nazarhussain Jan 23, 2026
1067fed
refactor: query ShufflingCache for shuffling data (#8743)
twoeths Jan 26, 2026
0e7901d
chore: skip snappy benchmarks (#8786)
twoeths Jan 26, 2026
ad81ef1
chore: skip Map benchmarks (#8787)
twoeths Jan 26, 2026
a210743
feat: add spec references, a mapping of spec to implementation (#8778)
jtraglia Jan 26, 2026
375b1b3
feat: enable specref features & remove unnecessary spec items (#8788)
jtraglia Jan 27, 2026
4263377
refactor: generalize state repositories (#8732)
twoeths Jan 28, 2026
9033417
chore: improve archiveBlocks log (#8795)
twoeths Jan 28, 2026
3be9500
chore: merge stable v1.39.0 back to unstable (#8798)
philknows Jan 28, 2026
0ae7a89
chore: fix deploy docs workflow (#8799)
nflaig Jan 28, 2026
4acd3ce
feat: make builders non-validating staked actors (#8759)
ensi321 Jan 28, 2026
ba0be92
chore: add assertions to check prior withdrawals against limit (#8802)
nflaig Jan 28, 2026
c975f70
docs: clarify release note step (#8800)
philknows Jan 29, 2026
3715a82
chore: add axios to root package.json to fix downloading dashboards (…
nflaig Jan 29, 2026
313caae
feat: add API and logs to display monitored validator indices (#8702)
dik654 Jan 29, 2026
1c71f42
feat: async block import persistence (#8784)
wemeetagain Jan 30, 2026
c1d3b3c
fix: revert changes to `getPendingBalanceToWithdraw` (#8812)
ensi321 Jan 30, 2026
63c5c3e
refactor: getBlockSlotState() (#8806)
twoeths Jan 30, 2026
9e8478f
fix(docker): reinstall dependencies on target platform (#8816)
wemeetagain Jan 30, 2026
1cab20c
chore: fix lint warnings (#8815)
nflaig Jan 30, 2026
c7b6a78
fix: remove docker build stage to rebuild native dependencies (#8819)
nflaig Jan 30, 2026
c04ddcb
chore: merge v1.39.1 back to unstable (#8820)
philknows Jan 30, 2026
9defa5c
feat: implement ePBS gossip topics (#8616)
ensi321 Jan 30, 2026
cfd8947
refactor: update signature sets to use validator indices instead of p…
wemeetagain Feb 2, 2026
193b2e2
chore: avoid passing CachedBeaconStateGloas to state-transition apis …
twoeths Feb 2, 2026
5862dc3
feat(api): add custody info endpoint for PeerDAS (#8826)
lodekeeper Feb 2, 2026
b93e8e8
fix: make column reconstruction delay a function of slot time (#8827)
lodekeeper Feb 2, 2026
f016f9d
fix: remove index label from validator_monitor_prev_epoch_on_chain_ba…
lodekeeper Feb 2, 2026
2ae7375
fix: consistently check block input cache before checking hot db for …
nflaig Feb 2, 2026
cc503f8
chore: replace bigint-buffer (#8789)
rnfairchild Feb 2, 2026
1020f27
chore: use native arm64 runners instead of qemu for docker builds (#8…
nflaig Feb 2, 2026
2d390f9
test: correct lightclient committee root test for electra (#8825)
lodekeeper Feb 2, 2026
f61b3fb
test: increase lightclient e2e test timeout to prevent flaky failures…
lodekeeper Feb 2, 2026
af02941
chore: remove stale references to merge block (#8834)
nflaig Feb 2, 2026
1fc7f36
fix(network): handle invalid peer public key in onLibp2pPeerConnect (…
lodekeeper Feb 2, 2026
787d0f5
chore: remove in-memory state caches (#8813)
twoeths Feb 3, 2026
2c42f62
feat: allow block import after NUMBER_OF_COLUMNS / 2 (#8818)
wemeetagain Feb 3, 2026
2a72cee
ci: disable bun unit tests in code (#8851)
philknows Feb 3, 2026
d2e683b
chore: add .venv and checkpoint_states to .gitignore (#8852)
lodekeeper Feb 3, 2026
ce28717
feat(network): add directPeers support for GossipSub (#8831)
catwith1hat Feb 3, 2026
cd347a2
chore: fix lint warnings (#8854)
lodekeeper Feb 3, 2026
7922561
test: increase timeouts for flaky E2E tests on slow CI (#8860)
lodekeeper Feb 4, 2026
d608259
fix(api): allow duplicate columns/blobs in publishBlock for multi-BN …
lodekeeper Feb 4, 2026
737da5e
chore: update bigint-buffer2 to v1.0.5 and re-enable bun CI (#8855)
lodekeeper Feb 4, 2026
db4220e
chore: add manually triggered workflow for ad-hoc Docker image taggin…
lodekeeper Feb 4, 2026
6cfc0a8
chore: rename adhoc docker workflow to manual and reuse docker.yml (#…
lodekeeper Feb 5, 2026
13ab628
feat(api): add runtime direct peer management endpoints (#8853)
lodekeeper Feb 5, 2026
c4af2af
chore: cleanup bigint buffer utils (#8863)
lodekeeper Feb 5, 2026
4e6ba60
test: add e2e test to ensure chainConfig values match consensus-specs…
lodekeeper Feb 5, 2026
2b1dac3
chore: upgrade fastify to 5.7.4 (#8842)
lodekeeper Feb 5, 2026
bd038d8
perf: optimize byteArrayEquals with hybrid loop/Buffer.compare (#8846)
lodekeeper Feb 6, 2026
059f489
chore: drop support for node v22 (#8872)
nflaig Feb 6, 2026
ba49cac
docs: add AGENTS.md for AI coding assistants (#8844)
lodekeeper Feb 6, 2026
b87b37f
fix: await processFn to prevent buffer pool race condition (#8877)
lodekeeper Feb 7, 2026
45b0426
chore: fix fastify deprecation warning about querystringParser (#8876)
nflaig Feb 7, 2026
af86f8f
chore: bump package versions to 1.40.0
nflaig Feb 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
52 changes: 52 additions & 0 deletions .github/workflows/check-specrefs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Check Spec References

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
push:
branches: [unstable, stable]
pull_request:
workflow_dispatch:

jobs:
check-specrefs:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Check version consistency
run: |
SPEC_TEST_VERSION=$(grep 'specVersion:' packages/beacon-node/test/spec/specTestVersioning.ts | head -1 | sed 's/.*specVersion: "\(.*\)".*/\1/')
ETHSPECIFY_VERSION=$(grep '^version:' specrefs/.ethspecify.yml | sed 's/version: //')
if [ "$SPEC_TEST_VERSION" != "$ETHSPECIFY_VERSION" ]; then
echo "Version mismatch between specTestVersioning.ts and ethspecify"
echo " packages/beacon-node/test/spec/specTestVersioning.ts: $SPEC_TEST_VERSION"
echo " specrefs/.ethspecify.yml: $ETHSPECIFY_VERSION"
exit 1
else
echo "Versions match: $SPEC_TEST_VERSION"
fi

- name: Install ethspecify
run: python3 -mpip install ethspecify

- name: Update spec references
run: ethspecify process --path=specrefs

- name: Check for differences
run: |
if ! git diff --exit-code -- specrefs >/dev/null; then
echo "Spec references are out-of-date!"
echo ""
git --no-pager diff -- specrefs
exit 1
else
echo "Spec references are up-to-date!"
fi

- name: Check spec references
run: ethspecify check --path=specrefs
108 changes: 108 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Build and publish Docker images

on:
workflow_call:
inputs:
tag:
description: "Docker image tag"
required: true
type: string
extra-tags:
description: "Extra tags to apply (comma-separated, e.g. 'latest,rc')"
required: false
type: string
ref:
description: "Git ref to checkout (defaults to triggering ref)"
required: false
type: string

jobs:
docker:
name: Build Docker (${{ matrix.arch }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: true
matrix:
include:
- arch: amd64
runner: buildjet-4vcpu-ubuntu-2204
- arch: arm64
runner: buildjet-4vcpu-ubuntu-2204-arm
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.sha }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push lodestar
run: >
docker buildx build . --push
--tag chainsafe/lodestar:${{ inputs.tag }}-${{ matrix.arch }}
--platform linux/${{ matrix.arch }}
--build-arg COMMIT=$(git rev-parse HEAD)

- name: Build and push custom Grafana
run: >
docker buildx build ./docker/grafana/ --push
--file ./docker/grafana/Dockerfile
--build-context dashboards=./dashboards
--tag chainsafe/lodestar-grafana:${{ inputs.tag }}-${{ matrix.arch }}
--platform linux/${{ matrix.arch }}

- name: Build and push custom Prometheus
run: >
docker buildx build ./docker/prometheus/ --push
--file ./docker/prometheus/Dockerfile
--tag chainsafe/lodestar-prometheus:${{ inputs.tag }}-${{ matrix.arch }}
--platform linux/${{ matrix.arch }}

docker-manifest:
name: Create Docker manifest
runs-on: ubuntu-latest
needs: docker
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Create and push lodestar manifest
run: |
EXTRA_TAGS=""
if [ -n "${{ inputs.extra-tags }}" ]; then
for t in $(echo "${{ inputs.extra-tags }}" | tr ',' ' '); do
EXTRA_TAGS="$EXTRA_TAGS -t chainsafe/lodestar:$t"
done
fi
docker buildx imagetools create -t chainsafe/lodestar:${{ inputs.tag }} $EXTRA_TAGS \
chainsafe/lodestar:${{ inputs.tag }}-amd64 \
chainsafe/lodestar:${{ inputs.tag }}-arm64

- name: Create and push grafana manifest
run: |
docker buildx imagetools create -t chainsafe/lodestar-grafana:${{ inputs.tag }} \
chainsafe/lodestar-grafana:${{ inputs.tag }}-amd64 \
chainsafe/lodestar-grafana:${{ inputs.tag }}-arm64

- name: Create and push prometheus manifest
run: |
docker buildx imagetools create -t chainsafe/lodestar-prometheus:${{ inputs.tag }} \
chainsafe/lodestar-prometheus:${{ inputs.tag }}-amd64 \
chainsafe/lodestar-prometheus:${{ inputs.tag }}-arm64

- name: Sanity check image
run: |
docker run -d --name lodestar-sanity -p 9596:9596 chainsafe/lodestar:${{ inputs.tag }} dev --rest.address 0.0.0.0
sleep 30
curl -f http://127.0.0.1:9596/eth/v1/node/version || (docker logs lodestar-sanity && exit 1)
docker stop lodestar-sanity

- run: docker image history chainsafe/lodestar:${{ inputs.tag }}
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:

- name: Build docs
working-directory: docs
run: pnpm && pnpm build
run: pnpm install && pnpm build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
Expand Down
44 changes: 4 additions & 40 deletions .github/workflows/publish-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,44 +112,8 @@ jobs:

docker:
name: Publish to Docker Hub
runs-on: buildjet-4vcpu-ubuntu-2204
needs: npm
steps:
- uses: actions/checkout@v4
# https://github.com/docker/setup-qemu-action
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push lodestar
run: >
docker buildx build . --push
--tag chainsafe/lodestar:next
--platform linux/amd64,linux/arm64
--build-arg COMMIT=$(git rev-parse HEAD)

- run: docker run chainsafe/lodestar:next --help
# Display history to know byte size of each layer
# Image is available only because of the previous `docker run` command
- run: docker image history chainsafe/lodestar:next

- name: Build and push custom Grafana
run: >
docker buildx build ./docker/grafana/ --push
--file ./docker/grafana/Dockerfile
--build-context dashboards=./dashboards
--tag chainsafe/lodestar-grafana:next
--platform linux/amd64,linux/arm64

- name: Build and push custom Prometheus
run: >
docker buildx build ./docker/prometheus/ --push
--file ./docker/prometheus/Dockerfile
--tag chainsafe/lodestar-prometheus:next
--platform linux/amd64,linux/arm64
uses: ./.github/workflows/docker.yml
with:
tag: next
secrets: inherit
49 changes: 49 additions & 0 deletions .github/workflows/publish-manual.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Publish manual Docker image

# Manual workflow for tagging Docker images from any commit
# Useful for testing specific commits or creating custom releases

on:
workflow_dispatch:
inputs:
ref:
description: "Git ref to build from (commit SHA, branch, or tag)"
required: true
type: string
tag:
description: "Docker tag to apply (e.g., test-feature, debug-v1.2.3)"
required: true
type: string

permissions:
contents: read

jobs:
validate:
name: Validate inputs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
fetch-depth: 0

- name: Validate inputs
run: |
# Ensure tag doesn't conflict with protected tags
if [[ "${{ inputs.tag }}" =~ ^(latest|next|stable|rc)$ ]]; then
echo "Error: Cannot use reserved tag '${{ inputs.tag }}'. Use a custom tag name."
exit 1
fi
echo "Building from ref: ${{ inputs.ref }}"
echo "Commit: $(git rev-parse HEAD)"
echo "Tag: ${{ inputs.tag }}"

docker:
name: Build and publish Docker
needs: validate
uses: ./.github/workflows/docker.yml
with:
tag: ${{ inputs.tag }}
ref: ${{ inputs.ref }}
secrets: inherit
44 changes: 4 additions & 40 deletions .github/workflows/publish-nextfork.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,44 +113,8 @@ jobs:

docker:
name: Publish to Docker Hub
runs-on: buildjet-4vcpu-ubuntu-2204
needs: npm
steps:
- uses: actions/checkout@v4
# https://github.com/docker/setup-qemu-action
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push lodestar
run: >
docker buildx build . --push
--tag chainsafe/lodestar:nextfork
--platform linux/amd64,linux/arm64
--build-arg COMMIT=$(git rev-parse HEAD)

- run: docker run chainsafe/lodestar:nextfork --help
# Display history to know byte size of each layer
# Image is available only because of the previous `docker run` command
- run: docker image history chainsafe/lodestar:nextfork

- name: Build and push custom Grafana
run: >
docker buildx build ./docker/grafana/ --push
--file ./docker/grafana/Dockerfile
--build-context dashboards=./dashboards
--tag chainsafe/lodestar-grafana:nextfork
--platform linux/amd64,linux/arm64

- name: Build and push custom Prometheus
run: >
docker buildx build ./docker/prometheus/ --push
--file ./docker/prometheus/Dockerfile
--tag chainsafe/lodestar-prometheus:nextfork
--platform linux/amd64,linux/arm64
uses: ./.github/workflows/docker.yml
with:
tag: nextfork
secrets: inherit
54 changes: 13 additions & 41 deletions .github/workflows/publish-rc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,49 +119,21 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

docker:
name: Publish to Docker Hub
runs-on: buildjet-4vcpu-ubuntu-2204
await-release:
name: Await npm release
runs-on: ubuntu-latest
needs: [tag, npm]
if: needs.tag.outputs.is_rc == 'true'
steps:
- uses: actions/checkout@v4
- run: scripts/await-release.sh ${{ needs.tag.outputs.tag }} rc 900
# https://github.com/docker/setup-qemu-action
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
run: >
docker buildx build . --push
--tag chainsafe/lodestar:rc
--tag chainsafe/lodestar:${{ needs.tag.outputs.tag }}
--platform linux/amd64,linux/arm64
--build-arg COMMIT=$(git rev-parse HEAD)

- run: docker run chainsafe/lodestar:${{ needs.tag.outputs.tag }} --help
# Display history to know byte size of each layer
# Image is available only because of the previous `docker run` command
- run: docker image history chainsafe/lodestar:${{ needs.tag.outputs.tag }}

- name: Build and push custom Grafana
run: >
docker buildx build ./docker/grafana/ --push
--file ./docker/grafana/Dockerfile
--build-context dashboards=./dashboards
--tag chainsafe/lodestar-grafana:${{ needs.tag.outputs.tag }}
--platform linux/amd64,linux/arm64

- name: Build and push custom Prometheus
run: >
docker buildx build ./docker/prometheus/ --push
--file ./docker/prometheus/Dockerfile
--tag chainsafe/lodestar-prometheus:${{ needs.tag.outputs.tag }}
--platform linux/amd64,linux/arm64

docker:
name: Publish to Docker Hub
needs: [tag, await-release]
if: needs.tag.outputs.is_rc == 'true'
uses: ./.github/workflows/docker.yml
with:
tag: ${{ needs.tag.outputs.tag }}
extra-tags: rc
secrets: inherit
Loading
Loading