pub struct SignerBitmap { /* private fields */ }Expand description
Bit vector of “which validators signed,” sized for a fixed validator set (SPEC §2.10).
Implementations§
Source§impl SignerBitmap
impl SignerBitmap
Sourcepub fn new(validator_count: u32) -> Self
pub fn new(validator_count: u32) -> Self
Empty bitmap: all bits zero, sized for validator_count validators.
Panics if validator_count > MAX_VALIDATORS (see MAX_VALIDATORS).
Sourcepub fn from_bytes(bytes: &[u8], validator_count: u32) -> Self
pub fn from_bytes(bytes: &[u8], validator_count: u32) -> Self
Wrap existing bytes (e.g. after deserialization) with a validator count.
Does not copy-truncate bytes to the canonical length; callers should supply ceil(n/8) bytes
consistent with validator_count. Self::as_bytes on a value from Self::new always matches.
Panics if validator_count > MAX_VALIDATORS.
Sourcepub fn has_signed(&self, index: u32) -> bool
pub fn has_signed(&self, index: u32) -> bool
true if validator index has a raised bit and index < validator_count.
Out-of-range indices return false (no panic); short Self::bits tails read as zero.
Sourcepub fn set_signed(&mut self, index: u32) -> Result<(), SignerBitmapError>
pub fn set_signed(&mut self, index: u32) -> Result<(), SignerBitmapError>
Sets the bit for index. Error if index >= validator_count (SignerBitmapError::IndexOutOfBounds).
Sourcepub fn signer_count(&self) -> u32
pub fn signer_count(&self) -> u32
Popcount over all stored bytes (ATT-004 spec algorithm).
For bitmaps produced only via Self::new + Self::set_signed, unused high bits in the last
byte stay zero, so the count matches “number of validators signed.”
Sourcepub fn signing_percentage(&self) -> u64
pub fn signing_percentage(&self) -> u64
Integer percentage 0..=100: (signer_count * 100) / validator_count, or 0 if validator_count == 0
(SPEC §2.10 signing_percentage method).
Sourcepub fn has_threshold(&self, threshold_pct: u64) -> bool
pub fn has_threshold(&self, threshold_pct: u64) -> bool
true iff Self::signing_percentage >= threshold_pct.
Sourcepub fn validator_count(&self) -> u32
pub fn validator_count(&self) -> u32
Validator cardinality configured for this bitmap (NORMATIVE field).
Sourcepub fn merge(&mut self, other: &SignerBitmap) -> Result<(), SignerBitmapError>
pub fn merge(&mut self, other: &SignerBitmap) -> Result<(), SignerBitmapError>
Bitwise OR of other into self (union of signer sets).
ATT-005: Self::validator_count MUST match on both operands; otherwise SignerBitmapError::ValidatorCountMismatch.
§Rationale (vs. spec pseudocode)
The ATT-005 snippet zips byte vectors; if self.bits is shorter than other.bits (e.g. odd
Self::from_bytes layouts), zip would drop trailing OR contributions. This implementation resizes
self.bits to the canonical ceil(validator_count / 8) length, then ORs each index i with
other.bits.get(i).unwrap_or(0), matching “combine all signers” intent while staying commutative on
well-formed bitmaps.
Sourcepub fn signer_indices(&self) -> Vec<u32>
pub fn signer_indices(&self) -> Vec<u32>
All validator indices with a set bit, in ascending order (0 .. validator_count scan).
ATT-005: Order follows the spec loop (i increasing); callers rely on this for deterministic
serialization, tests, and UX (e.g. display). Empty bitmap → empty Vec.
Trait Implementations§
Source§impl Clone for SignerBitmap
impl Clone for SignerBitmap
Source§fn clone(&self) -> SignerBitmap
fn clone(&self) -> SignerBitmap
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SignerBitmap
impl Debug for SignerBitmap
Source§impl<'de> Deserialize<'de> for SignerBitmap
impl<'de> Deserialize<'de> for SignerBitmap
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 PartialEq for SignerBitmap
impl PartialEq for SignerBitmap
Source§impl Serialize for SignerBitmap
impl Serialize for SignerBitmap
impl Eq for SignerBitmap
impl StructuralPartialEq for SignerBitmap
Auto Trait Implementations§
impl Freeze for SignerBitmap
impl RefUnwindSafe for SignerBitmap
impl Send for SignerBitmap
impl Sync for SignerBitmap
impl Unpin for SignerBitmap
impl UnsafeUnpin for SignerBitmap
impl UnwindSafe for SignerBitmap
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,
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<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<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> 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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
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.