pub struct Coding<B, C, H, P>(/* private fields */)
where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey;Expand description
The coding variant of Marshal, which uses erasure coding for block dissemination.
This variant distributes blocks as erasure-coded shards, allowing reconstruction from a subset of shards. This reduces bandwidth requirements for block propagation.
Trait Implementations§
Source§impl<B, C, H, P> Buffer<Coding<B, C, H, P>> for Mailbox<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
impl<B, C, H, P> Buffer<Coding<B, C, H, P>> for Mailbox<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
Source§async fn find_by_digest(
&self,
digest: <CodedBlock<B, C, H> as Digestible>::Digest,
) -> Option<Arc<CodedBlock<B, C, H>>>
async fn find_by_digest( &self, digest: <CodedBlock<B, C, H> as Digestible>::Digest, ) -> Option<Arc<CodedBlock<B, C, H>>>
Attempt to find a block by its digest. Read more
Source§async fn find_by_commitment(
&self,
commitment: Commitment<B, C, H>,
) -> Option<Arc<CodedBlock<B, C, H>>>
async fn find_by_commitment( &self, commitment: Commitment<B, C, H>, ) -> Option<Arc<CodedBlock<B, C, H>>>
Attempt to find a block by its commitment. Read more
Source§fn subscribe_by_digest(
&self,
digest: <CodedBlock<B, C, H> as Digestible>::Digest,
) -> Option<Receiver<Arc<CodedBlock<B, C, H>>>>
fn subscribe_by_digest( &self, digest: <CodedBlock<B, C, H> as Digestible>::Digest, ) -> Option<Receiver<Arc<CodedBlock<B, C, H>>>>
Subscribe to a block’s availability by its digest. Read more
Source§fn subscribe_by_commitment(
&self,
commitment: Commitment<B, C, H>,
) -> Option<Receiver<Arc<CodedBlock<B, C, H>>>>
fn subscribe_by_commitment( &self, commitment: Commitment<B, C, H>, ) -> Option<Receiver<Arc<CodedBlock<B, C, H>>>>
Subscribe to a block’s availability by its commitment. Read more
Source§fn send(
&self,
round: Round,
block: Arc<CodedBlock<B, C, H>>,
_recipients: Recipients<P>,
)
fn send( &self, round: Round, block: Arc<CodedBlock<B, C, H>>, _recipients: Recipients<P>, )
Send a block to peers.
Source§impl<B, C, H, P> Clone for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
impl<B, C, H, P> Clone for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
impl<B, C, H, P> Copy for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
Source§impl<B, C, H, P> Default for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec + Default,
C: CodingScheme + Default,
H: Hasher + Default,
P: PublicKey + Default,
impl<B, C, H, P> Default for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec + Default,
C: CodingScheme + Default,
H: Hasher + Default,
P: PublicKey + Default,
Source§impl<B, C, H, P> Variant for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
impl<B, C, H, P> Variant for Coding<B, C, H, P>where
B: CertifiableBlock<Context = Context<Commitment<B, C, H>, P>> + Codec,
C: CodingScheme,
H: Hasher,
P: PublicKey,
Source§fn max_buffer_payload_size(participants: u32, application: usize) -> usize
fn max_buffer_payload_size(participants: u32, application: usize) -> usize
Returns an upper bound on the encoded size of any shard a committee of 4 to participants
members codes from a block of at most application bytes.
§Panics
Panics if participants is below 4 or above u16::MAX.
Source§type ApplicationBlock = B
type ApplicationBlock = B
The application block type, as decoded from the wire.
Source§type Block = Arc<CodedBlock<B, C, H>>
type Block = Arc<CodedBlock<B, C, H>>
The working block type of marshal, whose digest and consensus commitment are ready. Read more
Source§type StoredBlock = StoredCodedBlock<B, C, H>
type StoredBlock = StoredCodedBlock<B, C, H>
The type of block stored in the archive, as decoded from storage. Read more
Source§type Commitment = Commitment<B, C, H>
type Commitment = Commitment<B, C, H>
The
Digest type used by consensus.Source§fn commitment(block: &Self::Block) -> Self::Commitment
fn commitment(block: &Self::Block) -> Self::Commitment
Returns the consensus commitment of a block. Read more
Source§fn commitment_to_inner(
commitment: Self::Commitment,
) -> <Self::Block as Digestible>::Digest
fn commitment_to_inner( commitment: Self::Commitment, ) -> <Self::Block as Digestible>::Digest
Extracts the block digest from a consensus commitment. Read more
Source§fn parent_commitment(block: &Self::Block) -> Self::Commitment
fn parent_commitment(block: &Self::Block) -> Self::Commitment
Returns the parent commitment referenced by
block.Source§fn stored_parent_commitment(block: &Self::StoredBlock) -> Self::Commitment
fn stored_parent_commitment(block: &Self::StoredBlock) -> Self::Commitment
Returns the parent commitment referenced by a stored block. Read more
Source§fn check_payload<S>(scheme: &S, payload: Self::Commitment) -> boolwhere
S: SimplexScheme<Self::Commitment>,
fn check_payload<S>(scheme: &S, payload: Self::Commitment) -> boolwhere
S: SimplexScheme<Self::Commitment>,
Validates a certificate payload against the active consensus scheme.
Source§fn decode_block(
buf: impl Input,
block_cfg: &<Self::ApplicationBlock as Read>::Cfg,
expected: ExpectedCommitment<Self::Commitment>,
strategy: &impl Strategy,
) -> impl Future<Output = Result<Self::Block, CodecError>> + Send
fn decode_block( buf: impl Input, block_cfg: &<Self::ApplicationBlock as Read>::Cfg, expected: ExpectedCommitment<Self::Commitment>, strategy: &impl Strategy, ) -> impl Future<Output = Result<Self::Block, CodecError>> + Send
Decodes a
Self::Block received over the wire, failing unless Self::commitment of
the result equals the commitment in expected.Source§fn restore(
stored: Self::StoredBlock,
digest: <Self::Block as Digestible>::Digest,
) -> Self::Block
fn restore( stored: Self::StoredBlock, digest: <Self::Block as Digestible>::Digest, ) -> Self::Block
Restores a working block from its stored form and
digest, the key it was stored under.Source§fn restore_across(
stored: Self::StoredBlock,
_strategy: &impl Strategy,
) -> impl Future<Output = Self::Block> + Send
fn restore_across( stored: Self::StoredBlock, _strategy: &impl Strategy, ) -> impl Future<Output = Self::Block> + Send
Restores a working block from its stored form when the key it was stored under is
unknown, computing any identity the stored form lacks as a job on
strategy.Converts a working block to the application block without copying the payload.
Source§fn from_application_block(
block: Digested<Self::ApplicationBlock>,
payload: Self::Commitment,
) -> Self::Block
fn from_application_block( block: Digested<Self::ApplicationBlock>, payload: Self::Commitment, ) -> Self::Block
Reconstructs a working block from an application block and the trusted consensus payload
that commits to it. Read more
Source§fn max_backfill_block_size(application: usize) -> usize
fn max_backfill_block_size(application: usize) -> usize
Returns the largest encoded size of a
Self::Block a backfill response carries for an
application block of at most application encoded bytes.Auto Trait Implementations§
impl<B, C, H, P> Freeze for Coding<B, C, H, P>
impl<B, C, H, P> RefUnwindSafe for Coding<B, C, H, P>
impl<B, C, H, P> Send for Coding<B, C, H, P>
impl<B, C, H, P> Sync for Coding<B, C, H, P>
impl<B, C, H, P> Unpin for Coding<B, C, H, P>
impl<B, C, H, P> UnsafeUnpin for Coding<B, C, H, P>
impl<B, C, H, P> UnwindSafe for Coding<B, C, H, P>
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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> ⓘ
Converts
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> ⓘ
Converts
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 more