diff --git a/dot/parachain/dispute/mock_runtime_test.go b/dot/parachain/dispute/mock_runtime_test.go index d3c1b16388e..9d74281b525 100644 --- a/dot/parachain/dispute/mock_runtime_test.go +++ b/dot/parachain/dispute/mock_runtime_test.go @@ -1,7 +1,7 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ChainSafe/gossamer/dot/parachain/runtime (interfaces: RuntimeInstance) -// Package parachain is a generated GoMock package. +// Package dispute is a generated GoMock package. package dispute import ( @@ -9,6 +9,7 @@ import ( parachaintypes "github.com/ChainSafe/gossamer/dot/parachain/types" common "github.com/ChainSafe/gossamer/lib/common" + scale "github.com/ChainSafe/gossamer/pkg/scale" gomock "github.com/golang/mock/gomock" ) @@ -35,6 +36,21 @@ func (m *MockRuntimeInstance) EXPECT() *MockRuntimeInstanceMockRecorder { return m.recorder } +// ParachainHostCandidateEvents mocks base method. +func (m *MockRuntimeInstance) ParachainHostCandidateEvents(arg0 common.Hash) (*scale.VaryingDataTypeSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostCandidateEvents", arg0) + ret0, _ := ret[0].(*scale.VaryingDataTypeSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostCandidateEvents indicates an expected call of ParachainHostCandidateEvents. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostCandidateEvents(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostCandidateEvents", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostCandidateEvents), arg0) +} + // ParachainHostCheckValidationOutputs mocks base method. func (m *MockRuntimeInstance) ParachainHostCheckValidationOutputs(arg0 uint32, arg1 parachaintypes.CandidateCommitments) (bool, error) { m.ctrl.T.Helper() @@ -50,6 +66,21 @@ func (mr *MockRuntimeInstanceMockRecorder) ParachainHostCheckValidationOutputs(a return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostCheckValidationOutputs", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostCheckValidationOutputs), arg0, arg1) } +// ParachainHostOnChainVotes mocks base method. +func (m *MockRuntimeInstance) ParachainHostOnChainVotes(arg0 common.Hash) (*parachaintypes.ScrapedOnChainVotes, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostOnChainVotes", arg0) + ret0, _ := ret[0].(*parachaintypes.ScrapedOnChainVotes) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostOnChainVotes indicates an expected call of ParachainHostOnChainVotes. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostOnChainVotes(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostOnChainVotes", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostOnChainVotes), arg0) +} + // ParachainHostPersistedValidationData mocks base method. func (m *MockRuntimeInstance) ParachainHostPersistedValidationData(arg0 uint32, arg1 parachaintypes.OccupiedCoreAssumption) (*parachaintypes.PersistedValidationData, error) { m.ctrl.T.Helper() diff --git a/dot/parachain/dispute/mocks_generate_test.go b/dot/parachain/dispute/mocks_generate_test.go index 5a8837cb971..3b419880596 100644 --- a/dot/parachain/dispute/mocks_generate_test.go +++ b/dot/parachain/dispute/mocks_generate_test.go @@ -3,5 +3,4 @@ package dispute -//go:generate mockgen -destination=mocks_test.go -package=$GOPACKAGE . PoVRequestor //go:generate mockgen -destination=mock_runtime_test.go -package $GOPACKAGE github.com/ChainSafe/gossamer/dot/parachain/runtime RuntimeInstance diff --git a/dot/parachain/dispute/scraping/mock_runtime_test.go b/dot/parachain/dispute/scraping/mock_runtime_test.go new file mode 100644 index 00000000000..858babf7477 --- /dev/null +++ b/dot/parachain/dispute/scraping/mock_runtime_test.go @@ -0,0 +1,127 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ChainSafe/gossamer/dot/parachain/runtime (interfaces: RuntimeInstance) + +// Package dispute is a generated GoMock package. +package scraping + +import ( + reflect "reflect" + + parachaintypes "github.com/ChainSafe/gossamer/dot/parachain/types" + common "github.com/ChainSafe/gossamer/lib/common" + scale "github.com/ChainSafe/gossamer/pkg/scale" + gomock "github.com/golang/mock/gomock" +) + +// MockRuntimeInstance is a mock of RuntimeInstance interface. +type MockRuntimeInstance struct { + ctrl *gomock.Controller + recorder *MockRuntimeInstanceMockRecorder +} + +// MockRuntimeInstanceMockRecorder is the mock recorder for MockRuntimeInstance. +type MockRuntimeInstanceMockRecorder struct { + mock *MockRuntimeInstance +} + +// NewMockRuntimeInstance creates a new mock instance. +func NewMockRuntimeInstance(ctrl *gomock.Controller) *MockRuntimeInstance { + mock := &MockRuntimeInstance{ctrl: ctrl} + mock.recorder = &MockRuntimeInstanceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockRuntimeInstance) EXPECT() *MockRuntimeInstanceMockRecorder { + return m.recorder +} + +// ParachainHostCandidateEvents mocks base method. +func (m *MockRuntimeInstance) ParachainHostCandidateEvents(arg0 common.Hash) (*scale.VaryingDataTypeSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostCandidateEvents", arg0) + ret0, _ := ret[0].(*scale.VaryingDataTypeSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostCandidateEvents indicates an expected call of ParachainHostCandidateEvents. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostCandidateEvents(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostCandidateEvents", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostCandidateEvents), arg0) +} + +// ParachainHostCheckValidationOutputs mocks base method. +func (m *MockRuntimeInstance) ParachainHostCheckValidationOutputs(arg0 uint32, arg1 parachaintypes.CandidateCommitments) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostCheckValidationOutputs", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostCheckValidationOutputs indicates an expected call of ParachainHostCheckValidationOutputs. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostCheckValidationOutputs(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostCheckValidationOutputs", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostCheckValidationOutputs), arg0, arg1) +} + +// ParachainHostOnChainVotes mocks base method. +func (m *MockRuntimeInstance) ParachainHostOnChainVotes(arg0 common.Hash) (*parachaintypes.ScrapedOnChainVotes, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostOnChainVotes", arg0) + ret0, _ := ret[0].(*parachaintypes.ScrapedOnChainVotes) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostOnChainVotes indicates an expected call of ParachainHostOnChainVotes. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostOnChainVotes(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostOnChainVotes", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostOnChainVotes), arg0) +} + +// ParachainHostPersistedValidationData mocks base method. +func (m *MockRuntimeInstance) ParachainHostPersistedValidationData(arg0 uint32, arg1 parachaintypes.OccupiedCoreAssumption) (*parachaintypes.PersistedValidationData, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostPersistedValidationData", arg0, arg1) + ret0, _ := ret[0].(*parachaintypes.PersistedValidationData) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostPersistedValidationData indicates an expected call of ParachainHostPersistedValidationData. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostPersistedValidationData(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostPersistedValidationData", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostPersistedValidationData), arg0, arg1) +} + +// ParachainHostValidationCode mocks base method. +func (m *MockRuntimeInstance) ParachainHostValidationCode(arg0 uint32, arg1 parachaintypes.OccupiedCoreAssumption) (*parachaintypes.ValidationCode, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostValidationCode", arg0, arg1) + ret0, _ := ret[0].(*parachaintypes.ValidationCode) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostValidationCode indicates an expected call of ParachainHostValidationCode. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostValidationCode(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostValidationCode", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostValidationCode), arg0, arg1) +} + +// ParachainHostValidationCodeByHash mocks base method. +func (m *MockRuntimeInstance) ParachainHostValidationCodeByHash(arg0 common.Hash, arg1 parachaintypes.ValidationCodeHash) (*parachaintypes.ValidationCode, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ParachainHostValidationCodeByHash", arg0, arg1) + ret0, _ := ret[0].(*parachaintypes.ValidationCode) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ParachainHostValidationCodeByHash indicates an expected call of ParachainHostValidationCodeByHash. +func (mr *MockRuntimeInstanceMockRecorder) ParachainHostValidationCodeByHash(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ParachainHostValidationCodeByHash", reflect.TypeOf((*MockRuntimeInstance)(nil).ParachainHostValidationCodeByHash), arg0, arg1) +} diff --git a/dot/parachain/dispute/scraping/mocks_generate_test.go b/dot/parachain/dispute/scraping/mocks_generate_test.go new file mode 100644 index 00000000000..137b862f3b3 --- /dev/null +++ b/dot/parachain/dispute/scraping/mocks_generate_test.go @@ -0,0 +1,6 @@ +// Copyright 2023 ChainSafe Systems (ON) +// SPDX-License-Identifier: LGPL-3.0-only + +package scraping + +//go:generate mockgen -destination=mock_runtime_test.go -package $GOPACKAGE github.com/ChainSafe/gossamer/dot/parachain/runtime RuntimeInstance diff --git a/dot/parachain/dispute/scraping/scraping.go b/dot/parachain/dispute/scraping/scraping.go index 1bebabb5557..adc665e8bb0 100644 --- a/dot/parachain/dispute/scraping/scraping.go +++ b/dot/parachain/dispute/scraping/scraping.go @@ -20,7 +20,7 @@ const ( AncestryChunkSize = uint32(10) // AncestrySizeLimit Limits the overall number of ancestors walked through for a given head. - AncestrySizeLimit = int(500) // TODO: This should be a MaxFinalityLag + AncestrySizeLimit = int(500) // TODO: This should be MaxFinalityLag // LRUObservedBlocksCapacity Number of hashes to keep in the LRU cache. LRUObservedBlocksCapacity = 20 @@ -224,7 +224,7 @@ func (cs *ChainScraper) IsPotentialSpam(voteState types.CandidateVoteState, cand isBacked := cs.IsCandidateBacked(candidateHash) isConfirmed, err := voteState.IsConfirmed() if err != nil { - return false, fmt.Errorf("is confirmed: %w", err) + return false, fmt.Errorf("checking if the vote state is confirmed: %w", err) } return isDisputed && !isIncluded && !isBacked && !isConfirmed, nil @@ -255,6 +255,7 @@ func NewChainScraper( return chainScraper, updates, nil } +// getFinalisedBlockNumber sends a message to the overseer to get the finalised block number. func getFinalisedBlockNumber(sender overseer.Sender) (uint32, error) { tx := make(chan overseer.FinalizedBlockNumberResponse, 1) message := overseer.FinalizedBlockNumberRequest{ diff --git a/dot/parachain/dispute/scraping/scraping_test.go b/dot/parachain/dispute/scraping/scraping_test.go index 7dd25b7013d..02e6a197634 100644 --- a/dot/parachain/dispute/scraping/scraping_test.go +++ b/dot/parachain/dispute/scraping/scraping_test.go @@ -4,7 +4,6 @@ import ( "fmt" "testing" - "github.com/ChainSafe/gossamer/dot/parachain" "github.com/ChainSafe/gossamer/dot/parachain/dispute" "github.com/ChainSafe/gossamer/dot/parachain/dispute/overseer" parachainTypes "github.com/ChainSafe/gossamer/dot/parachain/types" @@ -248,7 +247,7 @@ func mockCandidateEvents(blockHash common.Hash, chain *[]common.Hash) (*scale.Va } func configureMockRuntime( - runtime *parachain.MockRuntimeInstance, + runtime *MockRuntimeInstance, chain *[]common.Hash, calls expectedRuntimeCalls, eventGenerator func(blockHash common.Hash, chain *[]common.Hash) (*scale.VaryingDataTypeSlice, error), @@ -278,7 +277,7 @@ func configureMockRuntime( func newTestState( t *testing.T, sender *overseer.MockSender, - runtime *parachain.MockRuntimeInstance, + runtime *MockRuntimeInstance, messages expectedMessages, calls expectedRuntimeCalls, finalisedBlock uint32, @@ -299,7 +298,7 @@ func TestChainScraper(t *testing.T) { t.Run("scraper_provides_included_state_when_initialised", func(t *testing.T) { t.Parallel() ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) candidate1, err := dispute.DummyCandidateReceipt(dispute.GetBlockNumberHash(1)).Hash() @@ -340,7 +339,7 @@ func TestChainScraper(t *testing.T) { const BlocksToSkip = 30 ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(0) @@ -370,7 +369,7 @@ func TestChainScraper(t *testing.T) { var BlocksToSkip = []int{30, 15} ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(0) @@ -399,7 +398,7 @@ func TestChainScraper(t *testing.T) { const BlocksToSkip = 30 ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(17) @@ -425,7 +424,7 @@ func TestChainScraper(t *testing.T) { ) ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(1) @@ -475,7 +474,7 @@ func TestChainScraper(t *testing.T) { ) ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(1) @@ -532,7 +531,7 @@ func TestChainScraper(t *testing.T) { const BlocksToSkip = 3 ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(1) @@ -595,7 +594,7 @@ func TestChainScraper(t *testing.T) { const BlocksToSkip = 4 ctrl := gomock.NewController(t) - mockRuntime := parachain.NewMockRuntimeInstance(ctrl) + mockRuntime := NewMockRuntimeInstance(ctrl) mockSender := overseer.NewMockSender(ctrl) finalisedBlock := uint32(1) diff --git a/dot/parachain/dispute/test_helpers.go b/dot/parachain/dispute/test_helpers.go index 0e93eae0a34..4720759f0b2 100644 --- a/dot/parachain/dispute/test_helpers.go +++ b/dot/parachain/dispute/test_helpers.go @@ -129,10 +129,11 @@ func activateLeaf( } func GetBlockNumberHash(blockNumber parachainTypes.BlockNumber) common.Hash { - encodedBlockNumber, err := blockNumber.Encode() + encodedBlockNumber, err := scale.Marshal(blockNumber) if err != nil { panic("failed to encode block number:" + err.Error()) } + blockHash, err := common.Blake2bHash(encodedBlockNumber) if err != nil { panic("failed to hash block number:" + err.Error()) diff --git a/dot/parachain/types/types.go b/dot/parachain/types/types.go index d0bebb2a5ef..4917da14965 100644 --- a/dot/parachain/types/types.go +++ b/dot/parachain/types/types.go @@ -26,10 +26,6 @@ type ValidatorID [sr25519.PublicKeyLength]byte // BlockNumber The block number type. type BlockNumber uint32 -func (b BlockNumber) Encode() ([]byte, error) { - return scale.Marshal(&b) -} - // GroupRotationInfo A helper data-type for tracking validator-group rotations. type GroupRotationInfo struct { // SessionStartBlock is the block number at which the session started