pub struct CompactVoteStateUpdate {
pub root: Slot,
pub root_to_first_vote_offset: u64,
pub lockouts_32: Vec<CompactLockout<u32>>,
pub lockouts_16: Vec<CompactLockout<u16>>,
pub lockouts_8: Vec<CompactLockout<u8>>,
pub hash: Hash,
pub timestamp: Option<UnixTimestamp>,
}
Expand description
Ignoring overhead, in a full VoteStateUpdate
the lockouts take up
31 * (64 + 32) = 2976 bits.
In this schema we separate the votes into 3 separate lockout structures and store offsets rather than slot number, allowing us to use smaller fields.
In a full CompactVoteStateUpdate
the lockouts take up
64 + (32 + 8) * 16 + (16 + 8) * 8 + (8 + 8) * 6 = 992 bits
allowing us to greatly reduce block size.
Fields
root: Slot
The proposed root, u64::MAX if there is no root
root_to_first_vote_offset: u64
The offset from the root (or 0 if no root) to the first vote
lockouts_32: Vec<CompactLockout<u32>>
Part of the proposed tower, votes with confirmation_count > 15
lockouts_16: Vec<CompactLockout<u16>>
Part of the proposed tower, votes with 15 >= confirmation_count > 7
lockouts_8: Vec<CompactLockout<u8>>
Part of the proposed tower, votes with 7 >= confirmation_count
hash: Hash
Signature of the bank’s state at the last slot
timestamp: Option<UnixTimestamp>
Processing timestamp of last slot
Implementations
Trait Implementations
sourceimpl AbiExample for CompactVoteStateUpdate
impl AbiExample for CompactVoteStateUpdate
sourceimpl Clone for CompactVoteStateUpdate
impl Clone for CompactVoteStateUpdate
sourcefn clone(&self) -> CompactVoteStateUpdate
fn clone(&self) -> CompactVoteStateUpdate
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for CompactVoteStateUpdate
impl Debug for CompactVoteStateUpdate
sourceimpl Default for CompactVoteStateUpdate
impl Default for CompactVoteStateUpdate
sourcefn default() -> CompactVoteStateUpdate
fn default() -> CompactVoteStateUpdate
Returns the “default value” for a type. Read more
sourceimpl<'de> Deserialize<'de> for CompactVoteStateUpdate
impl<'de> Deserialize<'de> for CompactVoteStateUpdate
sourcefn 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>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl From<CompactVoteStateUpdate> for VoteStateUpdate
impl From<CompactVoteStateUpdate> for VoteStateUpdate
sourcefn from(vote_state_update: CompactVoteStateUpdate) -> Self
fn from(vote_state_update: CompactVoteStateUpdate) -> Self
Converts to this type from the input type.
sourceimpl From<CompactVoteStateUpdate> for VoteTransaction
impl From<CompactVoteStateUpdate> for VoteTransaction
sourcefn from(compact_state_update: CompactVoteStateUpdate) -> Self
fn from(compact_state_update: CompactVoteStateUpdate) -> Self
Converts to this type from the input type.
sourceimpl From<VoteStateUpdate> for CompactVoteStateUpdate
impl From<VoteStateUpdate> for CompactVoteStateUpdate
sourcefn from(vote_state_update: VoteStateUpdate) -> Self
fn from(vote_state_update: VoteStateUpdate) -> Self
Converts to this type from the input type.
sourceimpl PartialEq<CompactVoteStateUpdate> for CompactVoteStateUpdate
impl PartialEq<CompactVoteStateUpdate> for CompactVoteStateUpdate
sourcefn eq(&self, other: &CompactVoteStateUpdate) -> bool
fn eq(&self, other: &CompactVoteStateUpdate) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &CompactVoteStateUpdate) -> bool
fn ne(&self, other: &CompactVoteStateUpdate) -> bool
This method tests for !=
.
sourceimpl Serialize for CompactVoteStateUpdate
impl Serialize for CompactVoteStateUpdate
impl Eq for CompactVoteStateUpdate
impl StructuralEq for CompactVoteStateUpdate
impl StructuralPartialEq for CompactVoteStateUpdate
Auto Trait Implementations
impl RefUnwindSafe for CompactVoteStateUpdate
impl Send for CompactVoteStateUpdate
impl Sync for CompactVoteStateUpdate
impl Unpin for CompactVoteStateUpdate
impl UnwindSafe for CompactVoteStateUpdate
Blanket Implementations
sourceimpl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
default fn visit_for_abi(
&self,
digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
sourceimpl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
default fn visit_for_abi(
&self,
_digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
sourceimpl<T> AbiExample for T
impl<T> AbiExample for T
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pointable for T
impl<T> Pointable for T
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more