Skip to content

Commit 108d5e3

Browse files
avalonchealextes
andauthored
Publish block V1 flag fix (#585)
* fix USE_V1_PUBLISH_BLOCK_ENDPOINT flag USE_V1_PUBLISH_BLOCK_ENDPOINT was accidentally using the v2 publish endpoint when set instead of v1, and vice versa. * add header version * update lint --------- Co-authored-by: Alexander Tesfamichael <alex.tesfamichael@gmail.com>
1 parent d8a0d7b commit 108d5e3

20 files changed

+131
-88
lines changed

.github/workflows/checks.yml

+5-5
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.20
17+
go-version: ^1.21
1818
id: go
1919

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

4646
- name: Check out code into the Go module directory
47-
uses: actions/checkout@v2
47+
uses: actions/checkout@v3
4848

4949
- name: Install gofumpt
5050
run: go install mvdan.cc/gofumpt@v0.4.0
5151

5252
- name: Install staticcheck
53-
run: go install honnef.co/go/tools/cmd/staticcheck@v0.4.2
53+
run: go install honnef.co/go/tools/cmd/staticcheck@v0.4.6
5454

5555
- name: Install golangci-lint
56-
run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2
56+
run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.0
5757

5858
- name: Lint
5959
run: make lint

.golangci.yaml

+8-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ linters:
3030
- deadcode
3131
- varcheck
3232
- interfacebloat
33+
- exhaustruct
3334

3435
#
3536
# Disabled because of generics:
@@ -121,4 +122,10 @@ issues:
121122
exclude-rules:
122123
- path: (.+)_test.go
123124
linters:
124-
- exhaustruct
125+
- exhaustruct
126+
- path: database/.*.go
127+
linters:
128+
- goconst
129+
- path: cmd/tool/.*.go
130+
linters:
131+
- goconst

beaconclient/beacon_client_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func TestBeaconInstance(t *testing.T) {
7777

7878
vals, err := bc.GetStateValidators("1")
7979
require.NoError(t, err)
80-
require.Equal(t, 1, len(vals.Data))
80+
require.Len(t, vals.Data, 1)
8181
require.Contains(t, validatorResponseEntryToMap(vals.Data), "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a")
8282
}
8383

@@ -188,7 +188,7 @@ func TestFetchValidators(t *testing.T) {
188188

189189
validators, err := backend.beaconClient.GetStateValidators("1")
190190
require.NoError(t, err)
191-
require.Equal(t, 1, len(validators.Data))
191+
require.Len(t, validators.Data, 1)
192192
require.Contains(t, validatorResponseEntryToMap(validators.Data), testPubKey)
193193

194194
// only beacon 2 should have a validator, and should be used by default
@@ -199,7 +199,7 @@ func TestFetchValidators(t *testing.T) {
199199

200200
validators, err = backend.beaconClient.GetStateValidators("1")
201201
require.NoError(t, err)
202-
require.Equal(t, 1, len(validators.Data))
202+
require.Len(t, validators.Data, 1)
203203
})
204204
}
205205

@@ -239,5 +239,5 @@ func TestGetForkSchedule(t *testing.T) {
239239

240240
forkSchedule, err := bc.GetForkSchedule()
241241
require.NoError(t, err)
242-
require.Equal(t, 4, len(forkSchedule.Data))
242+
require.Len(t, forkSchedule.Data, 4)
243243
}

beaconclient/prod_beacon_instance.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net/http"
77
"os"
8+
"strings"
89
"time"
910

