From ea6213ab0982cb4ade64af7d1b24a00dab9046d9 Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 2 Oct 2024 11:42:25 -0300 Subject: [PATCH] feat(dot/network): Initialize warp sync provider --- dot/network/mock_warp_sync_provider_test.go | 12 ++++++------ dot/network/warp_sync.go | 4 ++-- dot/network/warp_sync_test.go | 4 ++-- dot/services.go | 7 +++++++ internal/client/consensus/grandpa/warp_sync.go | 7 +++++++ 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/dot/network/mock_warp_sync_provider_test.go b/dot/network/mock_warp_sync_provider_test.go index 4b99b3a346..2ec249711f 100644 --- a/dot/network/mock_warp_sync_provider_test.go +++ b/dot/network/mock_warp_sync_provider_test.go @@ -39,17 +39,17 @@ func (m *MockWarpSyncProvider) EXPECT() *MockWarpSyncProviderMockRecorder { return m.recorder } -// generate mocks base method. -func (m *MockWarpSyncProvider) generate(arg0 common.Hash) ([]byte, error) { +// Generate mocks base method. +func (m *MockWarpSyncProvider) Generate(arg0 common.Hash) ([]byte, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "generate", arg0) + ret := m.ctrl.Call(m, "Generate", arg0) ret0, _ := ret[0].([]byte) ret1, _ := ret[1].(error) return ret0, ret1 } -// generate indicates an expected call of generate. -func (mr *MockWarpSyncProviderMockRecorder) generate(arg0 any) *gomock.Call { +// Generate indicates an expected call of Generate. +func (mr *MockWarpSyncProviderMockRecorder) Generate(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "generate", reflect.TypeOf((*MockWarpSyncProvider)(nil).generate), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Generate", reflect.TypeOf((*MockWarpSyncProvider)(nil).Generate), arg0) } diff --git a/dot/network/warp_sync.go b/dot/network/warp_sync.go index ff14800951..49a9a32490 100644 --- a/dot/network/warp_sync.go +++ b/dot/network/warp_sync.go @@ -16,12 +16,12 @@ import ( type WarpSyncProvider interface { // Generate proof starting at given block hash. The proof is accumulated until maximum proof // size is reached. - generate(start common.Hash) (encodedProof []byte, err error) + Generate(start common.Hash) (encodedProof []byte, err error) } func (s *Service) handleWarpSyncRequest(req messages.WarpProofRequest) ([]byte, error) { // use the backend to generate the warp proof - proof, err := s.warpSyncProvider.generate(req.Begin) + proof, err := s.warpSyncProvider.Generate(req.Begin) if err != nil { return nil, err } diff --git a/dot/network/warp_sync_test.go b/dot/network/warp_sync_test.go index ee91f2e9e9..048bc70c1d 100644 --- a/dot/network/warp_sync_test.go +++ b/dot/network/warp_sync_test.go @@ -71,7 +71,7 @@ func TestHandleWarpSyncRequestOk(t *testing.T) { ctrl := gomock.NewController(t) warpSyncProvider := NewMockWarpSyncProvider(ctrl) - warpSyncProvider.EXPECT().generate(common.EmptyHash).Return(expectedProof, nil).Times(1) + warpSyncProvider.EXPECT().Generate(common.EmptyHash).Return(expectedProof, nil).Times(1) // Initiate service using the warp sync provider mock srvc := createServiceWithWarpSyncHelper(t, warpSyncProvider) @@ -94,7 +94,7 @@ func TestHandleWarpSyncRequestError(t *testing.T) { ctrl := gomock.NewController(t) warpSyncProvider := NewMockWarpSyncProvider(ctrl) - warpSyncProvider.EXPECT().generate(common.EmptyHash).Return(nil, expectedError).Times(1) + warpSyncProvider.EXPECT().Generate(common.EmptyHash).Return(nil, expectedError).Times(1) // Initiate service using the warp sync provider mock srvc := createServiceWithWarpSyncHelper(t, warpSyncProvider) diff --git a/dot/services.go b/dot/services.go index a5c3912f0e..dc8a1f0efc 100644 --- a/dot/services.go +++ b/dot/services.go @@ -20,6 +20,7 @@ import ( "github.com/ChainSafe/gossamer/dot/sync" "github.com/ChainSafe/gossamer/dot/system" "github.com/ChainSafe/gossamer/dot/types" + consensus_grandpa "github.com/ChainSafe/gossamer/internal/client/consensus/grandpa" "github.com/ChainSafe/gossamer/internal/database" "github.com/ChainSafe/gossamer/internal/log" "github.com/ChainSafe/gossamer/internal/metrics" @@ -348,6 +349,11 @@ func (nodeBuilder) createNetworkService(config *cfg.Config, stateSrvc *state.Ser if err != nil { return nil, fmt.Errorf("failed to parse network log level: %w", err) } + + warpSyncProvider := consensus_grandpa.NewWarpSyncProofProvider( + stateSrvc.Block, stateSrvc.Grandpa, + ) + // network service configuation networkConfig := network.Config{ LogLvl: networkLogLevel, @@ -370,6 +376,7 @@ func (nodeBuilder) createNetworkService(config *cfg.Config, stateSrvc *state.Ser Metrics: metrics.NewIntervalConfig(config.PrometheusExternal), NodeKey: config.Network.NodeKey, ListenAddress: config.Network.ListenAddress, + WarpSyncProvider: warpSyncProvider, } networkSrvc, err := network.NewService(&networkConfig) diff --git a/internal/client/consensus/grandpa/warp_sync.go b/internal/client/consensus/grandpa/warp_sync.go index 2e7a1289a1..aa1a5e050b 100644 --- a/internal/client/consensus/grandpa/warp_sync.go +++ b/internal/client/consensus/grandpa/warp_sync.go @@ -83,6 +83,13 @@ type WarpSyncProofProvider struct { grandpaState GrandpaState } +func NewWarpSyncProofProvider(blockState BlockState, grandpaState GrandpaState) *WarpSyncProofProvider { + return &WarpSyncProofProvider{ + blockState: blockState, + grandpaState: grandpaState, + } +} + // Generate build a warp sync encoded proof starting from the given block hash func (np *WarpSyncProofProvider) Generate(start common.Hash) ([]byte, error) { // Get and traverse all GRANDPA authorities changes from the given block hash