From 244e670b71001791d2cf0fa22a8df4bbcafc82c0 Mon Sep 17 00:00:00 2001 From: Raul Jordan Date: Fri, 20 May 2022 23:29:16 +0000 Subject: [PATCH] Move BeaconBlockNil Checker Function to Consensus-Types/Wrapper Package (#10731) * beacon block is nil wrapper * gaz Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> --- beacon-chain/blockchain/BUILD.bazel | 1 + beacon-chain/blockchain/execution_engine.go | 3 ++- beacon-chain/blockchain/head.go | 5 +++-- .../blockchain/init_sync_process_block.go | 4 ++-- beacon-chain/blockchain/pow_block.go | 4 ++-- .../blockchain/process_attestation_helpers.go | 4 ++-- beacon-chain/blockchain/process_block.go | 5 +++-- beacon-chain/blockchain/service.go | 3 ++- beacon-chain/core/altair/BUILD.bazel | 1 + beacon-chain/core/altair/attestation.go | 3 ++- beacon-chain/core/blocks/attestation.go | 3 ++- beacon-chain/core/blocks/header.go | 3 ++- beacon-chain/core/blocks/randao.go | 4 ++-- beacon-chain/core/helpers/BUILD.bazel | 1 - beacon-chain/core/helpers/block.go | 21 ------------------- beacon-chain/core/transition/BUILD.bazel | 1 + beacon-chain/core/transition/transition.go | 6 +++--- .../transition/transition_no_verify_sig.go | 8 +++---- beacon-chain/db/kv/BUILD.bazel | 1 - beacon-chain/db/kv/backup.go | 4 ++-- beacon-chain/db/kv/finalized_block_roots.go | 4 ++-- beacon-chain/db/kv/state.go | 3 +-- beacon-chain/rpc/eth/beacon/blocks.go | 6 +++--- .../rpc/prysm/v1alpha1/beacon/BUILD.bazel | 1 + .../rpc/prysm/v1alpha1/beacon/blocks.go | 10 ++++----- .../validator/proposer_execution_payload.go | 3 ++- beacon-chain/rpc/statefetcher/BUILD.bazel | 2 +- beacon-chain/rpc/statefetcher/fetcher.go | 10 ++++----- beacon-chain/state/stategen/BUILD.bazel | 2 +- beacon-chain/state/stategen/getter.go | 4 ++-- beacon-chain/state/stategen/history.go | 6 +++--- beacon-chain/state/stategen/replay.go | 4 ++-- beacon-chain/sync/backfill/BUILD.bazel | 3 +-- beacon-chain/sync/backfill/status.go | 6 +++--- beacon-chain/sync/backfill/status_test.go | 5 ++--- beacon-chain/sync/pending_blocks_queue.go | 6 +++--- beacon-chain/sync/subscriber_beacon_blocks.go | 2 +- beacon-chain/sync/validate_beacon_blocks.go | 3 ++- consensus-types/wrapper/beacon_block.go | 21 ++++++++++++++++++- testing/endtoend/evaluators/fork.go | 5 ++--- 40 files changed, 98 insertions(+), 93 deletions(-) diff --git a/beacon-chain/blockchain/BUILD.bazel b/beacon-chain/blockchain/BUILD.bazel index e1e12df81a..119058394c 100644 --- a/beacon-chain/blockchain/BUILD.bazel +++ b/beacon-chain/blockchain/BUILD.bazel @@ -66,6 +66,7 @@ go_library( "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//crypto/bls:go_default_library", "//encoding/bytesutil:go_default_library", "//math:go_default_library", diff --git a/beacon-chain/blockchain/execution_engine.go b/beacon-chain/blockchain/execution_engine.go index 9603c95a7e..bbd6380377 100644 --- a/beacon-chain/blockchain/execution_engine.go +++ b/beacon-chain/blockchain/execution_engine.go @@ -16,6 +16,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" enginev1 "github.com/prysmaticlabs/prysm/proto/engine/v1" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" @@ -168,7 +169,7 @@ func (s *Service) notifyNewPayload(ctx context.Context, postStateVersion int, if blocks.IsPreBellatrixVersion(postStateVersion) { return true, nil } - if err := helpers.BeaconBlockIsNil(blk); err != nil { + if err := wrapper.BeaconBlockIsNil(blk); err != nil { return false, err } body := blk.Block().Body() diff --git a/beacon-chain/blockchain/head.go b/beacon-chain/blockchain/head.go index 92ee6017a3..c08f50ac99 100644 --- a/beacon-chain/blockchain/head.go +++ b/beacon-chain/blockchain/head.go @@ -17,6 +17,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" ethpbv1 "github.com/prysmaticlabs/prysm/proto/eth/v1" "github.com/prysmaticlabs/prysm/time/slots" @@ -117,7 +118,7 @@ func (s *Service) saveHead(ctx context.Context, headRoot [32]byte, headBlock int if headRoot == bytesutil.ToBytes32(r) { return nil } - if err := helpers.BeaconBlockIsNil(headBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(headBlock); err != nil { return err } if headState == nil || headState.IsNil() { @@ -190,7 +191,7 @@ func (s *Service) saveHead(ctx context.Context, headRoot [32]byte, headBlock int // root in DB. With the inception of initial-sync-cache-state flag, it uses finalized // check point as anchors to resume sync therefore head is no longer needed to be saved on per slot basis. func (s *Service) saveHeadNoDB(ctx context.Context, b interfaces.SignedBeaconBlock, r [32]byte, hs state.BeaconState) error { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return err } cachedHeadRoot, err := s.HeadRoot(ctx) diff --git a/beacon-chain/blockchain/init_sync_process_block.go b/beacon-chain/blockchain/init_sync_process_block.go index d27e6dc864..23c036e4a1 100644 --- a/beacon-chain/blockchain/init_sync_process_block.go +++ b/beacon-chain/blockchain/init_sync_process_block.go @@ -4,8 +4,8 @@ import ( "context" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" ) var errBlockNotFoundInCacheOrDB = errors.New("block not found in cache or db") @@ -49,7 +49,7 @@ func (s *Service) getBlock(ctx context.Context, r [32]byte) (interfaces.SignedBe return nil, errors.Wrap(err, "could not retrieve block from db") } } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, errBlockNotFoundInCacheOrDB } return b, nil diff --git a/beacon-chain/blockchain/pow_block.go b/beacon-chain/blockchain/pow_block.go index 42c305228f..444a88dd64 100644 --- a/beacon-chain/blockchain/pow_block.go +++ b/beacon-chain/blockchain/pow_block.go @@ -10,10 +10,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/holiman/uint256" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" enginev1 "github.com/prysmaticlabs/prysm/proto/engine/v1" "github.com/prysmaticlabs/prysm/time/slots" @@ -38,7 +38,7 @@ import ( // # Check if `pow_block` is a valid terminal PoW block // assert is_valid_terminal_pow_block(pow_block, pow_parent) func (s *Service) validateMergeBlock(ctx context.Context, b interfaces.SignedBeaconBlock) error { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return err } payload, err := b.Block().Body().ExecutionPayload() diff --git a/beacon-chain/blockchain/process_attestation_helpers.go b/beacon-chain/blockchain/process_attestation_helpers.go index 487316df87..213f5216a6 100644 --- a/beacon-chain/blockchain/process_attestation_helpers.go +++ b/beacon-chain/blockchain/process_attestation_helpers.go @@ -7,11 +7,11 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/async" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/transition" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/time/slots" @@ -80,7 +80,7 @@ func (s *Service) verifyBeaconBlock(ctx context.Context, data *ethpb.Attestation if err != nil { return err } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return err } if b.Block().Slot() > data.Slot { diff --git a/beacon-chain/blockchain/process_block.go b/beacon-chain/blockchain/process_block.go index 89064badb3..84654a2a18 100644 --- a/beacon-chain/blockchain/process_block.go +++ b/beacon-chain/blockchain/process_block.go @@ -18,6 +18,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/crypto/bls" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "github.com/prysmaticlabs/prysm/monitoring/tracing" @@ -92,7 +93,7 @@ var initialSyncBlockCacheSize = uint64(2 * params.BeaconConfig().SlotsPerEpoch) func (s *Service) onBlock(ctx context.Context, signed interfaces.SignedBeaconBlock, blockRoot [32]byte) error { ctx, span := trace.StartSpan(ctx, "blockChain.onBlock") defer span.End() - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return invalidBlock{err} } b := signed.Block() @@ -330,7 +331,7 @@ func (s *Service) onBlockBatch(ctx context.Context, blks []interfaces.SignedBeac return nil, nil, errWrongBlockCount } - if err := helpers.BeaconBlockIsNil(blks[0]); err != nil { + if err := wrapper.BeaconBlockIsNil(blks[0]); err != nil { return nil, nil, invalidBlock{err} } b := blks[0].Block() diff --git a/beacon-chain/blockchain/service.go b/beacon-chain/blockchain/service.go index cb094cf9fd..be5e5ca0b4 100644 --- a/beacon-chain/blockchain/service.go +++ b/beacon-chain/blockchain/service.go @@ -35,6 +35,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" prysmTime "github.com/prysmaticlabs/prysm/time" @@ -270,7 +271,7 @@ func (s *Service) originRootFromSavedState(ctx context.Context) ([32]byte, error if err != nil { return originRoot, errors.Wrap(err, "could not get genesis block from db") } - if err := helpers.BeaconBlockIsNil(genesisBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(genesisBlock); err != nil { return originRoot, err } genesisBlkRoot, err := genesisBlock.Block().HashTreeRoot() diff --git a/beacon-chain/core/altair/BUILD.bazel b/beacon-chain/core/altair/BUILD.bazel index 2b996c7d8a..dbe46a4d33 100644 --- a/beacon-chain/core/altair/BUILD.bazel +++ b/beacon-chain/core/altair/BUILD.bazel @@ -35,6 +35,7 @@ go_library( "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//crypto/bls:go_default_library", "//crypto/hash:go_default_library", "//encoding/bytesutil:go_default_library", diff --git a/beacon-chain/core/altair/attestation.go b/beacon-chain/core/altair/attestation.go index fa3bf46036..cf6c109156 100644 --- a/beacon-chain/core/altair/attestation.go +++ b/beacon-chain/core/altair/attestation.go @@ -13,6 +13,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/attestation" "go.opencensus.io/trace" @@ -25,7 +26,7 @@ func ProcessAttestationsNoVerifySignature( beaconState state.BeaconState, b interfaces.SignedBeaconBlock, ) (state.BeaconState, error) { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } body := b.Block().Body() diff --git a/beacon-chain/core/blocks/attestation.go b/beacon-chain/core/blocks/attestation.go index d96ce28caa..bcc0ee0d32 100644 --- a/beacon-chain/core/blocks/attestation.go +++ b/beacon-chain/core/blocks/attestation.go @@ -12,6 +12,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/crypto/bls" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/attestation" @@ -25,7 +26,7 @@ func ProcessAttestationsNoVerifySignature( beaconState state.BeaconState, b interfaces.SignedBeaconBlock, ) (state.BeaconState, error) { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } body := b.Block().Body() diff --git a/beacon-chain/core/blocks/header.go b/beacon-chain/core/blocks/header.go index 1d97a0e88e..2e2aba3558 100644 --- a/beacon-chain/core/blocks/header.go +++ b/beacon-chain/core/blocks/header.go @@ -10,6 +10,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" ) @@ -43,7 +44,7 @@ func ProcessBlockHeader( beaconState state.BeaconState, block interfaces.SignedBeaconBlock, ) (state.BeaconState, error) { - if err := helpers.BeaconBlockIsNil(block); err != nil { + if err := wrapper.BeaconBlockIsNil(block); err != nil { return nil, err } bodyRoot, err := block.Block().Body().HashTreeRoot() diff --git a/beacon-chain/core/blocks/randao.go b/beacon-chain/core/blocks/randao.go index 7f89aaf80e..a3dba538a8 100644 --- a/beacon-chain/core/blocks/randao.go +++ b/beacon-chain/core/blocks/randao.go @@ -4,10 +4,10 @@ import ( "context" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/crypto/hash" "github.com/prysmaticlabs/prysm/time/slots" ) @@ -31,7 +31,7 @@ func ProcessRandao( beaconState state.BeaconState, b interfaces.SignedBeaconBlock, ) (state.BeaconState, error) { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } body := b.Block().Body() diff --git a/beacon-chain/core/helpers/BUILD.bazel b/beacon-chain/core/helpers/BUILD.bazel index a346b40216..bdd8600d79 100644 --- a/beacon-chain/core/helpers/BUILD.bazel +++ b/beacon-chain/core/helpers/BUILD.bazel @@ -22,7 +22,6 @@ go_library( "//beacon-chain/state:go_default_library", "//config/fieldparams:go_default_library", "//config/params:go_default_library", - "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", "//container/slice:go_default_library", "//container/trie:go_default_library", diff --git a/beacon-chain/core/helpers/block.go b/beacon-chain/core/helpers/block.go index d6f79d8dc2..040c6ca6b3 100644 --- a/beacon-chain/core/helpers/block.go +++ b/beacon-chain/core/helpers/block.go @@ -6,31 +6,10 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" - "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" "github.com/prysmaticlabs/prysm/time/slots" ) -var ErrNilSignedBeaconBlock = errors.New("signed beacon block can't be nil") -var ErrNilBeaconBlock = errors.New("beacon block can't be nil") -var ErrNilBeaconBlockBody = errors.New("beacon block body can't be nil") - -// BeaconBlockIsNil checks if any composite field of input signed beacon block is nil. -// Access to these nil fields will result in run time panic, -// it is recommended to run these checks as first line of defense. -func BeaconBlockIsNil(b interfaces.SignedBeaconBlock) error { - if b == nil || b.IsNil() { - return ErrNilSignedBeaconBlock - } - if b.Block().IsNil() { - return ErrNilBeaconBlock - } - if b.Block().Body().IsNil() { - return ErrNilBeaconBlockBody - } - return nil -} - // BlockRootAtSlot returns the block root stored in the BeaconState for a recent slot. // It returns an error if the requested block root is not within the slot range. // diff --git a/beacon-chain/core/transition/BUILD.bazel b/beacon-chain/core/transition/BUILD.bazel index 0ea47dfd77..9ddac2e68e 100644 --- a/beacon-chain/core/transition/BUILD.bazel +++ b/beacon-chain/core/transition/BUILD.bazel @@ -38,6 +38,7 @@ go_library( "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//crypto/bls:go_default_library", "//crypto/hash:go_default_library", "//encoding/bytesutil:go_default_library", diff --git a/beacon-chain/core/transition/transition.go b/beacon-chain/core/transition/transition.go index ea69cc9f42..7f6961f93f 100644 --- a/beacon-chain/core/transition/transition.go +++ b/beacon-chain/core/transition/transition.go @@ -14,12 +14,12 @@ import ( e "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch" "github.com/prysmaticlabs/prysm/beacon-chain/core/epoch/precompute" "github.com/prysmaticlabs/prysm/beacon-chain/core/execution" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/time" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/math" "github.com/prysmaticlabs/prysm/monitoring/tracing" "github.com/prysmaticlabs/prysm/runtime/version" @@ -52,7 +52,7 @@ func ExecuteStateTransition( if ctx.Err() != nil { return nil, ctx.Err() } - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return nil, err } @@ -296,7 +296,7 @@ func ProcessSlots(ctx context.Context, state state.BeaconState, slot types.Slot) // VerifyOperationLengths verifies that block operation lengths are valid. func VerifyOperationLengths(_ context.Context, state state.BeaconState, b interfaces.SignedBeaconBlock) (state.BeaconState, error) { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } body := b.Block().Body() diff --git a/beacon-chain/core/transition/transition_no_verify_sig.go b/beacon-chain/core/transition/transition_no_verify_sig.go index 3e44b6f931..106bc2647b 100644 --- a/beacon-chain/core/transition/transition_no_verify_sig.go +++ b/beacon-chain/core/transition/transition_no_verify_sig.go @@ -8,11 +8,11 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/beacon-chain/core/altair" b "github.com/prysmaticlabs/prysm/beacon-chain/core/blocks" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/core/transition/interop" v "github.com/prysmaticlabs/prysm/beacon-chain/core/validators" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/crypto/bls" "github.com/prysmaticlabs/prysm/monitoring/tracing" "github.com/prysmaticlabs/prysm/runtime/version" @@ -160,7 +160,7 @@ func ProcessBlockNoVerifyAnySig( ) (*bls.SignatureBatch, state.BeaconState, error) { ctx, span := trace.StartSpan(ctx, "core.state.ProcessBlockNoVerifyAnySig") defer span.End() - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return nil, nil, err } @@ -223,7 +223,7 @@ func ProcessOperationsNoVerifyAttsSigs( signedBeaconBlock interfaces.SignedBeaconBlock) (state.BeaconState, error) { ctx, span := trace.StartSpan(ctx, "core.state.ProcessOperationsNoVerifyAttsSigs") defer span.End() - if err := helpers.BeaconBlockIsNil(signedBeaconBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(signedBeaconBlock); err != nil { return nil, err } @@ -269,7 +269,7 @@ func ProcessBlockForStateRoot( ) (state.BeaconState, error) { ctx, span := trace.StartSpan(ctx, "core.state.ProcessBlockForStateRoot") defer span.End() - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return nil, err } diff --git a/beacon-chain/db/kv/BUILD.bazel b/beacon-chain/db/kv/BUILD.bazel index c079664494..607856fe53 100644 --- a/beacon-chain/db/kv/BUILD.bazel +++ b/beacon-chain/db/kv/BUILD.bazel @@ -35,7 +35,6 @@ go_library( ], deps = [ "//beacon-chain/core/blocks:go_default_library", - "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/db/filters:go_default_library", "//beacon-chain/db/iface:go_default_library", "//beacon-chain/state:go_default_library", diff --git a/beacon-chain/db/kv/backup.go b/beacon-chain/db/kv/backup.go index dae9393604..f706c6888d 100644 --- a/beacon-chain/db/kv/backup.go +++ b/beacon-chain/db/kv/backup.go @@ -5,8 +5,8 @@ import ( "fmt" "path" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/config/params" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/io/file" bolt "go.etcd.io/bbolt" "go.opencensus.io/trace" @@ -34,7 +34,7 @@ func (s *Store) Backup(ctx context.Context, outputDir string, permissionOverride if err != nil { return err } - if err := helpers.BeaconBlockIsNil(head); err != nil { + if err := wrapper.BeaconBlockIsNil(head); err != nil { return err } // Ensure the backups directory exists. diff --git a/beacon-chain/db/kv/finalized_block_roots.go b/beacon-chain/db/kv/finalized_block_roots.go index bde5313883..42d51440f7 100644 --- a/beacon-chain/db/kv/finalized_block_roots.go +++ b/beacon-chain/db/kv/finalized_block_roots.go @@ -4,9 +4,9 @@ import ( "bytes" "context" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "github.com/prysmaticlabs/prysm/monitoring/tracing" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" @@ -84,7 +84,7 @@ func (s *Store) updateFinalizedBlockRoots(ctx context.Context, tx *bolt.Tx, chec tracing.AnnotateError(span, err) return err } - if err := helpers.BeaconBlockIsNil(signedBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(signedBlock); err != nil { tracing.AnnotateError(span, err) return err } diff --git a/beacon-chain/db/kv/state.go b/beacon-chain/db/kv/state.go index e606fe4677..2f15b471e6 100644 --- a/beacon-chain/db/kv/state.go +++ b/beacon-chain/db/kv/state.go @@ -7,7 +7,6 @@ import ( "github.com/golang/snappy" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state/genesis" state_native "github.com/prysmaticlabs/prysm/beacon-chain/state/state-native" @@ -664,7 +663,7 @@ func (s *Store) slotByBlockRoot(ctx context.Context, tx *bolt.Tx, blockRoot []by if err != nil { return 0, err } - if err := helpers.BeaconBlockIsNil(wsb); err != nil { + if err := wrapper.BeaconBlockIsNil(wsb); err != nil { return 0, err } return b.Block.Slot, nil diff --git a/beacon-chain/rpc/eth/beacon/blocks.go b/beacon-chain/rpc/eth/beacon/blocks.go index 3554218a7d..30d198d41b 100644 --- a/beacon-chain/rpc/eth/beacon/blocks.go +++ b/beacon-chain/rpc/eth/beacon/blocks.go @@ -584,7 +584,7 @@ func (bs *Server) GetBlockRoot(ctx context.Context, req *ethpbv1.BlockRequest) ( if err != nil { return nil, status.Errorf(codes.Internal, "Could not retrieve blocks for genesis slot: %v", err) } - if err := helpers.BeaconBlockIsNil(blk); err != nil { + if err := wrapper.BeaconBlockIsNil(blk); err != nil { return nil, status.Errorf(codes.NotFound, "Could not find genesis block: %v", err) } blkRoot, err := blk.Block().HashTreeRoot() @@ -598,7 +598,7 @@ func (bs *Server) GetBlockRoot(ctx context.Context, req *ethpbv1.BlockRequest) ( if err != nil { return nil, status.Errorf(codes.Internal, "Could not retrieve block for block root %#x: %v", req.BlockId, err) } - if err := helpers.BeaconBlockIsNil(blk); err != nil { + if err := wrapper.BeaconBlockIsNil(blk); err != nil { return nil, status.Errorf(codes.NotFound, "Could not find block: %v", err) } root = req.BlockId @@ -793,7 +793,7 @@ func handleGetBlockError(blk interfaces.SignedBeaconBlock, err error) error { if err != nil { return status.Errorf(codes.Internal, "Could not get block from block ID: %v", err) } - if err := helpers.BeaconBlockIsNil(blk); err != nil { + if err := wrapper.BeaconBlockIsNil(blk); err != nil { return status.Errorf(codes.NotFound, "Could not find requested block: %v", err) } return nil diff --git a/beacon-chain/rpc/prysm/v1alpha1/beacon/BUILD.bazel b/beacon-chain/rpc/prysm/v1alpha1/beacon/BUILD.bazel index ee5684271e..a07c1005f7 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/beacon/BUILD.bazel +++ b/beacon-chain/rpc/prysm/v1alpha1/beacon/BUILD.bazel @@ -47,6 +47,7 @@ go_library( "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//container/slice:go_default_library", "//encoding/bytesutil:go_default_library", "//proto/prysm/v1alpha1:go_default_library", diff --git a/beacon-chain/rpc/prysm/v1alpha1/beacon/blocks.go b/beacon-chain/rpc/prysm/v1alpha1/beacon/blocks.go index 83ccc0779b..0959bde31e 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/beacon/blocks.go +++ b/beacon-chain/rpc/prysm/v1alpha1/beacon/blocks.go @@ -11,11 +11,11 @@ import ( "github.com/prysmaticlabs/prysm/beacon-chain/core/feed" blockfeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/block" statefeed "github.com/prysmaticlabs/prysm/beacon-chain/core/feed/state" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/cmd" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/runtime/version" @@ -250,7 +250,7 @@ func (bs *Server) listBlocksForGenesis(ctx context.Context, _ *ethpb.ListBlocksR if err != nil { return nil, 0, strconv.Itoa(0), status.Errorf(codes.Internal, "Could not retrieve blocks for genesis slot: %v", err) } - if err := helpers.BeaconBlockIsNil(genBlk); err != nil { + if err := wrapper.BeaconBlockIsNil(genBlk); err != nil { return []blockContainer{}, 0, strconv.Itoa(0), status.Errorf(codes.NotFound, "Could not find genesis block: %v", err) } root, err := genBlk.Block().HashTreeRoot() @@ -393,7 +393,7 @@ func (bs *Server) chainHeadRetrieval(ctx context.Context) (*ethpb.ChainHead, err if err != nil { return nil, status.Error(codes.Internal, "Could not get head block") } - if err := helpers.BeaconBlockIsNil(headBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(headBlock); err != nil { return nil, status.Errorf(codes.NotFound, "Head block of chain was nil: %v", err) } headBlockRoot, err := headBlock.Block().HashTreeRoot() @@ -409,7 +409,7 @@ func (bs *Server) chainHeadRetrieval(ctx context.Context) (*ethpb.ChainHead, err } // Retrieve genesis block in the event we have genesis checkpoints. genBlock, err := bs.BeaconDB.GenesisBlock(ctx) - if err != nil || helpers.BeaconBlockIsNil(genBlock) != nil { + if err != nil || wrapper.BeaconBlockIsNil(genBlock) != nil { return status.Error(codes.Internal, "Could not get genesis block") } validGenesis = true @@ -419,7 +419,7 @@ func (bs *Server) chainHeadRetrieval(ctx context.Context) (*ethpb.ChainHead, err if err != nil { return status.Errorf(codes.Internal, "Could not get %s block: %v", name, err) } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return status.Errorf(codes.Internal, "Could not get %s block: %v", name, err) } return nil diff --git a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_execution_payload.go b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_execution_payload.go index bdedd0759d..d9ae6d83d4 100644 --- a/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_execution_payload.go +++ b/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_execution_payload.go @@ -16,6 +16,7 @@ import ( fieldparams "github.com/prysmaticlabs/prysm/config/fieldparams" "github.com/prysmaticlabs/prysm/config/params" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" enginev1 "github.com/prysmaticlabs/prysm/proto/engine/v1" "github.com/prysmaticlabs/prysm/runtime/version" @@ -98,7 +99,7 @@ func (vs *Server) getExecutionPayload(ctx context.Context, slot types.Slot, vIdx if err != nil { return nil, err } - if err := helpers.BeaconBlockIsNil(finalizedBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(finalizedBlock); err != nil { return nil, err } switch finalizedBlock.Version() { diff --git a/beacon-chain/rpc/statefetcher/BUILD.bazel b/beacon-chain/rpc/statefetcher/BUILD.bazel index 174a802e49..abc7ba2aae 100644 --- a/beacon-chain/rpc/statefetcher/BUILD.bazel +++ b/beacon-chain/rpc/statefetcher/BUILD.bazel @@ -7,12 +7,12 @@ go_library( visibility = ["//beacon-chain:__subpackages__"], deps = [ "//beacon-chain/blockchain:go_default_library", - "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/db:go_default_library", "//beacon-chain/state:go_default_library", "//beacon-chain/state/stategen:go_default_library", "//config/params:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//encoding/bytesutil:go_default_library", "@com_github_pkg_errors//:go_default_library", "@io_opencensus_go//trace:go_default_library", diff --git a/beacon-chain/rpc/statefetcher/fetcher.go b/beacon-chain/rpc/statefetcher/fetcher.go index 3886317d15..831f9b20fc 100644 --- a/beacon-chain/rpc/statefetcher/fetcher.go +++ b/beacon-chain/rpc/statefetcher/fetcher.go @@ -9,12 +9,12 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/beacon-chain/blockchain" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/beacon-chain/state/stategen" "github.com/prysmaticlabs/prysm/config/params" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "go.opencensus.io/trace" ) @@ -223,7 +223,7 @@ func (p *StateProvider) headStateRoot(ctx context.Context) ([]byte, error) { if err != nil { return nil, errors.Wrap(err, "could not get head block") } - if err = helpers.BeaconBlockIsNil(b); err != nil { + if err = wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } return b.Block().StateRoot(), nil @@ -234,7 +234,7 @@ func (p *StateProvider) genesisStateRoot(ctx context.Context) ([]byte, error) { if err != nil { return nil, errors.Wrap(err, "could not get genesis block") } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } return b.Block().StateRoot(), nil @@ -249,7 +249,7 @@ func (p *StateProvider) finalizedStateRoot(ctx context.Context) ([]byte, error) if err != nil { return nil, errors.Wrap(err, "could not get finalized block") } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } return b.Block().StateRoot(), nil @@ -264,7 +264,7 @@ func (p *StateProvider) justifiedStateRoot(ctx context.Context) ([]byte, error) if err != nil { return nil, errors.Wrap(err, "could not get justified block") } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } return b.Block().StateRoot(), nil diff --git a/beacon-chain/state/stategen/BUILD.bazel b/beacon-chain/state/stategen/BUILD.bazel index c18758b012..da9dcb2fe8 100644 --- a/beacon-chain/state/stategen/BUILD.bazel +++ b/beacon-chain/state/stategen/BUILD.bazel @@ -22,7 +22,6 @@ go_library( deps = [ "//beacon-chain/core/altair:go_default_library", "//beacon-chain/core/execution:go_default_library", - "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/core/time:go_default_library", "//beacon-chain/core/transition:go_default_library", "//beacon-chain/db:go_default_library", @@ -33,6 +32,7 @@ go_library( "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "//encoding/bytesutil:go_default_library", "//monitoring/tracing:go_default_library", "//proto/prysm/v1alpha1:go_default_library", diff --git a/beacon-chain/state/stategen/getter.go b/beacon-chain/state/stategen/getter.go index bde4a83500..de89ba7621 100644 --- a/beacon-chain/state/stategen/getter.go +++ b/beacon-chain/state/stategen/getter.go @@ -4,10 +4,10 @@ import ( "context" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "go.opencensus.io/trace" @@ -227,7 +227,7 @@ func (s *State) LastAncestorState(ctx context.Context, blockRoot [32]byte) (stat if err != nil { return nil, err } - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return nil, err } diff --git a/beacon-chain/state/stategen/history.go b/beacon-chain/state/stategen/history.go index 1b61022580..1af93a6936 100644 --- a/beacon-chain/state/stategen/history.go +++ b/beacon-chain/state/stategen/history.go @@ -5,12 +5,12 @@ import ( "fmt" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "go.opencensus.io/trace" ) @@ -94,7 +94,7 @@ func (c *CanonicalHistory) BlockForSlot(ctx context.Context, target types.Slot) // performing null/validity checks, and using CanonicalChecker to only pick canonical blocks. func (c *CanonicalHistory) bestForSlot(ctx context.Context, hbs []interfaces.SignedBeaconBlock) ([32]byte, interfaces.SignedBeaconBlock, error) { for _, b := range hbs { - if helpers.BeaconBlockIsNil(b) != nil { + if wrapper.BeaconBlockIsNil(b) != nil { continue } root, err := b.Block().HashTreeRoot() @@ -188,7 +188,7 @@ func (c *CanonicalHistory) ancestorChain(ctx context.Context, tail interfaces.Si msg := fmt.Sprintf("db error when retrieving parent of block at slot=%d by root=%#x", b.Slot(), b.ParentRoot()) return nil, nil, errors.Wrap(err, msg) } - if helpers.BeaconBlockIsNil(parent) != nil { + if wrapper.BeaconBlockIsNil(parent) != nil { msg := fmt.Sprintf("unable to retrieve parent of block at slot=%d by root=%#x", b.Slot(), b.ParentRoot()) return nil, nil, errors.Wrap(db.ErrNotFound, msg) } diff --git a/beacon-chain/state/stategen/replay.go b/beacon-chain/state/stategen/replay.go index cce7bea044..d12cedcc4e 100644 --- a/beacon-chain/state/stategen/replay.go +++ b/beacon-chain/state/stategen/replay.go @@ -8,13 +8,13 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/beacon-chain/core/altair" "github.com/prysmaticlabs/prysm/beacon-chain/core/execution" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" prysmtime "github.com/prysmaticlabs/prysm/beacon-chain/core/time" "github.com/prysmaticlabs/prysm/beacon-chain/core/transition" "github.com/prysmaticlabs/prysm/beacon-chain/db/filters" "github.com/prysmaticlabs/prysm/beacon-chain/state" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "github.com/prysmaticlabs/prysm/monitoring/tracing" "github.com/prysmaticlabs/prysm/runtime/version" @@ -146,7 +146,7 @@ func executeStateTransitionStateGen( if ctx.Err() != nil { return nil, ctx.Err() } - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return nil, err } ctx, span := trace.StartSpan(ctx, "stategen.executeStateTransitionStateGen") diff --git a/beacon-chain/sync/backfill/BUILD.bazel b/beacon-chain/sync/backfill/BUILD.bazel index e5a2294b41..ed2211c360 100644 --- a/beacon-chain/sync/backfill/BUILD.bazel +++ b/beacon-chain/sync/backfill/BUILD.bazel @@ -6,10 +6,10 @@ go_library( importpath = "github.com/prysmaticlabs/prysm/beacon-chain/sync/backfill", visibility = ["//visibility:public"], deps = [ - "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/db:go_default_library", "//consensus-types/interfaces:go_default_library", "//consensus-types/primitives:go_default_library", + "//consensus-types/wrapper:go_default_library", "@com_github_pkg_errors//:go_default_library", ], ) @@ -19,7 +19,6 @@ go_test( srcs = ["status_test.go"], embed = [":go_default_library"], deps = [ - "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/db:go_default_library", "//config/params:go_default_library", "//consensus-types/interfaces:go_default_library", diff --git a/beacon-chain/sync/backfill/status.go b/beacon-chain/sync/backfill/status.go index 20a7e8c147..85f83ff53c 100644 --- a/beacon-chain/sync/backfill/status.go +++ b/beacon-chain/sync/backfill/status.go @@ -4,10 +4,10 @@ import ( "context" "github.com/pkg/errors" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" ) // NewStatus correctly initializes a Status value with the required database value. @@ -81,7 +81,7 @@ func (s *Status) Reload(ctx context.Context) error { if err != nil { return errors.Wrapf(err, "error retrieving block for origin checkpoint root=%#x", cpRoot) } - if err := helpers.BeaconBlockIsNil(cpBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(cpBlock); err != nil { return err } s.end = cpBlock.Block().Slot() @@ -105,7 +105,7 @@ func (s *Status) Reload(ctx context.Context) error { if err != nil { return errors.Wrapf(err, "error retrieving block for backfill root=%#x", bfRoot) } - if err := helpers.BeaconBlockIsNil(bfBlock); err != nil { + if err := wrapper.BeaconBlockIsNil(bfBlock); err != nil { return err } s.start = bfBlock.Block().Slot() diff --git a/beacon-chain/sync/backfill/status_test.go b/beacon-chain/sync/backfill/status_test.go index 44a312a9ba..3792f2b41d 100644 --- a/beacon-chain/sync/backfill/status_test.go +++ b/beacon-chain/sync/backfill/status_test.go @@ -4,7 +4,6 @@ import ( "context" "testing" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" @@ -235,7 +234,7 @@ func TestReload(t *testing.T) { return nil, nil }, }, - err: helpers.ErrNilSignedBeaconBlock, + err: wrapper.ErrNilSignedBeaconBlock, }, { name: "origin root found, block error", @@ -298,7 +297,7 @@ func TestReload(t *testing.T) { }, backfillBlockRoot: goodBlockRoot(backfillRoot), }, - err: helpers.ErrNilSignedBeaconBlock, + err: wrapper.ErrNilSignedBeaconBlock, }, { name: "origin root found, block found, backfill root found, backfill block random err", diff --git a/beacon-chain/sync/pending_blocks_queue.go b/beacon-chain/sync/pending_blocks_queue.go index 5a5be0c666..f6d1e18a99 100644 --- a/beacon-chain/sync/pending_blocks_queue.go +++ b/beacon-chain/sync/pending_blocks_queue.go @@ -10,11 +10,11 @@ import ( "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/async" "github.com/prysmaticlabs/prysm/beacon-chain/blockchain" - "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" p2ptypes "github.com/prysmaticlabs/prysm/beacon-chain/p2p/types" "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/crypto/rand" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "github.com/prysmaticlabs/prysm/encoding/ssz/equality" @@ -335,7 +335,7 @@ func (s *Service) deleteBlockFromPendingQueue(slot types.Slot, b interfaces.Sign } // Defensive check to ignore nil blocks - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return err } @@ -394,7 +394,7 @@ func (s *Service) pendingBlocksInCache(slot types.Slot) []interfaces.SignedBeaco // This adds input signed beacon block to slotToPendingBlocks cache. func (s *Service) addPendingBlockToCache(b interfaces.SignedBeaconBlock) error { - if err := helpers.BeaconBlockIsNil(b); err != nil { + if err := wrapper.BeaconBlockIsNil(b); err != nil { return err } diff --git a/beacon-chain/sync/subscriber_beacon_blocks.go b/beacon-chain/sync/subscriber_beacon_blocks.go index 89973ff4b1..6939dd4608 100644 --- a/beacon-chain/sync/subscriber_beacon_blocks.go +++ b/beacon-chain/sync/subscriber_beacon_blocks.go @@ -17,7 +17,7 @@ func (s *Service) beaconBlockSubscriber(ctx context.Context, msg proto.Message) if err != nil { return err } - if err := helpers.BeaconBlockIsNil(signed); err != nil { + if err := wrapper.BeaconBlockIsNil(signed); err != nil { return err } diff --git a/beacon-chain/sync/validate_beacon_blocks.go b/beacon-chain/sync/validate_beacon_blocks.go index 6d3974d338..7a1ba87fa6 100644 --- a/beacon-chain/sync/validate_beacon_blocks.go +++ b/beacon-chain/sync/validate_beacon_blocks.go @@ -18,6 +18,7 @@ import ( "github.com/prysmaticlabs/prysm/config/params" "github.com/prysmaticlabs/prysm/consensus-types/interfaces" types "github.com/prysmaticlabs/prysm/consensus-types/primitives" + "github.com/prysmaticlabs/prysm/consensus-types/wrapper" "github.com/prysmaticlabs/prysm/encoding/bytesutil" "github.com/prysmaticlabs/prysm/monitoring/tracing" prysmTime "github.com/prysmaticlabs/prysm/time" @@ -370,7 +371,7 @@ func isBlockQueueable(genesisTime uint64, slot types.Slot, receivedTime time.Tim } func getBlockFields(b interfaces.SignedBeaconBlock) logrus.Fields { - if helpers.BeaconBlockIsNil(b) != nil { + if wrapper.BeaconBlockIsNil(b) != nil { return logrus.Fields{} } return logrus.Fields{ diff --git a/consensus-types/wrapper/beacon_block.go b/consensus-types/wrapper/beacon_block.go index 576f8a78f0..94536b8ab4 100644 --- a/consensus-types/wrapper/beacon_block.go +++ b/consensus-types/wrapper/beacon_block.go @@ -32,7 +32,10 @@ var ( // ErrUnsupportedBlindedBellatrixBlock is returned when accessing a blinded bellatrix block from unsupported method. ErrUnsupportedBlindedBellatrixBlock = errors.New("unsupported blinded bellatrix block") // ErrNilObjectWrapped is returned in a constructor when the underlying object is nil. - ErrNilObjectWrapped = errors.New("attempted to wrap nil object") + ErrNilObjectWrapped = errors.New("attempted to wrap nil object") + ErrNilSignedBeaconBlock = errors.New("signed beacon block can't be nil") + ErrNilBeaconBlock = errors.New("beacon block can't be nil") + ErrNilBeaconBlockBody = errors.New("beacon block body can't be nil") ) // WrappedSignedBeaconBlock will wrap a signed beacon block to conform to the @@ -159,3 +162,19 @@ func UnwrapGenericSignedBeaconBlock(gb *eth.GenericSignedBeaconBlock) (interface return nil, errors.Wrapf(ErrUnsupportedSignedBeaconBlock, "unable to wrap block of type %T", gb) } } + +// BeaconBlockIsNil checks if any composite field of input signed beacon block is nil. +// Access to these nil fields will result in run time panic, +// it is recommended to run these checks as first line of defense. +func BeaconBlockIsNil(b interfaces.SignedBeaconBlock) error { + if b == nil || b.IsNil() { + return ErrNilSignedBeaconBlock + } + if b.Block().IsNil() { + return ErrNilBeaconBlock + } + if b.Block().Body().IsNil() { + return ErrNilBeaconBlockBody + } + return nil +} diff --git a/testing/endtoend/evaluators/fork.go b/testing/endtoend/evaluators/fork.go index 275a435e3f..a3d8536995 100644 --- a/testing/endtoend/evaluators/fork.go +++ b/testing/endtoend/evaluators/fork.go @@ -4,7 +4,6 @@ import ( "context" "github.com/pkg/errors" - coreHelper "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" wrapperv2 "github.com/prysmaticlabs/prysm/consensus-types/wrapper" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/testing/endtoend/helpers" @@ -61,7 +60,7 @@ func altairForkOccurs(conns ...*grpc.ClientConn) error { if err != nil { return err } - if err := coreHelper.BeaconBlockIsNil(blk); err != nil { + if err := wrapperv2.BeaconBlockIsNil(blk); err != nil { return err } if blk.Block().Slot() < fSlot { @@ -106,7 +105,7 @@ func bellatrixForkOccurs(conns ...*grpc.ClientConn) error { if err != nil { return err } - if err := coreHelper.BeaconBlockIsNil(blk); err != nil { + if err := wrapperv2.BeaconBlockIsNil(blk); err != nil { return err } if blk.Block().Slot() < fSlot {