VerificationPredicates

Trait VerificationPredicates 

Source
pub trait VerificationPredicates: Send + Sync {
    type Sha256: MerkleHash + Sha256 + Default;

    // Provided methods
    fn validator_sets_match(
        &self,
        validators: &Set,
        header_validators_hash: Hash,
    ) -> Result<(), VerificationError> { ... }
    fn next_validators_match(
        &self,
        next_validators: &Set,
        header_next_validators_hash: Hash,
    ) -> Result<(), VerificationError> { ... }
    fn header_matches_commit(
        &self,
        header: &Header,
        commit_hash: Hash,
    ) -> Result<(), VerificationError> { ... }
    fn valid_commit(
        &self,
        signed_header: &SignedHeader,
        validators: &Set,
        commit_validator: &dyn CommitValidator,
    ) -> Result<(), VerificationError> { ... }
    fn is_within_trust_period(
        &self,
        trusted_header_time: Time,
        trusting_period: Duration,
        now: Time,
    ) -> Result<(), VerificationError> { ... }
    fn is_header_from_past(
        &self,
        untrusted_header_time: Time,
        clock_drift: Duration,
        now: Time,
    ) -> Result<(), VerificationError> { ... }
    fn is_monotonic_bft_time(
        &self,
        untrusted_header_time: Time,
        trusted_header_time: Time,
    ) -> Result<(), VerificationError> { ... }
    fn is_monotonic_height(
        &self,
        untrusted_height: Height,
        trusted_height: Height,
    ) -> Result<(), VerificationError> { ... }
    fn is_matching_chain_id(
        &self,
        untrusted_chain_id: &Id,
        trusted_chain_id: &Id,
    ) -> Result<(), VerificationError> { ... }
    fn has_sufficient_validators_overlap(
        &self,
        untrusted_sh: &SignedHeader,
        trusted_validators: &Set,
        trust_threshold: &TrustThresholdFraction,
        calculator: &dyn VotingPowerCalculator,
    ) -> Result<(), VerificationError> { ... }
    fn has_sufficient_signers_overlap(
        &self,
        untrusted_sh: &SignedHeader,
        untrusted_validators: &Set,
        calculator: &dyn VotingPowerCalculator,
    ) -> Result<(), VerificationError> { ... }
    fn valid_next_validator_set(
        &self,
        untrusted_validators_hash: Hash,
        trusted_next_validators_hash: Hash,
    ) -> Result<(), VerificationError> { ... }
}
Expand description

Defines the various predicates used to validate and verify light blocks.

A default, spec abiding implementation is provided for each method.

This enables test implementations to only override a single method rather than have to re-define every predicate.

Required Associated Types§

Source

type Sha256: MerkleHash + Sha256 + Default

The implementation of SHA256 digest

Provided Methods§

Source

fn validator_sets_match( &self, validators: &Set, header_validators_hash: Hash, ) -> Result<(), VerificationError>

Compare the provided validator_set_hash against the hash produced from hashing the validator set.

Source

fn next_validators_match( &self, next_validators: &Set, header_next_validators_hash: Hash, ) -> Result<(), VerificationError>

Check that the hash of the next validator set in the header match the actual one.

Source

fn header_matches_commit( &self, header: &Header, commit_hash: Hash, ) -> Result<(), VerificationError>

Check that the hash of the header in the commit matches the actual one.

Source

fn valid_commit( &self, signed_header: &SignedHeader, validators: &Set, commit_validator: &dyn CommitValidator, ) -> Result<(), VerificationError>

Validate the commit using the given commit validator.

Source

fn is_within_trust_period( &self, trusted_header_time: Time, trusting_period: Duration, now: Time, ) -> Result<(), VerificationError>

Check that the trusted header is within the trusting period, adjusting for clock drift.

Source

fn is_header_from_past( &self, untrusted_header_time: Time, clock_drift: Duration, now: Time, ) -> Result<(), VerificationError>

Check that the untrusted header is from past.

Source

fn is_monotonic_bft_time( &self, untrusted_header_time: Time, trusted_header_time: Time, ) -> Result<(), VerificationError>

Check that time passed monotonically between the trusted header and the untrusted one.

Source

fn is_monotonic_height( &self, untrusted_height: Height, trusted_height: Height, ) -> Result<(), VerificationError>

Check that the height increased between the trusted header and the untrusted one.

Source

fn is_matching_chain_id( &self, untrusted_chain_id: &Id, trusted_chain_id: &Id, ) -> Result<(), VerificationError>

Check that the chain-ids of the trusted header and the untrusted one are the same

Source

fn has_sufficient_validators_overlap( &self, untrusted_sh: &SignedHeader, trusted_validators: &Set, trust_threshold: &TrustThresholdFraction, calculator: &dyn VotingPowerCalculator, ) -> Result<(), VerificationError>

Check that there is enough validators overlap between the trusted validator set and the untrusted signed header.

Source

fn has_sufficient_signers_overlap( &self, untrusted_sh: &SignedHeader, untrusted_validators: &Set, calculator: &dyn VotingPowerCalculator, ) -> Result<(), VerificationError>

Check that there is enough signers overlap between the given, untrusted validator set and the untrusted signed header.

Source

fn valid_next_validator_set( &self, untrusted_validators_hash: Hash, trusted_next_validators_hash: Hash, ) -> Result<(), VerificationError>

Check that the hash of the next validator set in the trusted block matches the hash of the validator set in the untrusted one.

Implementors§