1011
"github.com/attestantio/go-eth2-client/spec/capella"
@@ -244,12 +245,12 @@ func (c *ProdBeaconInstance) GetURI() string {
244245
func (c *ProdBeaconInstance) PublishBlock(block *common.VersionedSignedProposal, broadcastMode BroadcastMode) (code int, err error) {
245246
var uri string
246247
if c.ffUseV1PublishBlockEndpoint {
247-
uri = fmt.Sprintf("%s/eth/v2/beacon/blocks?broadcast_validation=%s", c.beaconURI, broadcastMode)
248-
} else {
249248
uri = fmt.Sprintf("%s/eth/v1/beacon/blocks", c.beaconURI)
249+
} else {
250+
uri = fmt.Sprintf("%s/eth/v2/beacon/blocks?broadcast_validation=%s", c.beaconURI, broadcastMode)
250251
}
251252
headers := http.Header{}
252-
headers.Add("Eth-Consensus-Version", common.ForkVersionStringCapella) // optional in v1, required in v2
253+
headers.Add("Eth-Consensus-Version", strings.ToLower(block.Version.String())) // optional in v1, required in v2
253254
return fetchBeacon(http.MethodPost, uri, block, nil, nil, headers, false)
254255
}
255256

common/types.go

+22-21
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"os"
8+
"strconv"
89
"strings"
910

1011
builderApiV1 "github.com/attestantio/go-builder-client/api/v1"
@@ -194,8 +195,8 @@ type BuilderGetValidatorsResponseEntry struct {
194195

195196
type BidTraceV2 struct {
196197
builderApiV1.BidTrace
197-
BlockNumber uint64 `db:"block_number" json:"block_number,string"`
198-
NumTx uint64 `db:"num_tx" json:"num_tx,string"`
198+
BlockNumber uint64 `db:"block_number" json:"block_number,string"`
199+
NumTx uint64 `db:"num_tx" json:"num_tx,string"`
199200
}
200201

201202
type BidTraceV2JSON struct {
@@ -267,17 +268,17 @@ func (b *BidTraceV2JSON) CSVHeader() []string {
267268

268269
func (b *BidTraceV2JSON) ToCSVRecord() []string {
269270
return []string{
270-
fmt.Sprint(b.Slot),
271+
strconv.FormatUint(b.Slot, 10),
271272
b.ParentHash,
272273
b.BlockHash,
273274
b.BuilderPubkey,
274275
b.ProposerPubkey,
275276
b.ProposerFeeRecipient,
276-
fmt.Sprint(b.GasLimit),
277-
fmt.Sprint(b.GasUsed),
277+
strconv.FormatUint(b.GasLimit, 10),
278+
strconv.FormatUint(b.GasUsed, 10),
278279
b.Value,
279-
fmt.Sprint(b.NumTx),
280-
fmt.Sprint(b.BlockNumber),
280+
strconv.FormatUint(b.NumTx, 10),
281+
strconv.FormatUint(b.BlockNumber, 10),
281282
}
282283
}
283284

@@ -309,20 +310,20 @@ func (b *BidTraceV2WithTimestampJSON) CSVHeader() []string {
309310

310311
func (b *BidTraceV2WithTimestampJSON) ToCSVRecord() []string {
311312
return []string{
312-
fmt.Sprint(b.Slot),
313+
strconv.FormatUint(b.Slot, 10),
313314
b.ParentHash,
314315
b.BlockHash,
315316
b.BuilderPubkey,
316317
b.ProposerPubkey,
317318
b.ProposerFeeRecipient,
318-
fmt.Sprint(b.GasLimit),
319-
fmt.Sprint(b.GasUsed),
319+
strconv.FormatUint(b.GasLimit, 10),
320+
strconv.FormatUint(b.GasUsed, 10),
320321
b.Value,
321-
fmt.Sprint(b.NumTx),
322-
fmt.Sprint(b.BlockNumber),
323-
fmt.Sprint(b.Timestamp),
324-
fmt.Sprint(b.TimestampMs),
325-
fmt.Sprint(b.OptimisticSubmission),
322+
strconv.FormatUint(b.NumTx, 10),
323+
strconv.FormatUint(b.BlockNumber, 10),
324+
strconv.FormatInt(b.Timestamp, 10),
325+
strconv.FormatInt(b.TimestampMs, 10),
326+
strconv.FormatBool(b.OptimisticSubmission),
326327
}
327328
}
328329

@@ -599,7 +600,7 @@ func (s *SubmitBlockRequestV2Optimistic) MarshalSSZTo(buf []byte) (dst []byte, e
599600
s.Message = new(builderApiV1.BidTrace)
600601
}
601602
if dst, err = s.Message.MarshalSSZTo(dst); err != nil {
602-
return
603+
return nil, err
603604
}
604605

605606
// Offset (1) 'ExecutionPayloadHeader'
@@ -624,13 +625,13 @@ func (s *SubmitBlockRequestV2Optimistic) MarshalSSZTo(buf []byte) (dst []byte, e
624625

625626
// Field (1) 'ExecutionPayloadHeader'
626627
if dst, err = s.ExecutionPayloadHeader.MarshalSSZTo(dst); err != nil {
627-
return
628+
return nil, err
628629
}
629630

630631
// Field (3) 'Transactions'
631632
if size := len(s.Transactions); size > 1073741824 {
632633
err = ssz.ErrListTooBigFn("SubmitBlockRequestV2Optimistic.Transactions", size, 1073741824)
633-
return
634+
return nil, err
634635
}
635636
{
636637
offset = 4 * len(s.Transactions)
@@ -642,19 +643,19 @@ func (s *SubmitBlockRequestV2Optimistic) MarshalSSZTo(buf []byte) (dst []byte, e
642643
for ii := 0; ii < len(s.Transactions); ii++ {
643644
if size := len(s.Transactions[ii]); size > 1073741824 {
644645
err = ssz.ErrBytesLengthFn("SubmitBlockRequestV2Optimistic.Transactions[ii]", size, 1073741824)
645-
return
646+
return nil, err
646647
}
647648
dst = append(dst, s.Transactions[ii]...)
648649
}
649650

650651
// Field (4) 'Withdrawals'
651652
if size := len(s.Withdrawals); size > 16 {
652653
err = ssz.ErrListTooBigFn("SubmitBlockRequestV2Optimistic.Withdrawals", size, 16)
653-
return
654+
return nil, err
654655
}
655656
for ii := 0; ii < len(s.Withdrawals); ii++ {
656657
if dst, err = s.Withdrawals[ii].MarshalSSZTo(dst); err != nil {
657-
return
658+
return nil, err
658659
}
659660
}
660661
return dst, nil

common/types_test.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@ import (
1616
func makeTestSubmitBlockRequestV2Optimistic(t *testing.T) *SubmitBlockRequestV2Optimistic {
1717
t.Helper()
1818
testParentHash, err := utils.HexToHash("0xec51bd499a3fa0270f1446fbf05ff0b61157cfe4ec719bb4c3e834e339ee9c5c")
19-
require.Nil(t, err)
19+
require.NoError(t, err)
2020
testBlockHash, err := utils.HexToHash("0x3f5b5aaa800a3d25c3f75e72dc45da89fdd58168f1358a9f94aac8b029361a0a")
21-
require.Nil(t, err)
21+
require.NoError(t, err)
2222
testRandao, err := utils.HexToHash("0x8cf6b7fbfbaf80da001fe769fd02e9b8dbfa0a646d9cf51b5d7137dd4f8103cc")
23-
require.Nil(t, err)
23+
require.NoError(t, err)
2424
testRoot, err := utils.HexToHash("0x7554727cee6d976a1dfdad80b392b37c87f0651ff5b01f6a0b3402bcfce92077")
25-
require.Nil(t, err)
25+
require.NoError(t, err)
2626
testBuilderPubkey, err := utils.HexToPubkey("0xae7bde4839fa905b7d8125fd84cfdcd0c32cd74e1be3fa24263d71b520fc78113326ce0a90b95d73f19e6d8150a2f73b")
27-
require.Nil(t, err)
27+
require.NoError(t, err)
2828
testProposerPubkey, err := utils.HexToPubkey("0xbb8e223239fa905b7d8125fd84cfdcd0c32cd74e1be3fa24263d71b520fc78113326ce0a90b95d73f19e6d8150a2f73b")
29-
require.Nil(t, err)
29+
require.NoError(t, err)
3030
testAddress, err := utils.HexToAddress("0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5")
31-
require.Nil(t, err)
31+
require.NoError(t, err)
3232
testSignature, err := utils.HexToSignature("0xb06311be19c92307c06070578af9ad147c9c6ea902439eac19f785f3dca478c354b79a0af9b09839c3d06c1ccf2185b0162f4d4fbf981220f77586b52ed9ae8a8acfc953baaa30dee15e1b112913c6cbe02c780d7b5363a4af16563fe55c2e88")
33-
require.Nil(t, err)
33+
require.NoError(t, err)
3434
testValue := new(uint256.Int)
3535
err = testValue.SetFromDecimal("100")
36-
require.Nil(t, err)
36+
require.NoError(t, err)
3737

3838
return &SubmitBlockRequestV2Optimistic{
3939
Message: &builderApiV1.BidTrace{
@@ -108,13 +108,13 @@ func TestSubmitBlockRequestV2Optimistic(t *testing.T) {
108108

109109
// Encode the object.
110110
sszObj, err := obj.MarshalSSZ()
111-
require.Nil(t, err)
112-
require.Equal(t, obj.SizeSSZ(), len(sszObj))
111+
require.NoError(t, err)
112+
require.Len(t, sszObj, obj.SizeSSZ())
113113

114114
// Unmarshal the full object.
115115
unmarshal := new(SubmitBlockRequestV2Optimistic)
116116
err = unmarshal.UnmarshalSSZ(sszObj)
117-
require.Nil(t, err)
117+
require.NoError(t, err)
118118

119119
compareV2RequestEquality(t, obj, unmarshal)
120120

@@ -125,10 +125,10 @@ func TestSubmitBlockRequestV2Optimistic(t *testing.T) {
125125
// Unmarshal just the header.
126126
unmarshalHeader := new(SubmitBlockRequestV2Optimistic)
127127
err = unmarshalHeader.UnmarshalSSZHeaderOnly(sszObj)
128-
require.Nil(t, err)
128+
require.NoError(t, err)
129129

130130
compareV2RequestEquality(t, obj, unmarshalHeader)
131131

132132
// Make sure size is correct (must have 32 bytes of ExtraData).
133-
require.Equal(t, unmarshalHeader.SizeSSZ(), 944)
133+
require.Equal(t, 944, unmarshalHeader.SizeSSZ())
134134
}

common/utils_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func TestGetEnvStrSlice(t *testing.T) {
9191
testEnvVar := "TESTENV_TestGetEnvStrSlice"
9292
os.Unsetenv(testEnvVar)
9393
r := GetEnvStrSlice(testEnvVar, nil)
94-
require.Len(t, r, 0)
94+
require.Empty(t, r)
9595

9696
t.Setenv(testEnvVar, "")
9797
r = GetEnvStrSlice(testEnvVar, nil)
@@ -185,7 +185,7 @@ func TestGetBlockSubmissionInfo(t *testing.T) {
185185
submission, err := GetBlockSubmissionInfo(tc.payload)
186186
require.Equal(t, tc.expected, submission)
187187
if tc.err == "" {
188-
require.Nil(t, err)
188+
require.NoError(t, err)
189189
} else {
190190
require.Equal(t, tc.err, err.Error())
191191
}

database/database_test.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"database/sql"
55
"fmt"
66
"os"
7+
"strconv"
78
"testing"
89
"time"
910

@@ -205,7 +206,7 @@ func TestMigrations(t *testing.T) {
205206
rowCount := 0
206207
err := db.DB.QueryRow(query).Scan(&rowCount)
207208
require.NoError(t, err)
208-
require.Equal(t, len(migrations.Migrations.Migrations), rowCount)
209+
require.Len(t, migrations.Migrations.Migrations, rowCount)
209210
}
210211

211212
func TestSetBlockBuilderStatus(t *testing.T) {
@@ -448,7 +449,7 @@ func TestGetBuilderSubmissions(t *testing.T) {
448449
require.Equal(t, optimisticSubmission, e.OptimisticSubmission)
449450
require.Equal(t, pubkey, e.BuilderPubkey)
450451
require.Equal(t, feeRecipient.String(), e.ProposerFeeRecipient)
451-
require.Equal(t, fmt.Sprint(collateral), e.Value)
452+
require.Equal(t, strconv.Itoa(collateral), e.Value)
452453
}
453454

454455
func TestUpsertTooLateGetPayload(t *testing.T) {
@@ -462,7 +463,7 @@ func TestUpsertTooLateGetPayload(t *testing.T) {
462463

463464
entries, err := db.GetTooLateGetPayload(slot)
464465
require.NoError(t, err)
465-
require.Equal(t, 1, len(entries))
466+
require.Len(t, entries, 1)
466467
entry := entries[0]
467468
require.Equal(t, pk, entry.ProposerPubkey)
468469
require.Equal(t, hash, entry.BlockHash)
@@ -484,7 +485,7 @@ func TestUpsertTooLateGetPayload(t *testing.T) {
484485

485486
entries, err = db.GetTooLateGetPayload(slot)
486487
require.NoError(t, err)
487-
require.Equal(t, 2, len(entries))
488+
require.Len(t, entries, 2)
488489
entry = entries[1]
489490
require.Equal(t, hash2, entry.BlockHash)
490491
}

database/types.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package database
22

33
import (
44
"database/sql"
5-
"fmt"
5+
"strconv"
66
"time"
77

88
builderApiV1 "github.com/attestantio/go-builder-client/api/v1"
@@ -114,9 +114,9 @@ var ExecutionPayloadEntryCSVHeader = []string{"id", "inserted_at", "slot", "prop
114114

115115
func (e *ExecutionPayloadEntry) ToCSVRecord() []string {
116116
return []string{
117-
fmt.Sprint(e.ID),
117+
strconv.FormatInt(e.ID, 10),
118118
e.InsertedAt.UTC().String(),
119-
fmt.Sprint(e.Slot),
119+
strconv.FormatUint(e.Slot, 10),
120120
e.ProposerPubkey,
121121
e.BlockHash,
122122
e.Version,

database/typesconv_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,5 @@ func TestExecutionPayloadEntryToExecutionPayloadDeneb(t *testing.T) {
4444
payload, err := ExecutionPayloadEntryToExecutionPayload(entry)
4545
require.NoError(t, err)
4646
require.Equal(t, "0xbd1ae4f7edb2315d2df70a8d9881fab8d6763fb1c00533ae729050928c38d05a", payload.Deneb.ExecutionPayload.BlockHash.String())
47-
require.Equal(t, 1, len(payload.Deneb.BlobsBundle.Blobs))
47+
require.Len(t, payload.Deneb.BlobsBundle.Blobs, 1)
4848
}

0 commit comments

Comments
 (0)