Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,5 @@ CLAUDE.local.md

# Downloaded external test data (make testdata)
third_party/testdata
# methodical generated tests, which include large fixtures
testing/spectest/methodical
2 changes: 1 addition & 1 deletion api/client/builder/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ go_library(
"//proto/prysm/v1alpha1:go_default_library",
"//runtime/version:go_default_library",
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
"@com_github_offchainlabs_methodical_ssz//ssz:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@io_opentelemetry_go_contrib_instrumentation_net_http_otelhttp//:go_default_library",
"@org_golang_google_protobuf//proto:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion api/client/builder/bid.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package builder

import (
"github.com/OffchainLabs/methodical-ssz/ssz"
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
v1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/OffchainLabs/prysm/v7/runtime/version"
ssz "github.com/prysmaticlabs/fastssz"
)

// SignedBid is an interface describing the method set of a signed builder bid.
Expand Down
16 changes: 12 additions & 4 deletions beacon-chain/blockchain/head_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,10 @@ func Test_notifyNewHeadEvent(t *testing.T) {
require.NoError(t, err)
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(t.Context(), st, blk))
require.NoError(t, srv.notifyNewHeadEvent(t.Context(), 1, newHeadStateRoot, newHeadRoot))
require.Eventually(t, func() bool {
return len(notifier.ReceivedEvents()) == 1
}, 5*time.Second, 50*time.Millisecond, "Expected exactly 1 state notification")
events := notifier.ReceivedEvents()
require.Equal(t, 1, len(events))

eventHead, ok := events[0].Data.(*statefeed.HeadData)
require.Equal(t, true, ok)
Expand Down Expand Up @@ -233,8 +235,10 @@ func Test_notifyNewHeadEvent(t *testing.T) {
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(t.Context(), st, blk))
err = srv.notifyNewHeadEvent(t.Context(), epoch2Start, newHeadStateRoot, newHeadRoot)
require.NoError(t, err)
require.Eventually(t, func() bool {
return len(notifier.ReceivedEvents()) == 1
}, 5*time.Second, 50*time.Millisecond, "Expected exactly 1 state notification")
events := notifier.ReceivedEvents()
require.Equal(t, 1, len(events))

eventHead, ok := events[0].Data.(*statefeed.HeadData)
require.Equal(t, true, ok)
Expand Down Expand Up @@ -263,8 +267,10 @@ func Test_notifyNewHeadEvent(t *testing.T) {
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(t.Context(), st, blk))
newHeadSlot := params.BeaconConfig().SlotsPerEpoch
require.NoError(t, srv.notifyNewHeadEvent(t.Context(), newHeadSlot, newHeadStateRoot, newHeadRoot))
require.Eventually(t, func() bool {
return len(notifier.ReceivedEvents()) == 1
}, 5*time.Second, 50*time.Millisecond, "Expected exactly 1 state notification")
events := notifier.ReceivedEvents()
require.Equal(t, 1, len(events))

eventHead, ok := events[0].Data.(*statefeed.HeadData)
require.Equal(t, true, ok)
Expand Down Expand Up @@ -292,8 +298,10 @@ func Test_notifyNewHeadEvent(t *testing.T) {
require.NoError(t, srv.cfg.ForkChoiceStore.InsertNode(t.Context(), st, blk))
newHeadSlot := params.BeaconConfig().SlotsPerEpoch
require.NoError(t, srv.notifyNewHeadEvent(t.Context(), newHeadSlot, [32]byte{2}, newHeadRoot))
require.Eventually(t, func() bool {
return len(notifier.ReceivedEvents()) == 1
}, 5*time.Second, 50*time.Millisecond, "Expected exactly 1 state notification")
events := notifier.ReceivedEvents()
require.Equal(t, 1, len(events))

eventHead, ok := events[0].Data.(*statefeed.HeadData)
require.Equal(t, true, ok)
Expand Down
2 changes: 1 addition & 1 deletion beacon-chain/core/gloas/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ go_test(
"//testing/require:go_default_library",
"//testing/util:go_default_library",
"//time/slots:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_offchainlabs_methodical_ssz//ssz:go_default_library",
"@com_github_prysmaticlabs_go_bitfield//:go_default_library",
"@org_golang_google_protobuf//proto:go_default_library",
],
Expand Down
7 changes: 4 additions & 3 deletions beacon-chain/core/gloas/bid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import (
"bytes"
"testing"

ssz "github.com/OffchainLabs/methodical-ssz/ssz"
"google.golang.org/protobuf/proto"

"github.com/OffchainLabs/prysm/v7/beacon-chain/core/signing"
state_native "github.com/OffchainLabs/prysm/v7/beacon-chain/state/state-native"
"github.com/OffchainLabs/prysm/v7/config/params"
Expand All @@ -18,8 +21,6 @@ import (
"github.com/OffchainLabs/prysm/v7/runtime/version"
"github.com/OffchainLabs/prysm/v7/testing/require"
"github.com/OffchainLabs/prysm/v7/time/slots"
fastssz "github.com/prysmaticlabs/fastssz"
"google.golang.org/protobuf/proto"
)

type stubBlockBody struct {
Expand Down Expand Up @@ -91,7 +92,7 @@ func (s stubBlock) Version() int { return s.v }
func (s stubBlock) AsSignRequestObject() (validatorpb.SignRequestObject, error) {
return nil, nil
}
func (s stubBlock) HashTreeRootWith(*fastssz.Hasher) error { return nil }
func (s stubBlock) HashTreeRootWith(*ssz.Hasher) error { return nil }

func buildGloasState(t *testing.T, slot primitives.Slot, proposerIdx primitives.ValidatorIndex, builderIdx primitives.BuilderIndex, balance uint64, randao [32]byte, latestHash [32]byte, builderPubkey [48]byte) *state_native.BeaconState {
t.Helper()
Expand Down
2 changes: 1 addition & 1 deletion beacon-chain/core/signing/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ go_library(
"//crypto/bls:go_default_library",
"//encoding/bytesutil:go_default_library",
"//proto/prysm/v1alpha1:go_default_library",
"@com_github_offchainlabs_methodical_ssz//ssz:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
],
)

Expand Down
12 changes: 6 additions & 6 deletions beacon-chain/core/signing/signing_root.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package signing
import (
"sync"

"github.com/OffchainLabs/methodical-ssz/ssz"
"github.com/OffchainLabs/prysm/v7/beacon-chain/state"
"github.com/OffchainLabs/prysm/v7/config/params"
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
"github.com/OffchainLabs/prysm/v7/crypto/bls"
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/pkg/errors"
fssz "github.com/prysmaticlabs/fastssz"
)

// ForkVersionByteLength length of fork version byte array.
Expand Down Expand Up @@ -55,13 +55,13 @@ const (
)

// ComputeDomainAndSign computes the domain and signing root and sign it using the passed in private key.
func ComputeDomainAndSign(st state.ReadOnlyBeaconState, epoch primitives.Epoch, obj fssz.HashRoot, domain [4]byte, key bls.SecretKey) ([]byte, error) {
func ComputeDomainAndSign(st state.ReadOnlyBeaconState, epoch primitives.Epoch, obj ssz.HashRoot, domain [4]byte, key bls.SecretKey) ([]byte, error) {
return ComputeDomainAndSignWithoutState(st.Fork(), epoch, domain, st.GenesisValidatorsRoot(), obj, key)
}

// ComputeDomainAndSignWithoutState offers the same functionality as ComputeDomainAndSign without the need to provide a BeaconState.
// This is particularly helpful for signing values in tests.
func ComputeDomainAndSignWithoutState(fork *ethpb.Fork, epoch primitives.Epoch, domain [4]byte, vr []byte, obj fssz.HashRoot, key bls.SecretKey) ([]byte, error) {
func ComputeDomainAndSignWithoutState(fork *ethpb.Fork, epoch primitives.Epoch, domain [4]byte, vr []byte, obj ssz.HashRoot, key bls.SecretKey) ([]byte, error) {
// EIP-7044: Beginning in Deneb, fix the fork version to Capella for signed exits.
// This allows for signed validator exits to be valid forever.
if domain == params.BeaconConfig().DomainVoluntaryExit && epoch >= params.BeaconConfig().DenebForkEpoch {
Expand Down Expand Up @@ -94,7 +94,7 @@ func ComputeDomainAndSignWithoutState(fork *ethpb.Fork, epoch primitives.Epoch,
// object_root=hash_tree_root(ssz_object),
// domain=domain,
// ))
func ComputeSigningRoot(object fssz.HashRoot, domain []byte) ([32]byte, error) {
func ComputeSigningRoot(object ssz.HashRoot, domain []byte) ([32]byte, error) {
return Data(object.HashTreeRoot, domain)
}

Expand All @@ -119,7 +119,7 @@ func ComputeSigningRootForRoot(root [32]byte, domain []byte) ([32]byte, error) {
}

// ComputeDomainVerifySigningRoot computes domain and verifies signing root of an object given the beacon state, validator index and signature.
func ComputeDomainVerifySigningRoot(st state.ReadOnlyBeaconState, index primitives.ValidatorIndex, epoch primitives.Epoch, obj fssz.HashRoot, domain [4]byte, sig []byte) error {
func ComputeDomainVerifySigningRoot(st state.ReadOnlyBeaconState, index primitives.ValidatorIndex, epoch primitives.Epoch, obj ssz.HashRoot, domain [4]byte, sig []byte) error {
v, err := st.ValidatorAtIndex(index)
if err != nil {
return err
Expand All @@ -132,7 +132,7 @@ func ComputeDomainVerifySigningRoot(st state.ReadOnlyBeaconState, index primitiv
}

// VerifySigningRoot verifies the signing root of an object given its public key, signature and domain.
func VerifySigningRoot(obj fssz.HashRoot, pub, signature, domain []byte) error {
func VerifySigningRoot(obj ssz.HashRoot, pub, signature, domain []byte) error {
publicKey, err := bls.PublicKeyFromBytes(pub)
if err != nil {
return errors.Wrap(err, "could not convert bytes to public key")
Expand Down
2 changes: 1 addition & 1 deletion beacon-chain/db/filesystem/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ go_test(
"//testing/require:go_default_library",
"//testing/util:go_default_library",
"//time/slots:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_offchainlabs_methodical_ssz//ssz:go_default_library",
"@com_github_spf13_afero//:go_default_library",
],
)
5 changes: 3 additions & 2 deletions beacon-chain/db/filesystem/blob_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import (
"sync"
"testing"

"github.com/OffchainLabs/methodical-ssz/ssz"
"github.com/spf13/afero"

"github.com/OffchainLabs/prysm/v7/beacon-chain/db"
"github.com/OffchainLabs/prysm/v7/beacon-chain/verification"
"github.com/OffchainLabs/prysm/v7/config/params"
Expand All @@ -16,8 +19,6 @@ import (
"github.com/OffchainLabs/prysm/v7/testing/require"
"github.com/OffchainLabs/prysm/v7/testing/util"
"github.com/OffchainLabs/prysm/v7/time/slots"
ssz "github.com/prysmaticlabs/fastssz"
"github.com/spf13/afero"
)

func TestBlobStorage_SaveBlobData(t *testing.T) {
Expand Down
3 changes: 2 additions & 1 deletion beacon-chain/db/kv/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ go_library(
"@com_github_ethereum_go_ethereum//common:go_default_library",
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
"@com_github_golang_snappy//:go_default_library",
"@com_github_offchainlabs_methodical_ssz//ssz:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_prysmaticlabs_prombbolt//:go_default_library",
"@com_github_schollz_progressbar_v3//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
Expand Down Expand Up @@ -132,6 +132,7 @@ go_test(
"//config/params:go_default_library",
"//consensus-types/blocks:go_default_library",
"//consensus-types/interfaces:go_default_library",
"//consensus-types/interfaces/testing:go_default_library",
"//consensus-types/light-client:go_default_library",
"//consensus-types/primitives:go_default_library",
"//encoding/bytesutil:go_default_library",
Expand Down
11 changes: 6 additions & 5 deletions beacon-chain/db/kv/blocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ import (
"fmt"
"slices"

"github.com/OffchainLabs/methodical-ssz/ssz"
"github.com/ethereum/go-ethereum/common"
"github.com/golang/snappy"
"github.com/pkg/errors"
bolt "go.etcd.io/bbolt"

"github.com/OffchainLabs/prysm/v7/beacon-chain/db/filters"
"github.com/OffchainLabs/prysm/v7/config/params"
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
Expand All @@ -17,11 +23,6 @@ import (
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/OffchainLabs/prysm/v7/runtime/version"
"github.com/OffchainLabs/prysm/v7/time/slots"
"github.com/ethereum/go-ethereum/common"
"github.com/golang/snappy"
"github.com/pkg/errors"
ssz "github.com/prysmaticlabs/fastssz"
bolt "go.etcd.io/bbolt"
)

// Used to represent errors for inconsistent slot ranges.
Expand Down
11 changes: 6 additions & 5 deletions beacon-chain/db/kv/encoding.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import (
"errors"
"reflect"

"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/OffchainLabs/methodical-ssz/ssz"
"github.com/golang/snappy"
fastssz "github.com/prysmaticlabs/fastssz"
"google.golang.org/protobuf/proto"

"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
)

func decode(ctx context.Context, data []byte, dst proto.Message) error {
Expand All @@ -25,7 +26,7 @@ func decode(ctx context.Context, data []byte, dst proto.Message) error {
return err
}
if isSSZStorageFormat(dst) {
return dst.(fastssz.Unmarshaler).UnmarshalSSZ(data)
return dst.(ssz.Unmarshaler).UnmarshalSSZ(data)
}
return proto.Unmarshal(data, dst)
}
Expand All @@ -44,7 +45,7 @@ func encode(ctx context.Context, msg proto.Message) ([]byte, error) {
var enc []byte
var err error
if isSSZStorageFormat(msg) {
enc, err = msg.(fastssz.Marshaler).MarshalSSZ()
enc, err = msg.(ssz.Marshaler).MarshalSSZ()
if err != nil {
return nil, err
}
Expand Down
27 changes: 12 additions & 15 deletions beacon-chain/db/kv/kv_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/OffchainLabs/prysm/v7/cmd/beacon-chain/flags"
"github.com/OffchainLabs/prysm/v7/config/features"
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
interfacestest "github.com/OffchainLabs/prysm/v7/consensus-types/interfaces/testing"
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
"github.com/OffchainLabs/prysm/v7/runtime/version"
"github.com/OffchainLabs/prysm/v7/testing/require"
Expand All @@ -19,15 +19,6 @@ import (
bolt "go.etcd.io/bbolt"
)

func requireBlocksEqual(t testing.TB, want, got interfaces.ReadOnlySignedBeaconBlock) {
wantPb, err := want.Proto()
require.NoError(t, err)

gotPb, err := got.Proto()
require.NoError(t, err)
require.DeepEqual(t, wantPb, gotPb)
}

// setupDB instantiates and returns a Store instance.
func setupDB(t testing.TB) *Store {
db, err := NewKVStore(t.Context(), t.TempDir())
Expand Down Expand Up @@ -161,8 +152,14 @@ func Test_setupBlockStorageType(t *testing.T) {
require.NoError(t, store.SaveHeadBlockRoot(ctx, root))
retrievedBlk, err := store.Block(ctx, root)
require.NoError(t, err)
if retrievedBlk == nil {
t.Fatal("retrieved block is nil")
}
rRoot, err := retrievedBlk.Block().HashTreeRoot()
require.NoError(t, err)
require.Equal(t, root, rRoot)
require.Equal(t, false, retrievedBlk.IsBlinded())
requireBlocksEqual(t, wrappedBlock, retrievedBlk)
interfacestest.RequireBlocksEqual(t, wrappedBlock, retrievedBlk)
})
t.Run("fresh database with default settings should store blinded", func(t *testing.T) {
resetFn := features.InitWithReset(&features.Flags{
Expand All @@ -186,7 +183,7 @@ func Test_setupBlockStorageType(t *testing.T) {

wantedBlk, err := wrappedBlock.ToBlinded()
require.NoError(t, err)
requireBlocksEqual(t, wantedBlk, retrievedBlk)
interfacestest.RequireBlocksEqual(t, wantedBlk, retrievedBlk)
})
t.Run("existing database with blinded blocks but no key in metadata bucket should continue storing blinded blocks", func(t *testing.T) {
store := setupDB(t)
Expand All @@ -206,7 +203,7 @@ func Test_setupBlockStorageType(t *testing.T) {
retrievedBlk, err := store.Block(ctx, root)
require.NoError(t, err)
require.Equal(t, true, retrievedBlk.IsBlinded())
requireBlocksEqual(t, wrappedBlock, retrievedBlk)
interfacestest.RequireBlocksEqual(t, wrappedBlock, retrievedBlk)

// We then delete the key from the bucket.
require.NoError(t, store.db.Update(func(tx *bolt.Tx) error {
Expand Down Expand Up @@ -272,7 +269,7 @@ func Test_setupBlockStorageType(t *testing.T) {
retrievedBlk, err := store.Block(ctx, root)
require.NoError(t, err)
require.Equal(t, false, retrievedBlk.IsBlinded())
requireBlocksEqual(t, wrappedBlock, retrievedBlk)
interfacestest.RequireBlocksEqual(t, wrappedBlock, retrievedBlk)

// Not a fresh database, has full blocks already and should continue being that way.
err = store.setupBlockStorageType(ctx)
Expand Down Expand Up @@ -318,7 +315,7 @@ func Test_setupBlockStorageType(t *testing.T) {
require.Equal(t, true, retrievedBlk.IsBlinded())
wantedBlk, err := wrappedBlock.ToBlinded()
require.NoError(t, err)
requireBlocksEqual(t, wantedBlk, retrievedBlk)
interfacestest.RequireBlocksEqual(t, wantedBlk, retrievedBlk)

// Trying to enable full blocks with a database that is already storing blinded blocks should error.
resetFn := features.InitWithReset(&features.Flags{
Expand Down
2 changes: 0 additions & 2 deletions beacon-chain/db/slasherkv/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ go_library(
"@com_github_pkg_errors//:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@io_etcd_go_bbolt//:go_default_library",
"@org_golang_x_sync//errgroup:go_default_library",
Expand All @@ -55,7 +54,6 @@ go_test(
"//runtime/version:go_default_library",
"//testing/require:go_default_library",
"//time/slots:go_default_library",
"@com_github_prysmaticlabs_fastssz//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_sirupsen_logrus//hooks/test:go_default_library",
"@io_etcd_go_bbolt//:go_default_library",
Expand Down
Loading
Loading