Skip to content

Commit 3a0417e

Browse files
authored
Upgrade to go 1.24 and fix lint errors (#681)
* Remove deprecated linters * Use new range in benchmark loops * Add timestamp overflow check for validator registrations * Define gasLimit as a uint64 * Replace "golang.org/x/exp/slices" with stdlib "slices" * Use require.JSONEq * Add a bunch of //nolint:gosec comments for timestamp conversions * Disable deprecated tenv linter * Define new errTimestampOverflow var * Bump golang to v1.24 * Run go mod tidy * Replace context.Background() with t.Context() in tests
1 parent 13160be commit 3a0417e

File tree

15 files changed

+82
-83
lines changed

15 files changed

+82
-83
lines changed

.github/workflows/checks.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Set up Go
1515
uses: actions/setup-go@v3
1616
with:
17-
go-version: ^1.22
17+
go-version: ^1.24
1818
id: go
1919

2020
- name: Check out code into the Go module directory
@@ -40,7 +40,7 @@ jobs:
4040
- name: Set up Go
4141
uses: actions/setup-go@v3
4242
with:
43-
go-version: ^1.22
43+
go-version: ^1.24
4444
id: go
4545

4646
- name: Check out code into the Go module directory

.golangci.yaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ linters:
1111
- gocritic
1212
- godot
1313
- godox
14-
- gomnd
1514
- lll
1615
- musttag
1716
- mnd
@@ -29,6 +28,7 @@ linters:
2928
- wsl
3029
- interfacebloat
3130
- exhaustruct
31+
- tenv
3232

3333
#
3434
# Disabled because of generics:
@@ -38,11 +38,6 @@ linters:
3838
- sqlclosecheck
3939
- wastedassign
4040

41-
#
42-
# Disabled because deprecated:
43-
#
44-
- execinquery
45-
4641
linters-settings:
4742
#
4843
# The G108 rule throws a false positive. We're not actually vulnerable. If

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# syntax=docker/dockerfile:1
2-
FROM golang:1.22 as builder
2+
FROM golang:1.24 as builder
33
ARG VERSION
44
WORKDIR /build
55

common/ssz_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func TestSSZBuilderSubmission(t *testing.T) {
6262
buffer := new(bytes.Buffer)
6363
err = json.Compact(buffer, jsonBytes)
6464
require.NoError(t, err)
65-
require.Equal(t, buffer.Bytes(), marshalledJSONBytes)
65+
require.JSONEq(t, buffer.String(), string(marshalledJSONBytes))
6666
})
6767
}
6868
}
@@ -146,7 +146,7 @@ func TestSSZGetHeaderResponse(t *testing.T) {
146146
buffer := new(bytes.Buffer)
147147
err = json.Compact(buffer, jsonBytes)
148148
require.NoError(t, err)
149-
require.Equal(t, buffer.Bytes(), marshalledJSONBytes)
149+
require.JSONEq(t, buffer.String(), string(marshalledJSONBytes))
150150
})
151151
}
152152
}
@@ -160,14 +160,14 @@ func BenchmarkDecoding(b *testing.B) {
160160

161161
payload := new(builderSpec.VersionedSignedBuilderBid)
162162
b.Run("capella json", func(b *testing.B) {
163-
for i := 0; i < b.N; i++ {
163+
for range b.N {
164164
err = json.Unmarshal(jsonBytes, &payload)
165165
require.NoError(b, err)
166166
}
167167
})
168168
payload.Capella = new(builderApiCapella.SignedBuilderBid)
169169
b.Run("capella ssz", func(b *testing.B) {
170-
for i := 0; i < b.N; i++ {
170+
for range b.N {
171171
err = payload.Capella.UnmarshalSSZ(sszBytes)
172172
require.NoError(b, err)
173173
}
@@ -180,14 +180,14 @@ func BenchmarkDecoding(b *testing.B) {
180180
require.NoError(b, err)
181181
payload = new(builderSpec.VersionedSignedBuilderBid)
182182
b.Run("deneb json", func(b *testing.B) {
183-
for i := 0; i < b.N; i++ {
183+
for range b.N {
184184
err = json.Unmarshal(jsonBytes, &payload)
185185
require.NoError(b, err)
186186
}
187187
})
188188
payload.Deneb = new(builderApiDeneb.SignedBuilderBid)
189189
b.Run("deneb ssz", func(b *testing.B) {
190-
for i := 0; i < b.N; i++ {
190+
for range b.N {
191191
err = payload.Deneb.UnmarshalSSZ(sszBytes)
192192
require.NoError(b, err)
193193
}

common/types_spec_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestSubmitBuilderBlockJSON(t *testing.T) {
2323
require.NoError(t, err)
2424
expectedJSONBytes := buffer.Bytes()
2525

26-
require.Equal(t, expectedJSONBytes, marshalledJSONBytes)
26+
require.JSONEq(t, string(expectedJSONBytes), string(marshalledJSONBytes))
2727
}
2828

2929
func TestSignedBeaconBlockJSON(t *testing.T) {
@@ -56,7 +56,7 @@ func TestSignedBeaconBlockJSON(t *testing.T) {
5656
marshalledJSONBytes, err := json.Marshal(blockRequest)
5757
require.NoError(t, err)
5858

59-
require.Equal(t, expectedJSONBytes, marshalledJSONBytes)
59+
require.JSONEq(t, string(expectedJSONBytes), string(marshalledJSONBytes))
6060
})
6161
}
6262
}
@@ -91,7 +91,7 @@ func TestSignedBlindedBlockJSON(t *testing.T) {
9191
marshalledJSONBytes, err := json.Marshal(blockRequest)
9292
require.NoError(t, err)
9393

94-
require.Equal(t, expectedJSONBytes, marshalledJSONBytes)
94+
require.JSONEq(t, string(expectedJSONBytes), string(marshalledJSONBytes))
9595
})
9696
}
9797
}

common/utils_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package common
22

33
import (
4-
"context"
54
"fmt"
65
"net/http"
76
"os"
@@ -22,7 +21,7 @@ import (
2221
func TestMakePostRequest(t *testing.T) {
2322
// Test errors
2423
var x chan bool
25-
resp, err := makeRequest(context.Background(), *http.DefaultClient, http.MethodGet, "", x)
24+
resp, err := makeRequest(t.Context(), *http.DefaultClient, http.MethodGet, "", x)
2625
require.Error(t, err)
2726
require.Nil(t, resp)
2827

database/types.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package database
22

33
import (
44
"database/sql"
5+
"errors"
6+
"math"
57
"strconv"
68
"time"
79

810
builderApiV1 "github.com/attestantio/go-builder-client/api/v1"
911
"github.com/flashbots/go-boost-utils/utils"
1012
)
1113

14+
var errTimestampOverflow = errors.New("timestamp overflow")
15+
1216
func NewNullInt64(i int64) sql.NullInt64 {
1317
return sql.NullInt64{
1418
Int64: i,
@@ -78,6 +82,10 @@ func (reg ValidatorRegistrationEntry) ToSignedValidatorRegistration() (*builderA
7882
return nil, err
7983
}
8084

85+
if reg.Timestamp > uint64(math.MaxInt64) {
86+
return nil, errTimestampOverflow
87+
}
88+
8189
return &builderApiV1.SignedValidatorRegistration{
8290
Message: &builderApiV1.ValidatorRegistration{
8391
Pubkey: pubkey,
@@ -93,7 +101,7 @@ func SignedValidatorRegistrationToEntry(valReg builderApiV1.SignedValidatorRegis
93101
return ValidatorRegistrationEntry{
94102
Pubkey: valReg.Message.Pubkey.String(),
95103
FeeRecipient: valReg.Message.FeeRecipient.String(),
96-
Timestamp: uint64(valReg.Message.Timestamp.Unix()),
104+
Timestamp: uint64(valReg.Message.Timestamp.Unix()), //nolint:gosec
97105
GasLimit: valReg.Message.GasLimit,
98106
Signature: valReg.Signature.String(),
99107
}

datastore/datastore.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ func (ds *Datastore) SaveValidatorRegistration(entry builderApiV1.SignedValidato
194194

195195
// then save in redis
196196
pk := common.NewPubkeyHex(entry.Message.Pubkey.String())
197-
err = ds.redis.SetValidatorRegistrationTimestampIfNewer(pk, uint64(entry.Message.Timestamp.Unix()))
197+
err = ds.redis.SetValidatorRegistrationTimestampIfNewer(pk, uint64(entry.Message.Timestamp.Unix())) //nolint:gosec
198198
if err != nil {
199199
return errors.Wrap(err, "failed saving validator registration to redis")
200200
}

datastore/redis_test.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ func TestRedisValidatorRegistration(t *testing.T) {
4141
key := common.ValidPayloadRegisterValidator.Message.Pubkey
4242
value := common.ValidPayloadRegisterValidator
4343
pkHex := common.NewPubkeyHex(key.String())
44-
err := cache.SetValidatorRegistrationTimestamp(pkHex, uint64(value.Message.Timestamp.Unix()))
44+
err := cache.SetValidatorRegistrationTimestamp(pkHex, uint64(value.Message.Timestamp.Unix())) //nolint:gosec
4545
require.NoError(t, err)
4646
result, err := cache.GetValidatorRegistrationTimestamp(common.NewPubkeyHex(key.String()))
4747
require.NoError(t, err)
48-
require.Equal(t, result, uint64(value.Message.Timestamp.Unix()))
48+
require.Equal(t, result, uint64(value.Message.Timestamp.Unix())) //nolint:gosec
4949
})
5050

5151
t.Run("Returns nil if validator registration is not in cache", func(t *testing.T) {
@@ -60,7 +60,7 @@ func TestRedisValidatorRegistration(t *testing.T) {
6060
value := common.ValidPayloadRegisterValidator
6161

6262
pkHex := common.NewPubkeyHex(key.String())
63-
timestamp := uint64(value.Message.Timestamp.Unix())
63+
timestamp := uint64(value.Message.Timestamp.Unix()) //nolint:gosec
6464

6565
err := cache.SetValidatorRegistrationTimestampIfNewer(pkHex, timestamp)
6666
require.NoError(t, err)
@@ -156,7 +156,7 @@ func TestBuilderBids(t *testing.T) {
156156
require.NoError(t, err)
157157
require.Equal(t, big.NewInt(expectedValue), value.ToBig())
158158

159-
topBidValue, err := cache.GetTopBidValue(context.Background(), cache.client.Pipeline(), slot, parentHash, proposerPubkey)
159+
topBidValue, err := cache.GetTopBidValue(t.Context(), cache.client.Pipeline(), slot, parentHash, proposerPubkey)
160160
require.NoError(t, err)
161161
require.Equal(t, big.NewInt(expectedValue), topBidValue)
162162

@@ -168,18 +168,18 @@ func TestBuilderBids(t *testing.T) {
168168
}
169169

170170
ensureBidFloor := func(expectedValue int64) {
171-
floorValue, err := cache.GetFloorBidValue(context.Background(), cache.client.Pipeline(), slot, parentHash, proposerPubkey)
171+
floorValue, err := cache.GetFloorBidValue(t.Context(), cache.client.Pipeline(), slot, parentHash, proposerPubkey)
172172
require.NoError(t, err)
173173
require.Equal(t, big.NewInt(expectedValue), floorValue)
174174
}
175175

176176
// deleting a bid that doesn't exist should not error
177-
err := cache.DelBuilderBid(context.Background(), cache.client.Pipeline(), slot, parentHash, proposerPubkey, bApubkey)
177+
err := cache.DelBuilderBid(t.Context(), cache.client.Pipeline(), slot, parentHash, proposerPubkey, bApubkey)
178178
require.NoError(t, err)
179179

180180
// submit ba1=10
181181
payload, getPayloadResp, getHeaderResp := common.CreateTestBlockSubmission(t, bApubkey, uint256.NewInt(10), &opts)
182-
resp, err := cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
182+
resp, err := cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
183183
require.NoError(t, err)
184184
require.True(t, resp.WasBidSaved, resp)
185185
require.True(t, resp.WasTopBidUpdated)
@@ -189,7 +189,7 @@ func TestBuilderBids(t *testing.T) {
189189
ensureBidFloor(10)
190190

191191
// deleting ba1
192-
err = cache.DelBuilderBid(context.Background(), cache.client.Pipeline(), slot, parentHash, proposerPubkey, bApubkey)
192+
err = cache.DelBuilderBid(t.Context(), cache.client.Pipeline(), slot, parentHash, proposerPubkey, bApubkey)
193193
require.NoError(t, err)
194194

195195
// best bid and floor should still exist, because it was the floor bid
@@ -198,7 +198,7 @@ func TestBuilderBids(t *testing.T) {
198198

199199
// submit ba2=5 (should not update, because floor is 10)
200200
payload, getPayloadResp, getHeaderResp = common.CreateTestBlockSubmission(t, bApubkey, uint256.NewInt(5), &opts)
201-
resp, err = cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
201+
resp, err = cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
202202
require.NoError(t, err)
203203
require.False(t, resp.WasBidSaved, resp)
204204
require.False(t, resp.WasTopBidUpdated)
@@ -209,7 +209,7 @@ func TestBuilderBids(t *testing.T) {
209209

210210
// submit ba3c=5 (should not update, because floor is 10)
211211
payload, getPayloadResp, getHeaderResp = common.CreateTestBlockSubmission(t, bApubkey, uint256.NewInt(5), &opts)
212-
resp, err = cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
212+
resp, err = cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
213213
require.NoError(t, err)
214214
require.True(t, resp.WasBidSaved)
215215
require.False(t, resp.WasTopBidUpdated)
@@ -221,7 +221,7 @@ func TestBuilderBids(t *testing.T) {
221221

222222
// submit bb1=20
223223
payload, getPayloadResp, getHeaderResp = common.CreateTestBlockSubmission(t, bBpubkey, uint256.NewInt(20), &opts)
224-
resp, err = cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
224+
resp, err = cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), false, nil)
225225
require.NoError(t, err)
226226
require.True(t, resp.WasBidSaved)
227227
require.True(t, resp.WasTopBidUpdated)
@@ -232,7 +232,7 @@ func TestBuilderBids(t *testing.T) {
232232

233233
// submit bb2c=22
234234
payload, getPayloadResp, getHeaderResp = common.CreateTestBlockSubmission(t, bBpubkey, uint256.NewInt(22), &opts)
235-
resp, err = cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
235+
resp, err = cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
236236
require.NoError(t, err)
237237
require.True(t, resp.WasBidSaved)
238238
require.True(t, resp.WasTopBidUpdated)
@@ -243,7 +243,7 @@ func TestBuilderBids(t *testing.T) {
243243

244244
// submit bb3c=12 (should update top bid, using floor at 20)
245245
payload, getPayloadResp, getHeaderResp = common.CreateTestBlockSubmission(t, bBpubkey, uint256.NewInt(12), &opts)
246-
resp, err = cache.SaveBidAndUpdateTopBid(context.Background(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
246+
resp, err = cache.SaveBidAndUpdateTopBid(t.Context(), cache.NewPipeline(), trace, payload, getPayloadResp, getHeaderResp, time.Now(), true, nil)
247247
require.NoError(t, err)
248248
require.True(t, resp.WasBidSaved)
249249
require.True(t, resp.WasTopBidUpdated)
@@ -290,7 +290,7 @@ func TestCheckAndSetLastSlotAndHashDelivered(t *testing.T) {
290290
newHash := "0x0000000000000000000000000000000000000000000000000000000000000000"
291291

292292
// should return redis.Nil if wasn't set
293-
slot, err := cache.GetLastSlotDelivered(context.Background(), cache.NewPipeline())
293+
slot, err := cache.GetLastSlotDelivered(t.Context(), cache.NewPipeline())
294294
require.ErrorIs(t, err, redis.Nil)
295295
require.Equal(t, uint64(0), slot)
296296

@@ -299,7 +299,7 @@ func TestCheckAndSetLastSlotAndHashDelivered(t *testing.T) {
299299
require.NoError(t, err)
300300

301301
// should get slot
302-
slot, err = cache.GetLastSlotDelivered(context.Background(), cache.NewPipeline())
302+
slot, err = cache.GetLastSlotDelivered(t.Context(), cache.NewPipeline())
303303
require.NoError(t, err)
304304
require.Equal(t, newSlot, slot)
305305

@@ -426,8 +426,8 @@ func TestGetBuilderLatestValue(t *testing.T) {
426426
},
427427
}
428428

429-
_, err = cache.client.TxPipelined(context.Background(), func(pipeliner redis.Pipeliner) error {
430-
return cache.SaveBuilderBid(context.Background(), pipeliner, slot, parentHash, proposerPubkey, builderPubkey, time.Now().UTC(), getHeaderResp)
429+
_, err = cache.client.TxPipelined(t.Context(), func(pipeliner redis.Pipeliner) error {
430+
return cache.SaveBuilderBid(t.Context(), pipeliner, slot, parentHash, proposerPubkey, builderPubkey, time.Now().UTC(), getHeaderResp)
431431
})
432432
require.NoError(t, err)
433433

@@ -439,7 +439,7 @@ func TestGetBuilderLatestValue(t *testing.T) {
439439

440440
func TestPipelineNilCheck(t *testing.T) {
441441
cache := setupTestRedis(t)
442-
f, err := cache.GetFloorBidValue(context.Background(), cache.NewPipeline(), 0, "1", "2")
442+
f, err := cache.GetFloorBidValue(t.Context(), cache.NewPipeline(), 0, "1", "2")
443443
require.NoError(t, err)
444444
require.Equal(t, big.NewInt(0), f)
445445
}
@@ -450,24 +450,24 @@ func TestPipelineNilCheck(t *testing.T) {
450450
// key1 := "test1"
451451
// key2 := "test123"
452452
// val := "foo"
453-
// err := cache.client.Set(context.Background(), key1, val, 0).Err()
453+
// err := cache.client.Set(t.Context(), key1, val, 0).Err()
454454
// require.NoError(t, err)
455455

456-
// _, err = cache.client.TxPipelined(context.Background(), func(pipeliner redis.Pipeliner) error {
457-
// c := tx.Get(context.Background(), key1)
458-
// _, err := tx.Exec(context.Background())
456+
// _, err = cache.client.TxPipelined(t.Context(), func(pipeliner redis.Pipeliner) error {
457+
// c := tx.Get(t.Context(), key1)
458+
// _, err := tx.Exec(t.Context())
459459
// require.NoError(t, err)
460460
// str, err := c.Result()
461461
// require.NoError(t, err)
462462
// require.Equal(t, val, str)
463463

464-
// err = tx.Set(context.Background(), key2, val, 0).Err()
464+
// err = tx.Set(t.Context(), key2, val, 0).Err()
465465
// require.NoError(t, err)
466466
// return nil
467467
// })
468468
// require.NoError(t, err)
469469

470-
// str, err := cache.client.Get(context.Background(), key2).Result()
470+
// str, err := cache.client.Get(t.Context(), key2).Result()
471471
// require.NoError(t, err)
472472
// require.Equal(t, val, str)
473473
// }

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/flashbots/mev-boost-relay
22

3-
go 1.22.0
3+
go 1.24.0
44

55
require (
66
github.com/NYTimes/gziphandler v1.1.1
@@ -31,7 +31,6 @@ require (
3131
go.opentelemetry.io/otel/sdk v1.25.0
3232
go.opentelemetry.io/otel/sdk/metric v1.25.0
3333
go.uber.org/atomic v1.11.0
34-
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
3534
golang.org/x/text v0.21.0
3635
)
3736

0 commit comments

Comments
 (0)