Struct solana_ledger::entry::Entry[][src]

pub struct Entry {
    pub num_hashes: u64,
    pub hash: Hash,
    pub transactions: Vec<Transaction>,
}

Each Entry contains three pieces of data. The num_hashes field is the number of hashes performed since the previous entry. The hash field is the result of hashing hash from the previous entry num_hashes times. The transactions field points to Transactions that took place shortly before hash was generated.

If you divide num_hashes by the amount of time it takes to generate a new hash, you get a duration estimate since the last Entry. Since processing power increases over time, one should expect the duration num_hashes represents to decrease proportionally. An upper bound on Duration can be estimated by assuming each hash was generated by the world’s fastest processor at the time the entry was recorded. Or said another way, it is physically not possible for a shorter duration to have occurred if one assumes the hash was computed by the world’s fastest processor at that time. The hash chain is both a Verifiable Delay Function (VDF) and a Proof of Work (not to be confused with Proof of Work consensus!)

Fields

num_hashes: u64

The number of hashes since the previous Entry ID.

hash: Hash

The SHA-256 hash num_hashes after the previous Entry ID.

transactions: Vec<Transaction>

An unordered list of transactions that were observed before the Entry ID was generated. They may have been observed before a previous Entry ID but were pushed back into this list to ensure deterministic interpretation of the ledger.

Implementations

impl Entry[src]

pub fn new(
    prev_hash: &Hash,
    num_hashes: u64,
    transactions: Vec<Transaction>
) -> Self
[src]

Creates the next Entry num_hashes after start_hash.

pub fn new_mut(
    start_hash: &mut Hash,
    num_hashes: &mut u64,
    transactions: Vec<Transaction>
) -> Self
[src]

pub fn verify(&self, start_hash: &Hash) -> bool[src]

Verifies self.hash is the result of hashing a start_hash self.num_hashes times. If the transaction is not a Tick, then hash that as well.

pub fn is_tick(&self) -> bool[src]

Trait Implementations

impl Clone for Entry[src]

impl Debug for Entry[src]

impl Default for Entry[src]

impl<'de> Deserialize<'de> for Entry[src]

impl Eq for Entry[src]

impl PartialEq<Entry> for Entry[src]

impl Serialize for Entry[src]

impl StructuralEq for Entry[src]

impl StructuralPartialEq for Entry[src]

Auto Trait Implementations

impl RefUnwindSafe for Entry

impl Send for Entry

impl Sync for Entry

impl Unpin for Entry

impl UnwindSafe for Entry

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> IntoRequest<T> for T[src]

impl<T> MaybeDebug for T where
    T: Debug
[src]

impl<T> Pointable for T[src]

type Init = T

The type for initializers.

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Typeable for T where
    T: Any

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
[src]

impl<T> WithSubscriber for T[src]