pub struct BalancesDiff {
pub tags: BitTagVec,
pub mode: i64,
pub varint_payload: Vec<u8>,
pub target_values: Vec<u64>,
pub appended_balances: Vec<u64>,
}Expand description
Compact representation of the difference between two validator balance snapshots.
The representation combines four mechanisms:
BitTagVecstores a two-bit operation for each balance;modestores the most common representable balance difference;varint_payloadstores mode-adjusted signed differences using zig-zag encoding; andtarget_valuesstores balances that are more efficiently represented as absolute values.
Validators that exist only in the target snapshot are stored in
appended_balances.
This representation is designed to serialize efficiently with rkyv and
compress well with general-purpose compressors such as zstd.
§Reconstruction
Each tag determines how the corresponding target balance is reconstructed:
- unchanged balances require no payload;
- zero balances are set directly to zero;
- difference-encoded balances are reconstructed from
modeand the corresponding varint; and - absolute values are read from
target_values.
Fields§
Packed two-bit operation tags for the common balance range.
mode: i64Most frequently occurring representable balance difference.
Difference-encoded balances store their difference relative to this value before zig-zag and varint encoding.
varint_payload: Vec<u8>Zig-zag encoded, varint-serialized balance differences.
target_values: Vec<u64>Absolute target balances for changes represented without a difference.
appended_balances: Vec<u64>Balances belonging to validators appended to the target vector.
Trait Implementations§
Source§impl Archive for BalancesDiff
impl Archive for BalancesDiff
Source§const COPY_OPTIMIZATION: CopyOptimization<Self>
const COPY_OPTIMIZATION: CopyOptimization<Self>
serialize. Read moreSource§type Archived = ArchivedBalancesDiff
type Archived = ArchivedBalancesDiff
Source§type Resolver = BalancesDiffResolver
type Resolver = BalancesDiffResolver
Source§impl Clone for BalancesDiff
impl Clone for BalancesDiff
Source§fn clone(&self) -> BalancesDiff
fn clone(&self) -> BalancesDiff
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BalancesDiff
impl Debug for BalancesDiff
Source§impl<__D: Fallible + ?Sized> Deserialize<BalancesDiff, __D> for Archived<BalancesDiff>where
BitTagVec: Archive,
<BitTagVec as Archive>::Archived: Deserialize<BitTagVec, __D>,
i64: Archive,
<i64 as Archive>::Archived: Deserialize<i64, __D>,
Vec<u8>: Archive,
<Vec<u8> as Archive>::Archived: Deserialize<Vec<u8>, __D>,
Vec<u64>: Archive,
<Vec<u64> as Archive>::Archived: Deserialize<Vec<u64>, __D>,
impl<__D: Fallible + ?Sized> Deserialize<BalancesDiff, __D> for Archived<BalancesDiff>where
BitTagVec: Archive,
<BitTagVec as Archive>::Archived: Deserialize<BitTagVec, __D>,
i64: Archive,
<i64 as Archive>::Archived: Deserialize<i64, __D>,
Vec<u8>: Archive,
<Vec<u8> as Archive>::Archived: Deserialize<Vec<u8>, __D>,
Vec<u64>: Archive,
<Vec<u64> as Archive>::Archived: Deserialize<Vec<u64>, __D>,
Source§fn deserialize(
&self,
deserializer: &mut __D,
) -> Result<BalancesDiff, <__D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut __D, ) -> Result<BalancesDiff, <__D as Fallible>::Error>
impl Eq for BalancesDiff
Source§impl PartialEq for BalancesDiff
impl PartialEq for BalancesDiff
impl StructuralPartialEq for BalancesDiff
Auto Trait Implementations§
impl Freeze for BalancesDiff
impl RefUnwindSafe for BalancesDiff
impl Send for BalancesDiff
impl Sync for BalancesDiff
impl Unpin for BalancesDiff
impl UnsafeUnpin for BalancesDiff
impl UnwindSafe for BalancesDiff
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> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be
unsized. Read moreSource§fn archived_metadata(
&self,
) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
fn archived_metadata( &self, ) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
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<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, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.