From 6152726c54de8da4e672d0ecd3c9b712dd64408f Mon Sep 17 00:00:00 2001 From: rkapka Date: Tue, 23 Feb 2021 16:38:33 +0100 Subject: [PATCH 1/3] Implement ListPoolProposerSlashings in the beacon API --- beacon-chain/operations/slashings/mock.go | 5 +- beacon-chain/rpc/beaconv1/pool.go | 18 ++++++- beacon-chain/rpc/beaconv1/pool_test.go | 60 +++++++++++++++++++++++ proto/migration/migration.go | 28 +++++++++++ 4 files changed, 108 insertions(+), 3 deletions(-) diff --git a/beacon-chain/operations/slashings/mock.go b/beacon-chain/operations/slashings/mock.go index 3929ac04eece..3a1b3d71e925 100644 --- a/beacon-chain/operations/slashings/mock.go +++ b/beacon-chain/operations/slashings/mock.go @@ -9,7 +9,8 @@ import ( // PoolMock is a fake implementation of PoolManager. type PoolMock struct { - PendingAttSlashings []*ethpb.AttesterSlashing + PendingAttSlashings []*ethpb.AttesterSlashing + PendingPropSlashings []*ethpb.ProposerSlashing } // PendingAttesterSlashings -- @@ -19,7 +20,7 @@ func (m *PoolMock) PendingAttesterSlashings(ctx context.Context, state *state.Be // PendingProposerSlashings -- func (m *PoolMock) PendingProposerSlashings(ctx context.Context, state *state.BeaconState, noLimit bool) []*ethpb.ProposerSlashing { - panic("implement me") + return m.PendingPropSlashings } // InsertAttesterSlashing -- diff --git a/beacon-chain/rpc/beaconv1/pool.go b/beacon-chain/rpc/beaconv1/pool.go index 94a5db6731ff..d82850d415e7 100644 --- a/beacon-chain/rpc/beaconv1/pool.go +++ b/beacon-chain/rpc/beaconv1/pool.go @@ -55,7 +55,23 @@ func (bs *Server) SubmitAttesterSlashing(ctx context.Context, req *ethpb.Atteste // ListPoolProposerSlashings retrieves proposer slashings known by the node // but not necessarily incorporated into any block. func (bs *Server) ListPoolProposerSlashings(ctx context.Context, req *ptypes.Empty) (*ethpb.ProposerSlashingPoolResponse, error) { - return nil, errors.New("unimplemented") + ctx, span := trace.StartSpan(ctx, "beaconv1.ListPoolProposerSlashings") + defer span.End() + + headState, err := bs.ChainInfoFetcher.HeadState(ctx) + if err != nil { + return nil, status.Errorf(codes.Internal, "Could not get head state: %v", err) + } + sourceSlashings := bs.SlashingsPool.PendingProposerSlashings(ctx, headState, true) + + slashings := make([]*ethpb.ProposerSlashing, len(sourceSlashings)) + for i, s := range sourceSlashings { + slashings[i] = migration.V1Alpha1ProposerSlashingToV1(s) + } + + return ðpb.ProposerSlashingPoolResponse{ + Data: slashings, + }, nil } // SubmitProposerSlashing submits AttesterSlashing object to node's pool and if diff --git a/beacon-chain/rpc/beaconv1/pool_test.go b/beacon-chain/rpc/beaconv1/pool_test.go index 71a1da393777..1b96682b53b5 100644 --- a/beacon-chain/rpc/beaconv1/pool_test.go +++ b/beacon-chain/rpc/beaconv1/pool_test.go @@ -102,3 +102,63 @@ func TestListPoolAttesterSlashings(t *testing.T) { assert.DeepEqual(t, migration.V1Alpha1AttSlashingToV1(slashing1), resp.Data[0]) assert.DeepEqual(t, migration.V1Alpha1AttSlashingToV1(slashing2), resp.Data[1]) } + +func TestListPoolProposerSlashings(t *testing.T) { + state, err := testutil.NewBeaconState() + require.NoError(t, err) + slashing1 := ð.ProposerSlashing{ + Header_1: ð.SignedBeaconBlockHeader{ + Header: ð.BeaconBlockHeader{ + Slot: 1, + ProposerIndex: 1, + ParentRoot: bytesutil.PadTo([]byte("parentroot1"), 32), + StateRoot: bytesutil.PadTo([]byte("stateroot1"), 32), + BodyRoot: bytesutil.PadTo([]byte("bodyroot1"), 32), + }, + Signature: bytesutil.PadTo([]byte("signature1"), 96), + }, + Header_2: ð.SignedBeaconBlockHeader{ + Header: ð.BeaconBlockHeader{ + Slot: 2, + ProposerIndex: 2, + ParentRoot: bytesutil.PadTo([]byte("parentroot2"), 32), + StateRoot: bytesutil.PadTo([]byte("stateroot2"), 32), + BodyRoot: bytesutil.PadTo([]byte("bodyroot2"), 32), + }, + Signature: bytesutil.PadTo([]byte("signature2"), 96), + }, + } + slashing2 := ð.ProposerSlashing{ + Header_1: ð.SignedBeaconBlockHeader{ + Header: ð.BeaconBlockHeader{ + Slot: 3, + ProposerIndex: 3, + ParentRoot: bytesutil.PadTo([]byte("parentroot3"), 32), + StateRoot: bytesutil.PadTo([]byte("stateroot3"), 32), + BodyRoot: bytesutil.PadTo([]byte("bodyroot3"), 32), + }, + Signature: bytesutil.PadTo([]byte("signature3"), 96), + }, + Header_2: ð.SignedBeaconBlockHeader{ + Header: ð.BeaconBlockHeader{ + Slot: 4, + ProposerIndex: 4, + ParentRoot: bytesutil.PadTo([]byte("parentroot4"), 32), + StateRoot: bytesutil.PadTo([]byte("stateroot4"), 32), + BodyRoot: bytesutil.PadTo([]byte("bodyroot4"), 32), + }, + Signature: bytesutil.PadTo([]byte("signature4"), 96), + }, + } + + s := &Server{ + ChainInfoFetcher: &chainMock.ChainService{State: state}, + SlashingsPool: &slashings.PoolMock{PendingPropSlashings: []*eth.ProposerSlashing{slashing1, slashing2}}, + } + + resp, err := s.ListPoolProposerSlashings(context.Background(), &types.Empty{}) + require.NoError(t, err) + require.Equal(t, 2, len(resp.Data)) + assert.DeepEqual(t, migration.V1Alpha1ProposerSlashingToV1(slashing1), resp.Data[0]) + assert.DeepEqual(t, migration.V1Alpha1ProposerSlashingToV1(slashing2), resp.Data[1]) +} diff --git a/proto/migration/migration.go b/proto/migration/migration.go index 7876ae970ef3..127c542949e4 100644 --- a/proto/migration/migration.go +++ b/proto/migration/migration.go @@ -93,3 +93,31 @@ func V1Alpha1AttSlashingToV1(v1alpha1Slashing *ethpb_alpha.AttesterSlashing) *et Attestation_2: V1Alpha1IndexedAttToV1(v1alpha1Slashing.Attestation_2), } } + +// V1Alpha1SignedHeaderToV1 converts a v1alpha1 signed beacon block header to v1. +func V1Alpha1SignedHeaderToV1(v1alpha1Hdr *ethpb_alpha.SignedBeaconBlockHeader) *ethpb.SignedBeaconBlockHeader { + if v1alpha1Hdr == nil || v1alpha1Hdr.Header == nil { + return ðpb.SignedBeaconBlockHeader{} + } + return ðpb.SignedBeaconBlockHeader{ + Header: ðpb.BeaconBlockHeader{ + Slot: v1alpha1Hdr.Header.Slot, + ProposerIndex: v1alpha1Hdr.Header.ProposerIndex, + ParentRoot: v1alpha1Hdr.Header.ParentRoot, + StateRoot: v1alpha1Hdr.Header.StateRoot, + BodyRoot: v1alpha1Hdr.Header.BodyRoot, + }, + Signature: v1alpha1Hdr.Signature, + } +} + +// V1Alpha1ProposerSlashingToV1 converts a v1alpha1 proposer slashing to v1. +func V1Alpha1ProposerSlashingToV1(v1alpha1Slashing *ethpb_alpha.ProposerSlashing) *ethpb.ProposerSlashing { + if v1alpha1Slashing == nil { + return ðpb.ProposerSlashing{} + } + return ðpb.ProposerSlashing{ + Header_1: V1Alpha1SignedHeaderToV1(v1alpha1Slashing.Header_1), + Header_2: V1Alpha1SignedHeaderToV1(v1alpha1Slashing.Header_2), + } +} From 5be0b65efcb5002e937113ba9bf5b19eafe2ceff Mon Sep 17 00:00:00 2001 From: rkapka Date: Wed, 24 Feb 2021 10:38:02 +0100 Subject: [PATCH 2/3] implement ListPoolAttesterSlashings --- beacon-chain/blockchain/service.go | 4 +-- beacon-chain/node/node.go | 2 +- .../operations/voluntaryexits/BUILD.bazel | 1 + .../operations/voluntaryexits/mock.go | 29 +++++++++++++++++ .../operations/voluntaryexits/service.go | 11 +++++-- beacon-chain/rpc/beaconv1/BUILD.bazel | 2 ++ beacon-chain/rpc/beaconv1/pool.go | 19 +++++++++++- beacon-chain/rpc/beaconv1/pool_test.go | 31 +++++++++++++++++++ beacon-chain/rpc/beaconv1/server.go | 2 ++ beacon-chain/rpc/service.go | 4 +-- beacon-chain/rpc/validator/server.go | 2 +- beacon-chain/sync/service.go | 4 +-- proto/migration/migration.go | 14 +++++++++ 13 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 beacon-chain/operations/voluntaryexits/mock.go diff --git a/beacon-chain/blockchain/service.go b/beacon-chain/blockchain/service.go index 46bc8a868b60..e65a2fbb3e28 100644 --- a/beacon-chain/blockchain/service.go +++ b/beacon-chain/blockchain/service.go @@ -53,7 +53,7 @@ type Service struct { chainStartFetcher powchain.ChainStartFetcher attPool attestations.Pool slashingPool slashings.PoolManager - exitPool *voluntaryexits.Pool + exitPool voluntaryexits.PoolManager genesisTime time.Time p2p p2p.Broadcaster maxRoutines int @@ -88,7 +88,7 @@ type Config struct { BeaconDB db.HeadAccessDatabase DepositCache *depositcache.DepositCache AttPool attestations.Pool - ExitPool *voluntaryexits.Pool + ExitPool voluntaryexits.PoolManager SlashingPool slashings.PoolManager P2p p2p.Broadcaster MaxRoutines int diff --git a/beacon-chain/node/node.go b/beacon-chain/node/node.go index be1e984a7954..476f5ffbf609 100644 --- a/beacon-chain/node/node.go +++ b/beacon-chain/node/node.go @@ -67,7 +67,7 @@ type BeaconNode struct { stop chan struct{} // Channel to wait for termination notifications. db db.Database attestationPool attestations.Pool - exitPool *voluntaryexits.Pool + exitPool voluntaryexits.PoolManager slashingsPool slashings.PoolManager depositCache *depositcache.DepositCache stateFeed *event.Feed diff --git a/beacon-chain/operations/voluntaryexits/BUILD.bazel b/beacon-chain/operations/voluntaryexits/BUILD.bazel index 9f465dbc123a..62c151172e6a 100644 --- a/beacon-chain/operations/voluntaryexits/BUILD.bazel +++ b/beacon-chain/operations/voluntaryexits/BUILD.bazel @@ -5,6 +5,7 @@ go_library( name = "go_default_library", srcs = [ "doc.go", + "mock.go", "service.go", ], importpath = "github.com/prysmaticlabs/prysm/beacon-chain/operations/voluntaryexits", diff --git a/beacon-chain/operations/voluntaryexits/mock.go b/beacon-chain/operations/voluntaryexits/mock.go new file mode 100644 index 000000000000..8dc13c96c074 --- /dev/null +++ b/beacon-chain/operations/voluntaryexits/mock.go @@ -0,0 +1,29 @@ +package voluntaryexits + +import ( + "context" + + types "github.com/prysmaticlabs/eth2-types" + eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + beaconstate "github.com/prysmaticlabs/prysm/beacon-chain/state" +) + +// PoolMock is a fake implementation of PoolManager. +type PoolMock struct { + Exits []*eth.SignedVoluntaryExit +} + +// PendingExits -- +func (m *PoolMock) PendingExits(_ *beaconstate.BeaconState, _ types.Slot, _ bool) []*eth.SignedVoluntaryExit { + return m.Exits +} + +// InsertVoluntaryExit -- +func (*PoolMock) InsertVoluntaryExit(_ context.Context, _ *beaconstate.BeaconState, _ *eth.SignedVoluntaryExit) { + panic("implement me") +} + +// MarkIncluded -- +func (*PoolMock) MarkIncluded(_ *eth.SignedVoluntaryExit) { + panic("implement me") +} diff --git a/beacon-chain/operations/voluntaryexits/service.go b/beacon-chain/operations/voluntaryexits/service.go index 4cf366652566..3b590a4c0031 100644 --- a/beacon-chain/operations/voluntaryexits/service.go +++ b/beacon-chain/operations/voluntaryexits/service.go @@ -13,8 +13,15 @@ import ( "go.opencensus.io/trace" ) -// Pool implements a struct to maintain pending and seen voluntary exits. This pool -// is used by proposers to insert into new blocks. +// PoolManager maintains pending and seen voluntary exits. +// This pool is used by proposers to insert voluntary exits into new blocks. +type PoolManager interface { + PendingExits(state *beaconstate.BeaconState, slot types.Slot, noLimit bool) []*ethpb.SignedVoluntaryExit + InsertVoluntaryExit(ctx context.Context, state *beaconstate.BeaconState, exit *ethpb.SignedVoluntaryExit) + MarkIncluded(exit *ethpb.SignedVoluntaryExit) +} + +// Pool is a concrete implementation of PoolManager. type Pool struct { lock sync.RWMutex pending []*ethpb.SignedVoluntaryExit diff --git a/beacon-chain/rpc/beaconv1/BUILD.bazel b/beacon-chain/rpc/beaconv1/BUILD.bazel index e5c59dbb1ae3..4a81d0231cd5 100644 --- a/beacon-chain/rpc/beaconv1/BUILD.bazel +++ b/beacon-chain/rpc/beaconv1/BUILD.bazel @@ -26,6 +26,7 @@ go_library( "//beacon-chain/db/filters:go_default_library", "//beacon-chain/operations/attestations:go_default_library", "//beacon-chain/operations/slashings:go_default_library", + "//beacon-chain/operations/voluntaryexits:go_default_library", "//beacon-chain/p2p:go_default_library", "//beacon-chain/powchain:go_default_library", "//beacon-chain/state:go_default_library", @@ -63,6 +64,7 @@ go_test( "//beacon-chain/db:go_default_library", "//beacon-chain/db/testing:go_default_library", "//beacon-chain/operations/slashings:go_default_library", + "//beacon-chain/operations/voluntaryexits:go_default_library", "//beacon-chain/p2p/testing:go_default_library", "//beacon-chain/powchain/testing:go_default_library", "//beacon-chain/state/stategen:go_default_library", diff --git a/beacon-chain/rpc/beaconv1/pool.go b/beacon-chain/rpc/beaconv1/pool.go index d82850d415e7..f9528831616f 100644 --- a/beacon-chain/rpc/beaconv1/pool.go +++ b/beacon-chain/rpc/beaconv1/pool.go @@ -83,7 +83,24 @@ func (bs *Server) SubmitProposerSlashing(ctx context.Context, req *ethpb.Propose // ListPoolVoluntaryExits retrieves voluntary exits known by the node but // not necessarily incorporated into any block. func (bs *Server) ListPoolVoluntaryExits(ctx context.Context, req *ptypes.Empty) (*ethpb.VoluntaryExitsPoolResponse, error) { - return nil, errors.New("unimplemented") + ctx, span := trace.StartSpan(ctx, "beaconv1.ListPoolVoluntaryExits") + defer span.End() + + headState, err := bs.ChainInfoFetcher.HeadState(ctx) + if err != nil { + return nil, status.Errorf(codes.Internal, "Could not get head state: %v", err) + } + + sourceExits := bs.VoluntaryExitsPool.PendingExits(headState, headState.Slot(), true) + + exits := make([]*ethpb.SignedVoluntaryExit, len(sourceExits)) + for i, s := range sourceExits { + exits[i] = migration.V1Alpha1ExitToV1(s) + } + + return ðpb.VoluntaryExitsPoolResponse{ + Data: exits, + }, nil } // SubmitVoluntaryExit submits SignedVoluntaryExit object to node's pool diff --git a/beacon-chain/rpc/beaconv1/pool_test.go b/beacon-chain/rpc/beaconv1/pool_test.go index 1b96682b53b5..0a0b18ec6596 100644 --- a/beacon-chain/rpc/beaconv1/pool_test.go +++ b/beacon-chain/rpc/beaconv1/pool_test.go @@ -8,6 +8,7 @@ import ( eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" chainMock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" "github.com/prysmaticlabs/prysm/beacon-chain/operations/slashings" + "github.com/prysmaticlabs/prysm/beacon-chain/operations/voluntaryexits" "github.com/prysmaticlabs/prysm/proto/migration" "github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/testutil" @@ -162,3 +163,33 @@ func TestListPoolProposerSlashings(t *testing.T) { assert.DeepEqual(t, migration.V1Alpha1ProposerSlashingToV1(slashing1), resp.Data[0]) assert.DeepEqual(t, migration.V1Alpha1ProposerSlashingToV1(slashing2), resp.Data[1]) } + +func TestListPoolVoluntaryExits(t *testing.T) { + state, err := testutil.NewBeaconState() + require.NoError(t, err) + exit1 := ð.SignedVoluntaryExit{ + Exit: ð.VoluntaryExit{ + Epoch: 1, + ValidatorIndex: 1, + }, + Signature: bytesutil.PadTo([]byte("signature1"), 96), + } + exit2 := ð.SignedVoluntaryExit{ + Exit: ð.VoluntaryExit{ + Epoch: 2, + ValidatorIndex: 2, + }, + Signature: bytesutil.PadTo([]byte("signature2"), 96), + } + + s := &Server{ + ChainInfoFetcher: &chainMock.ChainService{State: state}, + VoluntaryExitsPool: &voluntaryexits.PoolMock{Exits: []*eth.SignedVoluntaryExit{exit1, exit2}}, + } + + resp, err := s.ListPoolVoluntaryExits(context.Background(), &types.Empty{}) + require.NoError(t, err) + require.Equal(t, 2, len(resp.Data)) + assert.DeepEqual(t, migration.V1Alpha1ExitToV1(exit1), resp.Data[0]) + assert.DeepEqual(t, migration.V1Alpha1ExitToV1(exit2), resp.Data[1]) +} diff --git a/beacon-chain/rpc/beaconv1/server.go b/beacon-chain/rpc/beaconv1/server.go index ff220591c189..4d6637411f43 100644 --- a/beacon-chain/rpc/beaconv1/server.go +++ b/beacon-chain/rpc/beaconv1/server.go @@ -15,6 +15,7 @@ import ( "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/beacon-chain/operations/attestations" "github.com/prysmaticlabs/prysm/beacon-chain/operations/slashings" + "github.com/prysmaticlabs/prysm/beacon-chain/operations/voluntaryexits" "github.com/prysmaticlabs/prysm/beacon-chain/p2p" "github.com/prysmaticlabs/prysm/beacon-chain/powchain" "github.com/prysmaticlabs/prysm/beacon-chain/state/stategen" @@ -40,6 +41,7 @@ type Server struct { Broadcaster p2p.Broadcaster AttestationsPool attestations.Pool SlashingsPool slashings.PoolManager + VoluntaryExitsPool voluntaryexits.PoolManager CanonicalStateChan chan *pbp2p.BeaconState ChainStartChan chan time.Time StateGenService stategen.StateManager diff --git a/beacon-chain/rpc/service.go b/beacon-chain/rpc/service.go index a9ae0ba97714..e650fbce1c94 100644 --- a/beacon-chain/rpc/service.go +++ b/beacon-chain/rpc/service.go @@ -70,7 +70,7 @@ type Service struct { mockEth1Votes bool enableDebugRPCEndpoints bool attestationsPool attestations.Pool - exitPool *voluntaryexits.Pool + exitPool voluntaryexits.PoolManager slashingsPool slashings.PoolManager syncService chainSync.Checker host string @@ -122,7 +122,7 @@ type Config struct { EnableDebugRPCEndpoints bool MockEth1Votes bool AttestationsPool attestations.Pool - ExitPool *voluntaryexits.Pool + ExitPool voluntaryexits.PoolManager SlashingsPool slashings.PoolManager SyncService chainSync.Checker Broadcaster p2p.Broadcaster diff --git a/beacon-chain/rpc/validator/server.go b/beacon-chain/rpc/validator/server.go index 0ecb74cce62a..fd01a632151d 100644 --- a/beacon-chain/rpc/validator/server.go +++ b/beacon-chain/rpc/validator/server.go @@ -56,7 +56,7 @@ type Server struct { P2P p2p.Broadcaster AttPool attestations.Pool SlashingsPool slashings.PoolManager - ExitPool *voluntaryexits.Pool + ExitPool voluntaryexits.PoolManager BlockReceiver blockchain.BlockReceiver MockEth1Votes bool Eth1BlockFetcher powchain.POWBlockFetcher diff --git a/beacon-chain/sync/service.go b/beacon-chain/sync/service.go index 6b35841c4e50..b7be1b91b58e 100644 --- a/beacon-chain/sync/service.go +++ b/beacon-chain/sync/service.go @@ -53,7 +53,7 @@ type Config struct { P2P p2p.P2P DB db.NoHeadAccessDatabase AttPool attestations.Pool - ExitPool *voluntaryexits.Pool + ExitPool voluntaryexits.PoolManager SlashingPool slashings.PoolManager Chain blockchainService InitialSync Checker @@ -83,7 +83,7 @@ type Service struct { p2p p2p.P2P db db.NoHeadAccessDatabase attPool attestations.Pool - exitPool *voluntaryexits.Pool + exitPool voluntaryexits.PoolManager slashingPool slashings.PoolManager chain blockchainService slotToPendingBlocks *gcache.Cache diff --git a/proto/migration/migration.go b/proto/migration/migration.go index 127c542949e4..b8b2166111da 100644 --- a/proto/migration/migration.go +++ b/proto/migration/migration.go @@ -121,3 +121,17 @@ func V1Alpha1ProposerSlashingToV1(v1alpha1Slashing *ethpb_alpha.ProposerSlashing Header_2: V1Alpha1SignedHeaderToV1(v1alpha1Slashing.Header_2), } } + +// V1Alpha1ExitToV1 converts a v1alpha1 SignedVoluntaryExit to v1. +func V1Alpha1ExitToV1(v1alpha1Exit *ethpb_alpha.SignedVoluntaryExit) *ethpb.SignedVoluntaryExit { + if v1alpha1Exit == nil || v1alpha1Exit.Exit == nil { + return ðpb.SignedVoluntaryExit{} + } + return ðpb.SignedVoluntaryExit{ + Exit: ðpb.VoluntaryExit{ + Epoch: v1alpha1Exit.Exit.Epoch, + ValidatorIndex: v1alpha1Exit.Exit.ValidatorIndex, + }, + Signature: v1alpha1Exit.Signature, + } +} From 6dfe062a8c12b6dbf18c5e23cdfd05ff05b49583 Mon Sep 17 00:00:00 2001 From: rkapka Date: Wed, 24 Feb 2021 15:49:18 +0100 Subject: [PATCH 3/3] add comments to bool arguments --- beacon-chain/rpc/beaconv1/pool.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/beacon-chain/rpc/beaconv1/pool.go b/beacon-chain/rpc/beaconv1/pool.go index f9528831616f..b54da6ebd1a3 100644 --- a/beacon-chain/rpc/beaconv1/pool.go +++ b/beacon-chain/rpc/beaconv1/pool.go @@ -34,7 +34,7 @@ func (bs *Server) ListPoolAttesterSlashings(ctx context.Context, req *ptypes.Emp if err != nil { return nil, status.Errorf(codes.Internal, "Could not get head state: %v", err) } - sourceSlashings := bs.SlashingsPool.PendingAttesterSlashings(ctx, headState, true) + sourceSlashings := bs.SlashingsPool.PendingAttesterSlashings(ctx, headState, true /* return unlimited slashings */) slashings := make([]*ethpb.AttesterSlashing, len(sourceSlashings)) for i, s := range sourceSlashings { @@ -62,7 +62,7 @@ func (bs *Server) ListPoolProposerSlashings(ctx context.Context, req *ptypes.Emp if err != nil { return nil, status.Errorf(codes.Internal, "Could not get head state: %v", err) } - sourceSlashings := bs.SlashingsPool.PendingProposerSlashings(ctx, headState, true) + sourceSlashings := bs.SlashingsPool.PendingProposerSlashings(ctx, headState, true /* return unlimited slashings */) slashings := make([]*ethpb.ProposerSlashing, len(sourceSlashings)) for i, s := range sourceSlashings { @@ -91,7 +91,7 @@ func (bs *Server) ListPoolVoluntaryExits(ctx context.Context, req *ptypes.Empty) return nil, status.Errorf(codes.Internal, "Could not get head state: %v", err) } - sourceExits := bs.VoluntaryExitsPool.PendingExits(headState, headState.Slot(), true) + sourceExits := bs.VoluntaryExitsPool.PendingExits(headState, headState.Slot(), true /* return unlimited exits */) exits := make([]*ethpb.SignedVoluntaryExit, len(sourceExits)) for i, s := range sourceExits {