diff --git a/block/block.go b/block/block.go index 77f12070d..9af9e5c11 100644 --- a/block/block.go +++ b/block/block.go @@ -48,6 +48,11 @@ func (m *Manager) applyBlock(block *types.Block, commit *types.Commit, blockMeta return fmt.Errorf("save block: %w", err) } + err := m.saveP2PBlockToBlockSync(block, commit) + if err != nil { + m.logger.Error("save block blocksync", "err", err) + } + responses, err := m.Executor.ExecuteBlock(m.State, block) if err != nil { return fmt.Errorf("execute block: %w", err) diff --git a/block/p2p.go b/block/p2p.go index c9382d006..1fc904bf9 100644 --- a/block/p2p.go +++ b/block/p2p.go @@ -80,3 +80,17 @@ func (m *Manager) gossipBlock(ctx context.Context, block types.Block, commit typ return nil } + +// This function adds the block to blocksync store to enable P2P retrievability +func (m *Manager) saveP2PBlockToBlockSync(block *types.Block, commit *types.Commit) error { + gossipedBlock := p2p.BlockData{Block: *block, Commit: *commit} + gossipedBlockBytes, err := gossipedBlock.MarshalBinary() + if err != nil { + return fmt.Errorf("marshal binary: %w: %w", err, ErrNonRecoverable) + } + err = m.P2PClient.SaveBlock(context.Background(), block.Header.Height, gossipedBlockBytes) + if err != nil { + m.logger.Error("Adding block to blocksync store.", "err", err, "height", gossipedBlock.Block.Header.Height) + } + return nil +} diff --git a/go.mod b/go.mod index d740ac8fb..9ddb6e032 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.11.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/gogoproto v1.5.0 // indirect + github.com/cosmos/gogoproto v1.5.0 github.com/creachadair/taskgroup v0.3.2 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect diff --git a/p2p/client.go b/p2p/client.go index 42c4e7323..4f5714ef0 100644 --- a/p2p/client.go +++ b/p2p/client.go @@ -519,6 +519,11 @@ func (c *Client) blockGossipReceived(ctx context.Context, block []byte) { c.logger.Error("Publishing event.", "err", err) } if c.conf.BlockSyncEnabled { + _, err := c.store.LoadBlockCid(gossipedBlock.Block.Header.Height) + // skip block already added to blocksync + if err == nil { + return + } err = c.SaveBlock(ctx, gossipedBlock.Block.Header.Height, block) if err != nil { c.logger.Error("Adding block to blocksync store.", "err", err, "height", gossipedBlock.Block.Header.Height) diff --git a/proto/types/dymint/state.proto b/proto/types/dymint/state.proto index 1c7e53246..a12631126 100755 --- a/proto/types/dymint/state.proto +++ b/proto/types/dymint/state.proto @@ -44,7 +44,7 @@ message State { SequencerSet sequencerSet = 18 [(gogoproto.nullable) = false]; RollappConsensusParams consensus_params = 19 [(gogoproto.nullable) = false]; - + } //rollapp params defined in genesis and updated via gov proposal