-
Notifications
You must be signed in to change notification settings - Fork 117
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore(storage): cleanup NotFound
errors
#2065
base: main
Are you sure you want to change the base?
Changes from 19 commits
a19b0d1
06aee0d
7bfea6b
bba5071
3afed77
3917a9a
64d2f3e
dc50cc1
034f7d1
b0f9050
55ce71e
b32f9d8
86da4a8
c9b579a
b998227
ec89f97
7c5e4ad
23e5a13
35e893c
30b680f
fbd9772
4acb893
3e88d11
db3bee6
c2d9108
c1a1986
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -20,6 +20,12 @@ | |||||||||||||||
|
||||||||||||||||
package beacondb | ||||||||||||||||
|
||||||||||||||||
import ( | ||||||||||||||||
"fmt" | ||||||||||||||||
|
||||||||||||||||
storage "github.com/berachain/beacon-kit/mod/storage/pkg" | ||||||||||||||||
) | ||||||||||||||||
|
||||||||||||||||
// GetLatestExecutionPayloadHeader retrieves the latest execution payload | ||||||||||||||||
// header from the BeaconStore. | ||||||||||||||||
func (kv *KVStore[ | ||||||||||||||||
|
@@ -28,13 +34,40 @@ func (kv *KVStore[ | |||||||||||||||
]) GetLatestExecutionPayloadHeader() ( | ||||||||||||||||
ExecutionPayloadHeaderT, error, | ||||||||||||||||
) { | ||||||||||||||||
forkVersion, err := kv.latestExecutionPayloadVersion.Get(kv.ctx) | ||||||||||||||||
var h ExecutionPayloadHeaderT | ||||||||||||||||
v, err := kv.getLatestExecutionPayloadVersion() | ||||||||||||||||
if err != nil { | ||||||||||||||||
return h, fmt.Errorf( | ||||||||||||||||
"failed retrieving latest execution payload header: %w", | ||||||||||||||||
err, | ||||||||||||||||
) | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
kv.latestExecutionPayloadCodec.SetActiveForkVersion(v) | ||||||||||||||||
h, err = kv.latestExecutionPayloadHeader.Get(kv.ctx) | ||||||||||||||||
err = storage.MapError(err) | ||||||||||||||||
if err != nil { | ||||||||||||||||
return h, fmt.Errorf( | ||||||||||||||||
"failed retrieving latest execution payload header: %w", | ||||||||||||||||
err, | ||||||||||||||||
) | ||||||||||||||||
} | ||||||||||||||||
return h, nil | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
func (kv *KVStore[ | ||||||||||||||||
BeaconBlockHeaderT, Eth1DataT, ExecutionPayloadHeaderT, | ||||||||||||||||
ForkT, ValidatorT, ValidatorsT, | ||||||||||||||||
]) getLatestExecutionPayloadVersion() (uint32, error) { | ||||||||||||||||
v, err := kv.latestExecutionPayloadVersion.Get(kv.ctx) | ||||||||||||||||
err = storage.MapError(err) | ||||||||||||||||
if err != nil { | ||||||||||||||||
var t ExecutionPayloadHeaderT | ||||||||||||||||
return t, err | ||||||||||||||||
return 0, fmt.Errorf( | ||||||||||||||||
"failed retrieving latest execution payload version: %w", | ||||||||||||||||
err, | ||||||||||||||||
) | ||||||||||||||||
} | ||||||||||||||||
kv.latestExecutionPayloadCodec.SetActiveForkVersion(forkVersion) | ||||||||||||||||
return kv.latestExecutionPayloadHeader.Get(kv.ctx) | ||||||||||||||||
return v, nil | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
// SetLatestExecutionPayloadHeader sets the latest execution payload header in | ||||||||||||||||
|
@@ -45,9 +78,11 @@ func (kv *KVStore[ | |||||||||||||||
]) SetLatestExecutionPayloadHeader( | ||||||||||||||||
payloadHeader ExecutionPayloadHeaderT, | ||||||||||||||||
) error { | ||||||||||||||||
if err := kv.latestExecutionPayloadVersion.Set( | ||||||||||||||||
kv.ctx, payloadHeader.Version(), | ||||||||||||||||
); err != nil { | ||||||||||||||||
var ( | ||||||||||||||||
ctx = kv.ctx | ||||||||||||||||
version = payloadHeader.Version() | ||||||||||||||||
) | ||||||||||||||||
if err := kv.latestExecutionPayloadVersion.Set(ctx, version); err != nil { | ||||||||||||||||
Comment on lines
+81
to
+85
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Simplify The variable Apply this diff to streamline the function: func (kv *KVStore[
BeaconBlockHeaderT, Eth1DataT, ExecutionPayloadHeaderT,
ForkT, ValidatorT, ValidatorsT,
]) SetLatestExecutionPayloadHeader(
payloadHeader ExecutionPayloadHeaderT,
) error {
- var (
- ctx = kv.ctx
- version = payloadHeader.Version()
- )
+ version := payloadHeader.Version()
- if err := kv.latestExecutionPayloadVersion.Set(ctx, version); err != nil {
+ if err := kv.latestExecutionPayloadVersion.Set(kv.ctx, version); err != nil {
return err
}
kv.latestExecutionPayloadCodec.SetActiveForkVersion(payloadHeader.Version())
return kv.latestExecutionPayloadHeader.Set(kv.ctx, payloadHeader)
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||
return err | ||||||||||||||||
abi87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||
} | ||||||||||||||||
abi87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||
kv.latestExecutionPayloadCodec.SetActiveForkVersion(payloadHeader.Version()) | ||||||||||||||||
|
@@ -59,7 +94,16 @@ func (kv *KVStore[ | |||||||||||||||
BeaconBlockHeaderT, Eth1DataT, ExecutionPayloadHeaderT, | ||||||||||||||||
ForkT, ValidatorT, ValidatorsT, | ||||||||||||||||
]) GetEth1DepositIndex() (uint64, error) { | ||||||||||||||||
return kv.eth1DepositIndex.Get(kv.ctx) | ||||||||||||||||
idx, err := kv.eth1DepositIndex.Get(kv.ctx) | ||||||||||||||||
err = storage.MapError(err) | ||||||||||||||||
if err != nil { | ||||||||||||||||
return 0, fmt.Errorf( | ||||||||||||||||
"failed retrieving eth1 deposit index %d, %w", | ||||||||||||||||
idx, | ||||||||||||||||
err, | ||||||||||||||||
) | ||||||||||||||||
} | ||||||||||||||||
return idx, nil | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
// SetEth1DepositIndex sets the eth1 deposit index in the beacon state. | ||||||||||||||||
|
@@ -77,7 +121,15 @@ func (kv *KVStore[ | |||||||||||||||
BeaconBlockHeaderT, Eth1DataT, ExecutionPayloadHeaderT, | ||||||||||||||||
ForkT, ValidatorT, ValidatorsT, | ||||||||||||||||
]) GetEth1Data() (Eth1DataT, error) { | ||||||||||||||||
return kv.eth1Data.Get(kv.ctx) | ||||||||||||||||
d, err := kv.eth1Data.Get(kv.ctx) | ||||||||||||||||
err = storage.MapError(err) | ||||||||||||||||
if err != nil { | ||||||||||||||||
return d, fmt.Errorf( | ||||||||||||||||
"failed retrieving eth1 data: %w", | ||||||||||||||||
err, | ||||||||||||||||
) | ||||||||||||||||
} | ||||||||||||||||
return d, nil | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
// SetEth1Data sets the eth1 data in the beacon state. | ||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
SetActiveForkVersion Does Not Validate Version Inputs
The
SetActiveForkVersion
method inmod/storage/pkg/encoding/ssz.go
assigns the provided version directly without validating whether it is valid or supported. This lack of validation may lead to unexpected behavior if an invalid or unsupported version is set.mod/storage/pkg/encoding/ssz.go
SetActiveForkVersion
lacks error handling for invalid versions.🔗 Analysis chain
Ensure
SetActiveForkVersion
handles invalid versionsWhen setting the active fork version with
kv.latestExecutionPayloadCodec.SetActiveForkVersion(v)
, it's important to verify that invalid or unsupported versions are properly handled. Lack of validation may lead to unexpected behavior elsewhere in the code.Run the following script to check the implementation of
SetActiveForkVersion
:🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 1081