pub struct ConfirmedBlockCertificate { /* private fields */ }Expand description
Certificate for a ConfirmedBlock instance, certified in some round by a quorum of
ConfirmedBlock votes (which carry no unlocking round).
A confirmed block certificate means that the block is finalized: it is the agreed block at that height on that chain. It wraps the signed quorum and carries the full chain of validated quorums for the block, making it self-contained evidence for fault attribution.
Implementations§
Source§impl ConfirmedBlockCertificate
impl ConfirmedBlockCertificate
Sourcepub fn new(
value: ConfirmedBlock,
round: Round,
signatures: Vec<(ValidatorPublicKey, ValidatorSignature)>,
) -> Self
pub fn new( value: ConfirmedBlock, round: Round, signatures: Vec<(ValidatorPublicKey, ValidatorSignature)>, ) -> Self
Creates a confirmed block certificate with an empty justification chain (first round).
Sourcepub fn from_parts(
quorum: GenericCertificate<ConfirmedBlock>,
justification: JustificationChain,
) -> Self
pub fn from_parts( quorum: GenericCertificate<ConfirmedBlock>, justification: JustificationChain, ) -> Self
Creates a confirmed block certificate from a signed quorum and its justification chain.
Sourcepub fn quorum(&self) -> &GenericCertificate<ConfirmedBlock>
pub fn quorum(&self) -> &GenericCertificate<ConfirmedBlock>
Returns the signed quorum of ConfirmedBlock votes.
Sourcepub fn justification(&self) -> &JustificationChain
pub fn justification(&self) -> &JustificationChain
Returns the full chain of validated quorums for the block.
Sourcepub fn into_parts(
self,
) -> (GenericCertificate<ConfirmedBlock>, JustificationChain)
pub fn into_parts( self, ) -> (GenericCertificate<ConfirmedBlock>, JustificationChain)
Consumes this certificate, returning the signed quorum and the justification chain.
Sourcepub fn into_value(self) -> ConfirmedBlock
pub fn into_value(self) -> ConfirmedBlock
Consumes this certificate, returning the confirmed block it contains.
Sourcepub fn into_inner(self) -> ConfirmedBlock
pub fn into_inner(self) -> ConfirmedBlock
Consumes this certificate, returning the confirmed block it contains.
Sourcepub fn check(&self, committee: &Committee) -> Result<(), ChainError>
pub fn check(&self, committee: &Committee) -> Result<(), ChainError>
Verifies the certificate’s signatures and justification chain: the quorum of
ConfirmedBlock votes, that the justification chain is itself a valid chain of quorums,
and that — if present — it heads at the confirmation round. Delegates to
LiteCertificate::check, the single source of truth for the quorum-to-chain binding.
An absent chain is accepted only when the quorum carries the first-round attestation
(a fast-round confirmation always does, since the fast round is a chain’s first round):
the attestation asserts that no lower round exists, so any conflicting confirmation is
attributable without this block’s chain — via the other block’s chain if it is higher, or
via the attestation itself if it is lower (see EquivocationProof::FirstRoundViolation).
The attestation is also sanity-checked against the round — it can only be set in a round
that could be a chain’s first one. Whether it is the actual first round depends on the
chain’s ownership at that height, which a committee-only check cannot know; that, and the
obligation of a later-round block to carry its chain, rest on honest block construction
(see finalize_block), full-execution verification, and the per-signature justifications
retained by the commitment scheme.
Sourcepub fn lite_certificate(&self) -> LiteCertificate<'_>
pub fn lite_certificate(&self) -> LiteCertificate<'_>
Returns the LiteCertificate corresponding to this certificate, borrowing the chain.
Methods from Deref<Target = GenericCertificate<ConfirmedBlock>>§
Sourcepub fn message_bundles_for(
&self,
recipient: ChainId,
) -> impl Iterator<Item = (Epoch, MessageBundle)> + '_
pub fn message_bundles_for( &self, recipient: ChainId, ) -> impl Iterator<Item = (Epoch, MessageBundle)> + '_
Returns the bundles of messages sent to the specified recipient. Messages originating from different transactions of the original block are kept in separate bundles.
Sourcepub fn outgoing_message_count(&self) -> usize
pub fn outgoing_message_count(&self) -> usize
Returns the total number of outgoing messages in the certified block.
Sourcepub fn unlocking_round(&self) -> Option<Round>
pub fn unlocking_round(&self) -> Option<Round>
Returns the unlocking round the ValidatedBlock voters signed, if any.
Sourcepub fn first_round(&self) -> bool
pub fn first_round(&self) -> bool
Returns the first-round attestation the ConfirmedBlock voters signed.
Sourcepub fn justification_commitment(&self) -> Option<CryptoHash>
pub fn justification_commitment(&self) -> Option<CryptoHash>
Returns the justification commitment the voters signed, if any.
Sourcepub fn value(&self) -> &T
pub fn value(&self) -> &T
Returns a reference to the Hashed value contained in this certificate.
Sourcepub fn hash(&self) -> CryptoHash
pub fn hash(&self) -> CryptoHash
Returns the certified value’s hash.
Sourcepub fn signatures(&self) -> &Vec<(ValidatorPublicKey, ValidatorSignature)>
pub fn signatures(&self) -> &Vec<(ValidatorPublicKey, ValidatorSignature)>
Returns the list of signatures on the certified value.
Sourcepub fn is_signed_by(&self, validator_name: &ValidatorPublicKey) -> bool
pub fn is_signed_by(&self, validator_name: &ValidatorPublicKey) -> bool
Returns whether the validator is among the signatories of this certificate.
Sourcepub fn check(&self, committee: &Committee) -> Result<(), ChainError>where
T: CertificateValue,
pub fn check(&self, committee: &Committee) -> Result<(), ChainError>where
T: CertificateValue,
Verifies the certificate.
Sourcepub fn lite_certificate_without_justification(&self) -> LiteCertificate<'_>where
T: CertificateValue,
pub fn lite_certificate_without_justification(&self) -> LiteCertificate<'_>where
T: CertificateValue,
Returns the LiteCertificate corresponding to this certificate, without the value and
with an empty justification chain.
Named explicitly because a block certificate’s real chain lives on its wrapper
(ConfirmedBlockCertificate/ValidatedBlockCertificate), not on the inner quorum:
calling this on the quorum would silently produce a chainless lite certificate that fails
verification at the receiver. The wrappers use it and then attach their chain; Timeout
certificates carry no chain, so for them it is complete on its own.
Trait Implementations§
Source§impl Certified for ConfirmedBlockCertificate
impl Certified for ConfirmedBlockCertificate
Source§type Value = ConfirmedBlock
type Value = ConfirmedBlock
Source§fn value(&self) -> &ConfirmedBlock
fn value(&self) -> &ConfirmedBlock
Source§fn unlocking_round(&self) -> Option<Round>
fn unlocking_round(&self) -> Option<Round>
ValidatedBlock voters signed, if any.Source§fn signatures(&self) -> &Vec<(ValidatorPublicKey, ValidatorSignature)>
fn signatures(&self) -> &Vec<(ValidatorPublicKey, ValidatorSignature)>
Source§fn lite_certificate(&self) -> LiteCertificate<'_>
fn lite_certificate(&self) -> LiteCertificate<'_>
LiteCertificate corresponding to this certificate, without the value but
with the justification chain.Source§fn check(&self, committee: &Committee) -> Result<(), ChainError>
fn check(&self, committee: &Committee) -> Result<(), ChainError>
Source§fn hash(&self) -> CryptoHash
fn hash(&self) -> CryptoHash
Source§fn is_signed_by(&self, validator_name: &ValidatorPublicKey) -> bool
fn is_signed_by(&self, validator_name: &ValidatorPublicKey) -> bool
Source§impl Clone for ConfirmedBlockCertificate
impl Clone for ConfirmedBlockCertificate
Source§fn clone(&self) -> ConfirmedBlockCertificate
fn clone(&self) -> ConfirmedBlockCertificate
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ConfirmedBlockCertificate
impl Debug for ConfirmedBlockCertificate
Source§impl Deref for ConfirmedBlockCertificate
impl Deref for ConfirmedBlockCertificate
Source§type Target = GenericCertificate<ConfirmedBlock>
type Target = GenericCertificate<ConfirmedBlock>
Source§impl<'de> Deserialize<'de> for ConfirmedBlockCertificate
impl<'de> Deserialize<'de> for ConfirmedBlockCertificate
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl From<&ConfirmedBlockCertificate> for Certificate
impl From<&ConfirmedBlockCertificate> for Certificate
Source§fn from(cert: &ConfirmedBlockCertificate) -> Certificate
fn from(cert: &ConfirmedBlockCertificate) -> Certificate
Source§impl From<ConfirmedBlockCertificate> for Certificate
impl From<ConfirmedBlockCertificate> for Certificate
Source§fn from(cert: ConfirmedBlockCertificate) -> Certificate
fn from(cert: ConfirmedBlockCertificate) -> Certificate
Source§impl TryFrom<Certificate> for ConfirmedBlockCertificate
impl TryFrom<Certificate> for ConfirmedBlockCertificate
Source§type Error = ConversionError
type Error = ConversionError
impl Eq for ConfirmedBlockCertificate
impl StructuralPartialEq for ConfirmedBlockCertificate
Auto Trait Implementations§
impl Freeze for ConfirmedBlockCertificate
impl RefUnwindSafe for ConfirmedBlockCertificate
impl Send for ConfirmedBlockCertificate
impl Sync for ConfirmedBlockCertificate
impl Unpin for ConfirmedBlockCertificate
impl UnsafeUnpin for ConfirmedBlockCertificate
impl UnwindSafe for ConfirmedBlockCertificate
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T> MockResults for T
impl<T> MockResults for T
Source§type Results = T
type Results = T
MockInstance.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<M, I> RuntimeMemory<&mut I> for Mwhere
M: RuntimeMemory<I>,
impl<M, I> RuntimeMemory<&mut I> for Mwhere
M: RuntimeMemory<I>,
Source§fn read<'instance>(
&self,
instance: &'instance &mut I,
location: GuestPointer,
length: u32,
) -> Result<Cow<'instance, [u8]>, RuntimeError>
fn read<'instance>( &self, instance: &'instance &mut I, location: GuestPointer, length: u32, ) -> Result<Cow<'instance, [u8]>, RuntimeError>
Reads length bytes from memory from the provided location.
Source§fn write(
&mut self,
instance: &mut &mut I,
location: GuestPointer,
bytes: &[u8],
) -> Result<(), RuntimeError>
fn write( &mut self, instance: &mut &mut I, location: GuestPointer, bytes: &[u8], ) -> Result<(), RuntimeError>
Writes the bytes to memory at the provided location.
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.