Skip to content

Commit

Permalink
light-client-verifier: 🌱 restore verify_commit() interface
Browse files Browse the repository at this point in the history
in #1410, alterations to the `PredicateVerifier<P, C, V>` to improve
performance when verifying commits.

specifically, a call to
`verify_commit_against_trusted(untrusted, trusted, options)` will now
make use of new internal interfaces that check validator signatures and
signer overlap at the same time.

this is a worthwhile performance improvement, but in the process, it
made changes to the public interface of `PredicateVerifier<P, C, V>`
that break some use cases. as i understand it, there is no strict need
to remove the other public interface from the verifier. those that call
`verify_commit_against_trusted` can still receive a performance boost,
but calling `verify_commit` on just the untrusted state should still
work after those changes.

so, this commit restores `verify_commit(untrusted)`, and keeps
`verify_commit_against_trusted(untrusted, trusted, options)` under its
previous name.
  • Loading branch information
cratelyn committed May 21, 2024
1 parent 1b219d2 commit 73480a1
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions light-client-verifier/src/verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,24 @@ where
Verdict::Success
}

/// Verify that more than 2/3 of the validators correctly committed the block.
///
/// Use [`PredicateVerifier::verify_commit_against_trusted()`] to also verify that there is
/// enough overlap between validator sets.
pub fn verify_commit(&self, untrusted: &UntrustedBlockState<'_>) -> Verdict {
verdict!(self.predicates.has_sufficient_signers_overlap(
untrusted.signed_header,
untrusted.validators,
&self.voting_power_calculator,
));

Verdict::Success
}

/// Verify that a) there is enough overlap between the validator sets of the
/// trusted and untrusted blocks and b) more than 2/3 of the validators
/// correctly committed the block.
pub fn verify_commit(
pub fn verify_commit_against_trusted(
&self,
untrusted: &UntrustedBlockState<'_>,
trusted: &TrustedBlockState<'_>,
Expand Down Expand Up @@ -288,7 +302,7 @@ where
ensure_verdict_success!(self.verify_validator_sets(&untrusted));
ensure_verdict_success!(self.validate_against_trusted(&untrusted, &trusted, options, now));
ensure_verdict_success!(self.check_header_is_from_past(&untrusted, options, now));
ensure_verdict_success!(self.verify_commit(&untrusted, &trusted, options));
ensure_verdict_success!(self.verify_commit_against_trusted(&untrusted, &trusted, options));

Verdict::Success
}
Expand All @@ -305,7 +319,7 @@ where
) -> Verdict {
ensure_verdict_success!(self.verify_validator_sets(&untrusted));
ensure_verdict_success!(self.validate_against_trusted(&untrusted, &trusted, options, now));
ensure_verdict_success!(self.verify_commit(&untrusted, &trusted, options));
ensure_verdict_success!(self.verify_commit_against_trusted(&untrusted, &trusted, options));
Verdict::Success
}
}
Expand Down

0 comments on commit 73480a1

Please sign in to comment.