Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5b30164
Add Gloas (bal-devnet-3) support via qu0b/go-eth2-client
qu0b Mar 31, 2026
046ab54
trigger CI
qu0b Mar 31, 2026
9aa932c
fix: add nolint for cyclomatic complexity in block_utils
qu0b Mar 31, 2026
63fce5c
debug: add attestation vote counting logging
qu0b Mar 31, 2026
73f24e6
fix: Bitvector64 BitAt fails with minimal preset committeeBits
qu0b Mar 31, 2026
04d0607
Add bal-devnet-3 EELS playbook with all EIPs
qu0b Mar 31, 2026
4cd9b84
fix: merge conflict
yperbasis Apr 12, 2026
5e4691b
Add bal-devnet-4 EELS playbook with all 9 spec-testable EIPs (v5.7.0)
qu0b Apr 26, 2026
66efe9d
Fix uv PATH ordering in bal-devnet-4 EELS playbook
qu0b Apr 26, 2026
9b2ddff
fix(run_shell): inherit os.Environ so spawned shells have HOME/PATH
qu0b Apr 26, 2026
38ccee5
fix(playbook): prevent apt-get from consuming stdin in deps task
qu0b Apr 26, 2026
2545ee8
fix(playbook): isolate seed wallet per EIP test
qu0b Apr 26, 2026
54e3b49
Add EIP-8024 stack_235-only debug playbook
qu0b Apr 27, 2026
9b87464
Verify EEST PR #2760 fix: clone from qu0b/execution-specs cherry-pick…
qu0b Apr 27, 2026
ec80ef7
Bump spamoor to v1.1.18-...20260427075552 + call InitializeBlockStats
qu0b Apr 27, 2026
44aeb1a
playbook: fix EIP-8037 funding-gas race + skip filler-only slotnum tests
qu0b Apr 27, 2026
9a1de09
playbook: 30s buffer between Gloas wait and funding for spamoor sync
qu0b Apr 27, 2026
db950a4
playbook: pin to tests-snøbal-devnet-4@v1.0.0
qu0b Apr 27, 2026
bc3c7e9
spamoor: route to local fork carrying effectiveCpsb fork-race fix
qu0b Apr 27, 2026
e295445
spamoor: replace -> github.com/qu0b/spamoor for docker build context
qu0b Apr 27, 2026
507b0ce
playbook: add bal-devnet-5 EELS tests pinned to tests-snobal-devnet-5…
qu0b Apr 29, 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
22 changes: 14 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
module github.com/ethpandaops/assertoor

go 1.25.0
go 1.25.7

