Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4db8d8a
app: fix flaky TestStartChecker (#4654)
KaloyanTanev Aug 21, 2026
2286e13
core/tracker: fix inclusion trim underflow at chain start (#4662)
KaloyanTanev Aug 25, 2026
e53f92b
build(deps): Bump the docker-dependencies group across 2 directories …
dependabot[bot] Sep 2, 2026
2f78791
build(deps): Bump the go-dependencies group across 1 directory with 4…
dependabot[bot] Sep 8, 2026
caa87bc
app/stacksnipe: redact secret flag values from exported command lines…
aly-obol Sep 8, 2026
6b6b751
build(deps): Bump the go-dependencies group with 2 updates (#4690)
dependabot[bot] Sep 9, 2026
fd4a495
dkg/pedersen: buffer channels to not drop early bundles (#4683)
KaloyanTanev Sep 15, 2026
ba01187
dkg: retry transient p2p send failures during ceremonies (#4684)
KaloyanTanev Sep 15, 2026
7722a0f
p2p: add message size, read error and concurrency metrics (#4680)
KaloyanTanev Sep 15, 2026
1842832
build(deps): Bump the go-dependencies group across 1 directory with 5…
dependabot[bot] Sep 15, 2026
2378131
cmd/exit_sign: warn on validators with pending deposits and no index …
KaloyanTanev Sep 21, 2026
e44a68c
*: keep //nolint:revive from nolintlint false autofix (#4703)
KaloyanTanev Sep 21, 2026
5770697
build(deps): Bump github.com/ethereum/go-ethereum (#4730)
dependabot[bot] Sep 29, 2026
addfffa
build(deps): Bump the go-dependencies group with 7 updates (#4737)
dependabot[bot] Oct 5, 2026
bbbf10a
core/scheduler: fix flaky TestSchedulerWait clock rewind (#4726)
KaloyanTanev Oct 5, 2026
b780d84
p2p: label handler metrics from validated stream protocol (#4722)
KaloyanTanev Oct 5, 2026
8cf417c
p2p: restore message handler panics metric (#4706)
KaloyanTanev Nov 6, 2026
e139902
build(deps): Bump golang.org/x/tools (#4742)
dependabot[bot] Oct 7, 2026
037b13d
build(deps): Bump the go-dependencies group with 3 updates (#4770)
dependabot[bot] Oct 12, 2026
9e7656a
app/eth2wrap: bind eth2http service lifetime to caller ctx (#4772)
KaloyanTanev Oct 13, 2026
59d893a
build(deps): Bump the go-dependencies group across 1 directory with 7…
dependabot[bot] Oct 18, 2026
87cdbc5
build(deps): Bump the go-dependencies group across 1 directory with 2…
dependabot[bot] Oct 20, 2026
5a85ca0
core/tracker: debug log sync selection proof inconsistency (#4801)
KaloyanTanev Oct 29, 2026
5211622
app/obolapi: send a User-Agent and type 404s on POST (#4808)
OisinKyne Nov 3, 2026
1dc8075
cmd: convert deposit sign withdrawal addresses to creds (#4804)
OisinKyne Nov 3, 2026
f258ea1
cmd: validate addresses consistently across create and edit (#4805)
OisinKyne Nov 4, 2026
fce5054
build(deps): Bump the go-dependencies group across 1 directory with 4…
dependabot[bot] Nov 5, 2026
c645a2d
*: bump golangci-lint to v2.14.0 (#4741)
KaloyanTanev Oct 6, 2026
0d7f1ba
app/log: silence revive package-naming in redact.go
KaloyanTanev Nov 6, 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
2 changes: 1 addition & 1 deletion .github/actions/setup-go/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ runs:
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
check-latest: true
go-version: "1.26"
go-version: "1.27"

- name: Verify setup
shell: bash
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
version: v2.12.2
version: v2.14.0
10 changes: 9 additions & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: "2"
run:
go: "1.26"
go: "1.27"
linters:
default: all
disable:
Expand All @@ -9,6 +9,7 @@ linters:
- cyclop
- err113
- exhaustruct
- exhaustruct_v5
- forcetypeassert
- funlen
- funcorder
Expand All @@ -18,6 +19,7 @@ linters:
- godot
- godox
- gomoddirectives
- gomodguard
- inamedparam
- interfacebloat
- intrange
Expand Down Expand Up @@ -169,6 +171,12 @@ linters:
- legacy
- std-error-handling
rules:
# golangci-lint's nolintlint falsely reports //nolint:revive directives as
# unused and (with fix: true) deletes them, even though revive would fire
# without them. Keep such directives; do not report or auto-remove them.
- linters:
- nolintlint
text: 'is unused for linter "revive"'
- linters:
- bodyclose
- gosec
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ repos:
rev: v0.0.6
hooks:
- id: check-go-version
args: [-v=go1.26] # Only check minor version locally
args: [-v=go1.27] # Only check minor version locally
pass_filenames: false
additional_dependencies: [packaging]
- id: check-licence-header
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit/run_linter.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

VERSION="2.12.2"
VERSION="2.14.0"

if ! command -v golangci-lint &>/dev/null; then
echo "golangci-lint could not be found"
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ testutil/ # Test utilities, mocks, golden files
## Code Style and Guidelines

### Go Version
Requires Go 1.26 (enforced by pre-commit hooks)
Requires Go 1.27 (enforced by pre-commit hooks)

### Core Principles (from [docs/goguidelines.md](docs/goguidelines.md))
1. **Functions over methods**: Prefer stateless functions over stateful objects
Expand Down
6 changes: 3 additions & 3 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -957,7 +957,7 @@ func newETH2Client(ctx context.Context, conf Config, life *lifecycle.Manager, lo
return nil, nil, err
}

fb := eth2wrap.NewSimnetFallbacks(bnTimeout, [4]byte(forkVersion), beaconNodeHeaders, conf.FallbackBeaconNodeAddrs)
fb := eth2wrap.NewSimnetFallbacks(ctx, bnTimeout, [4]byte(forkVersion), beaconNodeHeaders, conf.FallbackBeaconNodeAddrs)

wrap, err := eth2wrap.Instrument([]eth2wrap.Client{bmock}, fb)
if err != nil {
Expand Down Expand Up @@ -1000,7 +1000,7 @@ func newETH2Client(ctx context.Context, conf Config, life *lifecycle.Manager, lo
return nil, nil, err
}

fb := eth2wrap.NewSimnetFallbacks(bnTimeout, [4]byte(forkVersion), beaconNodeHeaders, conf.FallbackBeaconNodeAddrs)
fb := eth2wrap.NewSimnetFallbacks(ctx, bnTimeout, [4]byte(forkVersion), beaconNodeHeaders, conf.FallbackBeaconNodeAddrs)

wrap, err := eth2wrap.Instrument([]eth2wrap.Client{bmock}, fb)
if err != nil {
Expand Down Expand Up @@ -1046,7 +1046,7 @@ func newETH2Client(ctx context.Context, conf Config, life *lifecycle.Manager, lo

// configureEth2Client configures a beacon node client with the provided settings.
func configureEth2Client(ctx context.Context, forkVersion []byte, fallbackAddrs []string, addrs []string, headers map[string]string, timeout time.Duration, syntheticBlockProposals bool) (eth2wrap.Client, error) {
eth2Cl, err := eth2wrap.NewMultiHTTP(timeout, [4]byte(forkVersion), headers, addrs, fallbackAddrs)
eth2Cl, err := eth2wrap.NewMultiHTTP(ctx, timeout, [4]byte(forkVersion), headers, addrs, fallbackAddrs)
if err != nil {
return nil, errors.Wrap(err, "new eth2 http client")
}
Expand Down
29 changes: 17 additions & 12 deletions app/eth2wrap/eth2wrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,46 +92,51 @@ func WithSyntheticDuties(cl Client) Client {
}

// NewMultiHTTP returns a new instrumented multi eth2 http client.
func NewMultiHTTP(timeout time.Duration, forkVersion [4]byte, headers map[string]string, addrs []string, fallbackAddrs []string) (Client, error) {
// The ctx bounds the lifetime of the underlying eth2http services' background routines.
func NewMultiHTTP(ctx context.Context, timeout time.Duration, forkVersion [4]byte, headers map[string]string, addrs []string, fallbackAddrs []string) (Client, error) {
return Instrument(
newClients(timeout, forkVersion, headers, addrs),
newClients(timeout, forkVersion, headers, fallbackAddrs),
newClients(ctx, timeout, forkVersion, headers, addrs),
newClients(ctx, timeout, forkVersion, headers, fallbackAddrs),
)
}

// NewSimnetFallbacks returns a slice of Client initialized with the provided settings. Used in Simnet setting.
func NewSimnetFallbacks(timeout time.Duration, forkVersion [4]byte, headers map[string]string, addresses []string) []Client {
func NewSimnetFallbacks(ctx context.Context, timeout time.Duration, forkVersion [4]byte, headers map[string]string, addresses []string) []Client {
var clients []Client
for _, address := range addresses {
clients = append(clients, newBeaconClient(timeout, forkVersion, headers, address))
clients = append(clients, newBeaconClient(ctx, timeout, forkVersion, headers, address))
}

return clients
}

// newClients returns a slice of Client initialized with the provided settings.
func newClients(timeout time.Duration, forkVersion [4]byte, headers map[string]string, addresses []string) []Client {
func newClients(ctx context.Context, timeout time.Duration, forkVersion [4]byte, headers map[string]string, addresses []string) []Client {
var clients []Client
for _, address := range addresses {
clients = append(clients, newBeaconClient(timeout, forkVersion, headers, address))
clients = append(clients, newBeaconClient(ctx, timeout, forkVersion, headers, address))
}

return clients
}

// newBeaconClient returns a Client with the provided settings.
func newBeaconClient(timeout time.Duration, forkVersion [4]byte, headers map[string]string, address string) Client {
parameters := []eth2http.Parameter{
// newBeaconClient returns a Client with the provided settings, extraParams override them.
func newBeaconClient(svcCtx context.Context, timeout time.Duration, forkVersion [4]byte, headers map[string]string, address string,
extraParams ...eth2http.Parameter,
) Client {
parameters := append([]eth2http.Parameter{
eth2http.WithLogLevel(zeroLogInfo),
eth2http.WithAddress(address),
eth2http.WithTimeout(timeout),
eth2http.WithAllowDelayedStart(true),
eth2http.WithEnforceJSON(featureset.Enabled(featureset.JSONRequests)),
eth2http.WithExtraHeaders(headers),
}
}, extraParams...)

cl := newLazy(func(ctx context.Context) (Client, error) {
eth2Svc, err := eth2http.New(ctx, parameters...)
// eth2http.New ties its background routines (static value cache clearing, connection
// state pings) to the ctx it is given, so use svcCtx, not the triggering request's ctx.
eth2Svc, err := eth2http.New(svcCtx, parameters...)
if err != nil {
return nil, wrapError(ctx, err, "new eth2 client", z.Str("address", address))
}
Expand Down
33 changes: 33 additions & 0 deletions app/eth2wrap/eth2wrap_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading