From bf05d09428dad54559e5173b8602abb09c1251d0 Mon Sep 17 00:00:00 2001 From: William Banfield Date: Fri, 20 May 2022 11:14:58 -0400 Subject: [PATCH] basic logic to make extneded commit optional --- internal/blocksync/pool.go | 6 ++++-- internal/blocksync/reactor.go | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/internal/blocksync/pool.go b/internal/blocksync/pool.go index 30bb6962e..64ce54dc6 100644 --- a/internal/blocksync/pool.go +++ b/internal/blocksync/pool.go @@ -280,7 +280,7 @@ func (pool *BlockPool) AddBlock(peerID types.NodeID, block *types.Block, extComm pool.mtx.Lock() defer pool.mtx.Unlock() - if block.Height != extCommit.Height { + if extCommit != nil && block.Height != extCommit.Height { return fmt.Errorf("heights don't match, not adding block (block height: %d, commit height: %d)", block.Height, extCommit.Height) } @@ -597,7 +597,9 @@ func (bpr *bpRequester) setBlock(block *types.Block, extCommit *types.ExtendedCo return false } bpr.block = block - bpr.extCommit = extCommit + if extCommit != nil { + bpr.extCommit = extCommit + } bpr.mtx.Unlock() select { diff --git a/internal/blocksync/reactor.go b/internal/blocksync/reactor.go index 472efd582..f1a1333e8 100644 --- a/internal/blocksync/reactor.go +++ b/internal/blocksync/reactor.go @@ -250,12 +250,16 @@ func (r *Reactor) handleMessage(ctx context.Context, envelope *p2p.Envelope, blo "err", err) return err } - extCommit, err := types.ExtendedCommitFromProto(msg.ExtCommit) - if err != nil { - r.logger.Error("failed to convert extended commit from proto", - "peer", envelope.From, - "err", err) - return err + var extCommit *types.ExtendedCommit + if msg.ExtCommit != nil { + var err error + extCommit, err = types.ExtendedCommitFromProto(msg.ExtCommit) + if err != nil { + r.logger.Error("failed to convert extended commit from proto", + "peer", envelope.From, + "err", err) + return err + } } if err := r.pool.AddBlock(envelope.From, block, extCommit, block.Size()); err != nil { @@ -629,6 +633,10 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool, blockSyncCh if state.ConsensusParams.ABCI.VoteExtensionsEnabled(first.Height) { r.store.SaveBlockWithExtendedCommit(first, firstParts, extCommit) } else { + // We use LastCommit here instead of extCommit. extCommit is not + // guaranteed to be populated by the peer if extensions are not enabled. + // Currently, the peer should provide an extCommit even if the vote extension data are absent + // but this may change so using second.LastCommit is safer. r.store.SaveBlock(first, firstParts, second.LastCommit) }