pub struct Ack<S: Scheme, D: Digest> {
pub item: Item<D>,
pub epoch: Epoch,
pub attestation: Attestation<S>,
}Expand description
Acknowledgment (ack) represents a validator’s vote on an item. Multiple acks can be recovered into a certificate for consensus.
Fields§
§item: Item<D>The item being acknowledged
epoch: EpochThe epoch in which this acknowledgment was created.
Not part of the signed message: it selects the scheme used to verify the attestation and assemble a certificate. See the module docs.
attestation: Attestation<S>Scheme-specific attestation material
Implementations§
Source§impl<S: Scheme, D: Digest> Ack<S, D>
impl<S: Scheme, D: Digest> Ack<S, D>
Sourcepub fn verify<R>(
&self,
rng: &mut R,
scheme: &S,
strategy: &impl Strategy,
) -> bool
pub fn verify<R>( &self, rng: &mut R, scheme: &S, strategy: &impl Strategy, ) -> bool
Verifies the attestation on this acknowledgment.
Returns true if the attestation is valid for the given namespace and public key.
Domain separation is automatically applied to prevent signature reuse.
Sourcepub fn sign(scheme: &S, epoch: Epoch, item: Item<D>) -> Option<Self>where
S: Scheme<D>,
pub fn sign(scheme: &S, epoch: Epoch, item: Item<D>) -> Option<Self>where
S: Scheme<D>,
Creates a new acknowledgment by signing an item with a validator’s key.
The signature uses domain separation to prevent cross-protocol attacks. The epoch is carried in the ack but is not part of the signed message. See the module docs.
§Determinism
Signatures produced by this function are deterministic and safe for consensus.
Trait Implementations§
Source§impl<S: Scheme, D: Digest> EncodeSize for Ack<S, D>
impl<S: Scheme, D: Digest> EncodeSize for Ack<S, D>
Source§fn encode_size(&self) -> usize
fn encode_size(&self) -> usize
Source§fn encode_inline_size(&self) -> usize
fn encode_inline_size(&self) -> usize
BufsMut::push
during Write::write_bufs. Used to size the working buffer for inline
writes. Override alongside Write::write_bufs for types where large
Bytes fields go via push; failing to do so will over-allocate.impl<S: Eq + Scheme, D: Eq + Digest> Eq for Ack<S, D>
Source§impl<S: Scheme, D: Digest> Read for Ack<S, D>
impl<S: Scheme, D: Digest> Read for Ack<S, D>
impl<S: PartialEq + Scheme, D: PartialEq + Digest> StructuralPartialEq for Ack<S, D>
Source§impl<S: Scheme, D: Digest> Write for Ack<S, D>
impl<S: Scheme, D: Digest> Write for Ack<S, D>
Source§fn write_bufs(&self, buf: &mut impl BufsMut)
fn write_bufs(&self, buf: &mut impl BufsMut)
BufsMut, allowing existing Bytes chunks to be
appended via BufsMut::push instead of written inline. Must encode
to the same format as Write::write. Defaults to Write::write.Auto Trait Implementations§
impl<S, D> !Freeze for Ack<S, D>
impl<S, D> RefUnwindSafe for Ack<S, D>
impl<S, D> Send for Ack<S, D>
impl<S, D> Sync for Ack<S, D>
impl<S, D> Unpin for Ack<S, D>
impl<S, D> UnsafeUnpin for Ack<S, D>
impl<S, D> UnwindSafe for Ack<S, D>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> Codec for T
Source§impl<T> Encode for Twhere
T: Write + EncodeSize,
impl<T> Encode for Twhere
T: Write + EncodeSize,
Source§impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
Source§fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
Source§fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
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<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>
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 more