Skip to content

Fixed block finalization conversion in case of empty BLS signature. - #2192

Merged
nickeskov merged 2 commits into
determenistic-finality-featurefrom
fix-bls-signature-validation
Aug 7, 2026
Merged

Fixed block finalization conversion in case of empty BLS signature.#2192
nickeskov merged 2 commits into
determenistic-finality-featurefrom
fix-bls-signature-validation

Conversation

@alexeykiselev

Copy link
Copy Markdown
Collaborator

Fixed finalization validation in case of no valid endorsements.

Fixed finalization validation in case of no valid endorsements.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adjusts deterministic finalization handling to support “conflicts-only” finalization votings (i.e., no valid endorsements), ensuring protobuf conversion and signature verification behave correctly when the aggregated BLS signature is absent/empty.

Changes:

  • Refactors finalization processing to separate endorser collection from aggregated signature verification, and skips signature verification when there are no endorsers.
  • Makes protobuf conversion treat an empty aggregated signature as “absent” (nil) to keep conversions symmetric with FinalizationVoting.ToProtobuf.
  • Updates FinalizationVoting.Validate() semantics and adds tests covering finalized height validation and protobuf round-trips.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
pkg/state/finalizer.go Refactors endorser collection/signature verification; handles no-endorsement votings.
pkg/proto/protobuf_converters.go Avoids parsing empty aggregated signatures; keeps signature pointer nil when absent.
pkg/proto/finalization.go Adjusts finalized height validation behavior for conflicts-only votings.
pkg/proto/finalization_test.go Adds tests for finalized height validation and protobuf round-trip stability.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pkg/state/finalizer.go
Comment on lines +122 to +127
if len(pks) == 0 {
return nil
}
if finalizationVoting.AggregatedEndorsementSignature == nil {
return errors.New("no aggregated signature in finalization voting with endorsements")
}
Comment thread pkg/proto/finalization.go Outdated
Comment on lines 136 to 139
// Finalized block height is meaningful only for endorsements, votings with conflicting endorsements
// only carry no finalized block height.
if len(f.EndorserIndexes) > 0 && f.FinalizedBlockHeight < genesisBlockHeight {
return fmt.Errorf("invalid finalization voting: finalized block height %d is less than genesis block height %d",

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@nickeskov
nickeskov merged commit 473e919 into determenistic-finality-feature Aug 7, 2026
14 checks passed
@nickeskov
nickeskov deleted the fix-bls-signature-validation branch August 7, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants