Skip to content

Commit 2bfbe14

Browse files
gligneuleljobe
andauthored
Toggle rpc endpoint used on errors (3.8.0 backport) (#3837)
* Toggle rpc endpoint used on errors When there is a failure fetching blobs from `blob_sidecars` switch to `blobs` (and vice-versa.) This makes sense because a node can start syncing before the fusaka fork, and we can automatically switch to the new `blobs` endpoint when the legacy endpoint fails (because it was strongly deprecated and removed in 2 clients.) * Also, add a dangerous flag to skip blob proof verification --------- Co-authored-by: Pepper Lebeck-Jobe <[email protected]>
1 parent 34561dd commit 2bfbe14

File tree

1 file changed

+39
-16
lines changed

1 file changed

+39
-16
lines changed

util/headerreader/blob_client.go

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,26 @@ type BlobClient struct {
4343

4444
// Directory to save the fetched blobs
4545
blobDirectory string
46+
47+
// Dangerous options
48+
skipBlobProofVerification bool
49+
}
50+
51+
type BlobClientDangerousConfig struct {
52+
SkipBlobProofVerification bool `koanf:"skip-blob-proof-verification"`
4653
}
4754

4855
type BlobClientConfig struct {
49-
BeaconUrl string `koanf:"beacon-url"`
50-
SecondaryBeaconUrl string `koanf:"secondary-beacon-url"`
51-
BlobDirectory string `koanf:"blob-directory"`
52-
Authorization string `koanf:"authorization"`
53-
UseLegacyEndpoint bool `koanf:"use-legacy-endpoint"`
56+
BeaconUrl string `koanf:"beacon-url"`
57+
SecondaryBeaconUrl string `koanf:"secondary-beacon-url"`
58+
BlobDirectory string `koanf:"blob-directory"`
59+
Authorization string `koanf:"authorization"`
60+
UseLegacyEndpoint bool `koanf:"use-legacy-endpoint"`
61+
Dangerous BlobClientDangerousConfig `koanf:"dangerous"`
62+
}
63+
64+
var DefaultDangerousConfig = BlobClientDangerousConfig{
65+
SkipBlobProofVerification: false,
5466
}
5567

5668
var DefaultBlobClientConfig = BlobClientConfig{
@@ -59,6 +71,7 @@ var DefaultBlobClientConfig = BlobClientConfig{
5971
BlobDirectory: "",
6072
Authorization: "",
6173
UseLegacyEndpoint: false,
74+
Dangerous: DefaultDangerousConfig,
6275
}
6376

6477
func BlobClientAddOptions(prefix string, f *pflag.FlagSet) {
@@ -67,6 +80,11 @@ func BlobClientAddOptions(prefix string, f *pflag.FlagSet) {
6780
f.String(prefix+".blob-directory", DefaultBlobClientConfig.BlobDirectory, "Full path of the directory to save fetched blobs")
6881
f.String(prefix+".authorization", DefaultBlobClientConfig.Authorization, "Value to send with the HTTP Authorization: header for Beacon REST requests, must include both scheme and scheme parameters")
6982
f.Bool(prefix+".use-legacy-endpoint", DefaultBlobClientConfig.UseLegacyEndpoint, "Use the legacy blob_sidecars endpoint instead of the blobs endpoint")
83+
BlobClientDangerousAddOptions(prefix+".dangerous", f)
84+
}
85+
86+
func BlobClientDangerousAddOptions(prefix string, f *pflag.FlagSet) {
87+
f.Bool(prefix+".skip-blob-proof-verification", DefaultDangerousConfig.SkipBlobProofVerification, "DANGEROUS! Skips verification of KZG proofs for blobs fetched from the beacon node.")
7088
}
7189

7290
func NewBlobClient(config BlobClientConfig, ec *ethclient.Client) (*BlobClient, error) {
@@ -92,12 +110,13 @@ func NewBlobClient(config BlobClientConfig, ec *ethclient.Client) (*BlobClient,
92110
}
93111
}
94112
blobClient := &BlobClient{
95-
ec: ec,
96-
beaconUrl: beaconUrl,
97-
secondaryBeaconUrl: secondaryBeaconUrl,
98-
authorization: config.Authorization,
99-
useLegacyEndpoint: config.UseLegacyEndpoint,
100-
blobDirectory: config.BlobDirectory,
113+
ec: ec,
114+
beaconUrl: beaconUrl,
115+
secondaryBeaconUrl: secondaryBeaconUrl,
116+
authorization: config.Authorization,
117+
useLegacyEndpoint: config.UseLegacyEndpoint,
118+
blobDirectory: config.BlobDirectory,
119+
skipBlobProofVerification: config.Dangerous.SkipBlobProofVerification,
101120
}
102121
blobClient.httpClient.Store(&http.Client{})
103122
return blobClient, nil
@@ -201,6 +220,8 @@ func (b *BlobClient) GetBlobsBySlot(ctx context.Context, slot uint64, versionedH
201220
// we can potentially connect to a different, and healthy, beacon chain node in the next request.
202221
b.httpClient.Store(&http.Client{})
203222

223+
b.useLegacyEndpoint = !b.useLegacyEndpoint
224+
204225
return nil, fmt.Errorf("error fetching blobs for slot %d: %w", slot, err)
205226
}
206227
return blobs, nil
@@ -320,12 +341,14 @@ func (b *BlobClient) blobSidecars(ctx context.Context, slot uint64, versionedHas
320341

321342
copy(output[outputIdx][:], blobItem.Blob)
322343

323-
var proof kzg4844.Proof
324-
copy(proof[:], blobItem.KzgProof)
344+
if !b.skipBlobProofVerification {
345+
var proof kzg4844.Proof
346+
copy(proof[:], blobItem.KzgProof)
325347

326-
err = kzg4844.VerifyBlobProof(&output[outputIdx], commitment, proof)
327-
if err != nil {
328-
return nil, fmt.Errorf("failed to verify blob proof for blob at slot(%d) at index(%d), blob(%s)", slot, blobItem.Index, pretty.FirstFewChars(blobItem.Blob.String()))
348+
err = kzg4844.VerifyBlobProof(&output[outputIdx], commitment, proof)
349+
if err != nil {
350+
return nil, fmt.Errorf("failed to verify blob proof for blob at slot(%d) at index(%d), blob(%s)", slot, blobItem.Index, pretty.FirstFewChars(blobItem.Blob.String()))
351+
}
329352
}
330353
}
331354

0 commit comments

Comments
 (0)