require (
github.com/attestantio/go-eth2-client v0.28.0
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
github.com/ethereum/go-ethereum v1.17.1
github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2
github.com/ethpandaops/ethwallclock v0.4.0
github.com/ethpandaops/spamoor v1.1.18-0.20260226103249-8d1c1fdd2de0
github.com/ethpandaops/spamoor v1.1.18-0.20260427075552-dcdec39f6332
github.com/glebarez/go-sqlite v1.22.0
github.com/golang-jwt/jwt/v5 v5.3.1
github.com/google/uuid v1.6.0
Expand Down Expand Up @@ -43,14 +43,13 @@ require (
require (
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506 // indirect
github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.20.0 // indirect
github.com/bits-and-blooms/bitset v1.24.4 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/consensys/gnark-crypto v0.19.2 // indirect
github.com/consensys/gnark-crypto v0.20.1 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect
github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
Expand Down Expand Up @@ -97,6 +96,7 @@ require (
github.com/swaggo/files v1.0.1 // indirect
github.com/tklauser/go-sysconf v0.3.14 // indirect
github.com/tklauser/numcpus v0.8.0 // indirect
github.com/traefik/yaegi v0.16.2-0.20260209085605-fcb76d1ece0c // indirect
github.com/wealdtech/go-bytesutil v1.2.1 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
Expand All @@ -111,7 +111,7 @@ require (
golang.org/x/net v0.50.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.41.0 // indirect
golang.org/x/time v0.14.0 // indirect
golang.org/x/time v0.15.0 // indirect
golang.org/x/tools v0.42.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/protobuf v1.36.11 // indirect
Expand All @@ -122,3 +122,9 @@ require (
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.46.1 // indirect
)

replace github.com/attestantio/go-eth2-client => github.com/qu0b/go-eth2-client v0.0.0-20260211134817-89b1d064a7e5

// qu0b/spamoor carries effectiveCpsb fork-boundary fix
// (qu0b/fix/effective-cpsb-fork-race). Drop once upstreamed.
replace github.com/ethpandaops/spamoor => github.com/qu0b/spamoor v0.0.0-20260427130206-72ac11889a85
36 changes: 18 additions & 18 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,14 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506 h1:d/SJkN8/9Ca+1YmuDiUJxAiV4w/a9S8NcsG7GMQSrVI=
github.com/OffchainLabs/go-bitfield v0.0.0-20251031151322-f427d04d8506/go.mod h1:6TZI4FU6zT8x6ZfWa1J8YQ2NgW0wLV/W3fHRca8ISBo=
github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 h1:1zYrtlhrZ6/b6SAjLSfKzWtdgqK0U+HtH/VcBWh1BaU=
github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI=
github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0=
github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU=
github.com/attestantio/go-eth2-client v0.28.0 h1:2zIIIMPvSD+g6h3TgVXsoda/Yw3e+wjo1e8CZEanORU=
github.com/attestantio/go-eth2-client v0.28.0/go.mod h1:PO9sHFCq+1RiG+Eh3eOR2GYvYV64Qzg7idM3kLgCs5k=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU=
github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE=
github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
Expand All @@ -41,14 +37,14 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
github.com/consensys/gnark-crypto v0.19.2 h1:qrEAIXq3T4egxqiliFFoNrepkIWVEeIYwt3UL0fvS80=
github.com/consensys/gnark-crypto v0.19.2/go.mod h1:rT23F0XSZqE0mUA0+pRtnL56IbPxs6gp4CeRsBk4XS0=
github.com/consensys/gnark-crypto v0.20.1 h1:PXDUBvk8AzhvWowHLWBEAfUQcV1/aZgWIqD6eMpXmDg=
github.com/consensys/gnark-crypto v0.20.1/go.mod h1:RBWrSgy+IDbGR69RRV313th3M/aZU1ubk2om+qHuTSc=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg=
github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI=
github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc=
github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand All @@ -72,12 +68,10 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2
github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw=
github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk=
github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8=
github.com/ethereum/go-ethereum v1.17.1 h1:IjlQDjgxg2uL+GzPRkygGULPMLzcYWncEI7wbaizvho=
github.com/ethereum/go-ethereum v1.17.1/go.mod h1:7UWOVHL7K3b8RfVRea022btnzLCaanwHtBuH1jUCH/I=
github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2 h1:PPbNu5NqmJ6+uo1y43tp1sBOt0a0S1gop5agy6qchMI=
github.com/ethereum/go-ethereum v1.17.3-0.20260421080339-499762852cf2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o=
github.com/ethpandaops/ethwallclock v0.4.0 h1:+sgnhf4pk6hLPukP076VxkiLloE4L0Yk1yat+ZyHh1g=
github.com/ethpandaops/ethwallclock v0.4.0/go.mod h1:y0Cu+mhGLlem19vnAV2x0hpFS5KZ7oOi2SWYayv9l24=
github.com/ethpandaops/spamoor v1.1.18-0.20260226103249-8d1c1fdd2de0 h1:avoDj2pij57dxnA5dpei0ND8LKVpMttvPo3E0QF/6UE=
github.com/ethpandaops/spamoor v1.1.18-0.20260226103249-8d1c1fdd2de0/go.mod h1:GW6Xjym8fliGk+Si2/dV+7M0RXIJTwW2w/ZHYXnri0A=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY=
Expand Down Expand Up @@ -280,6 +274,10 @@ github.com/prysmaticlabs/go-bitfield v0.0.0-20240618144021-706c95b2dd15 h1:lC8ki
github.com/prysmaticlabs/go-bitfield v0.0.0-20240618144021-706c95b2dd15/go.mod h1:8svFBIKKu31YriBG/pNizo9N0Jr9i5PQ+dFkxWg3x5k=
github.com/prysmaticlabs/gohashtree v0.0.4-beta h1:H/EbCuXPeTV3lpKeXGPpEV9gsUpkqOOVnWapUyeWro4=
github.com/prysmaticlabs/gohashtree v0.0.4-beta/go.mod h1:BFdtALS+Ffhg3lGQIHv9HDWuHS8cTvHZzrHWxwOtGOs=
github.com/qu0b/go-eth2-client v0.0.0-20260211134817-89b1d064a7e5 h1:KhHr85BKhGb+5q8npUuMTxwcUGvtzk9P3ZnBwd++Tbo=
github.com/qu0b/go-eth2-client v0.0.0-20260211134817-89b1d064a7e5/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY=
github.com/qu0b/spamoor v0.0.0-20260427130206-72ac11889a85 h1:RcLGHCjbWlJLNgPTMLOIyWGHbcuJS83ZD6nx0kuOcUA=
github.com/qu0b/spamoor v0.0.0-20260427130206-72ac11889a85/go.mod h1:LBTplm930TuSBdpYvV1ICDR5GfL3MkUpH7/P+HvJEEU=
github.com/r3labs/sse/v2 v2.10.0 h1:hFEkLLFY4LDifoHdiCN/LlGBAdVJYsANaLqNYa1l/v0=
github.com/r3labs/sse/v2 v2.10.0/go.mod h1:Igau6Whc+F17QUgML1fYe1VPZzTV6EMCnYktEmkNJ7I=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
Expand Down Expand Up @@ -323,6 +321,8 @@ github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZ
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY=
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
github.com/traefik/yaegi v0.16.2-0.20260209085605-fcb76d1ece0c h1:htRmijmYfl6o44qr+narOX1invzz9J9FnAqCqH7ARio=
github.com/traefik/yaegi v0.16.2-0.20260209085605-fcb76d1ece0c/go.mod h1:4eVhbPb3LnD2VigQjhYbEJ69vDRFdT2HQNrXx8eEwUY=
github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU=
Expand All @@ -346,8 +346,8 @@ go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=
go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g=
go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=
go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8=
go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE=
go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=
go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
Expand Down Expand Up @@ -403,8 +403,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
Expand Down
27 changes: 26 additions & 1 deletion pkg/clients/consensus/block_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/attestantio/go-eth2-client/spec"
)

//nolint:gocyclo // switch over all fork versions
func GetExecutionExtraData(v *spec.VersionedSignedBeaconBlock) ([]byte, error) {
//nolint:exhaustive // ignore
switch v.Version {
Expand All @@ -23,10 +24,28 @@ func GetExecutionExtraData(v *spec.VersionedSignedBeaconBlock) ([]byte, error) {
return v.Capella.Message.Body.ExecutionPayload.ExtraData, nil
case spec.DataVersionDeneb:
if v.Deneb == nil || v.Deneb.Message == nil || v.Deneb.Message.Body == nil || v.Deneb.Message.Body.ExecutionPayload == nil {
return nil, errors.New("no denb block")
return nil, errors.New("no deneb block")
}

return v.Deneb.Message.Body.ExecutionPayload.ExtraData, nil
case spec.DataVersionElectra:
if v.Electra == nil || v.Electra.Message == nil || v.Electra.Message.Body == nil || v.Electra.Message.Body.ExecutionPayload == nil {
return nil, errors.New("no electra block")
}

return v.Electra.Message.Body.ExecutionPayload.ExtraData, nil
case spec.DataVersionFulu:
if v.Fulu == nil || v.Fulu.Message == nil || v.Fulu.Message.Body == nil || v.Fulu.Message.Body.ExecutionPayload == nil {
return nil, errors.New("no fulu block")
}

return v.Fulu.Message.Body.ExecutionPayload.ExtraData, nil
case spec.DataVersionGloas:
if v.Gloas == nil || v.Gloas.Message == nil || v.Gloas.Message.Body == nil || v.Gloas.Message.Body.ExecutionPayload == nil {
return nil, errors.New("no gloas block")
}

return v.Gloas.Message.Body.ExecutionPayload.ExtraData, nil
default:
return nil, errors.New("unknown version")
}
Expand All @@ -45,6 +64,12 @@ func GetBlockBody(v *spec.VersionedSignedBeaconBlock) any {
return v.Capella
case spec.DataVersionDeneb:
return v.Deneb
case spec.DataVersionElectra:
return v.Electra
case spec.DataVersionFulu:
return v.Fulu
case spec.DataVersionGloas:
return v.Gloas
default:
return nil
}
Expand Down
12 changes: 11 additions & 1 deletion pkg/tasks/check_consensus_attestation_stats/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,17 @@ func (t *Task) aggregateEpochVotes(ctx context.Context, epoch uint64) []*epochVo
aggregationBitsOffset := uint64(0)

for committee := uint64(0); committee < specs.MaxCommitteesPerSlot; committee++ {
if !committeeBits.BitAt(committee) {
// Workaround for go-bitfield Bitvector64 requiring exactly 8 bytes.
// With minimal preset, committeeBits may be shorter. Check raw bytes directly.
byteIdx := committee / 8
bitIdx := committee % 8

hasBit := false
if int(byteIdx) < len(committeeBits) {
hasBit = committeeBits[byteIdx]&(1<<bitIdx) != 0
}

if !hasBit {
continue
}

Expand Down
14 changes: 11 additions & 3 deletions pkg/tasks/check_consensus_sync_status/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,13 +214,21 @@ func (t *Task) processClientCheck(client *clients.PoolClient, syncStatus *rpc.Sy
}

func (t *Task) getClientInfo(client *clients.PoolClient, syncStatus *rpc.SyncStatus) *ClientInfo {
clientInfo := &ClientInfo{
if syncStatus == nil {
// RPC failed — return skeletal info without dereferencing.
return &ClientInfo{
Name: client.Config.Name,
Synchronizing: true, // assume unhealthy when status is unknown
SyncHead: 0,
SyncDistance: 0,
}
}

return &ClientInfo{
Name: client.Config.Name,
Synchronizing: syncStatus.IsSyncing,
Optimistic: syncStatus.IsOptimistic,
SyncHead: syncStatus.HeadSlot,
SyncDistance: syncStatus.SyncDistance,
}

return clientInfo
}
6 changes: 6 additions & 0 deletions pkg/tasks/run_shell/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ func (t *Task) Execute(ctx context.Context) error {
//nolint:gosec // ignore
command := exec.CommandContext(ctx, t.config.Shell, t.config.ShellArgs...)

// Inherit parent environment so spawned shells have HOME/PATH/USER set.
// Without this, scripts like `export PATH=$PATH:$HOME/.local/bin` resolve
// $HOME to "" and never find user-installed binaries (e.g. uv from
// `pip install --user uv`). User-supplied envVars below still override.
command.Env = append(command.Env, os.Environ()...)

stdin, err := command.StdinPipe()
if err != nil {
cmdLogger.Errorf("failed getting stdin pipe")
Expand Down
Loading