pub trait NewProtocolStorage<T: NodeType>: StorageTrait<T> {
// Required methods
fn append_high_qc2<'life0, 'async_trait>(
&'life0 self,
high_qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn load_high_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn append_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn load_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Expand description
New protocol storage extension for data that is not part of the legacy HotShot storage trait.
Required Methods§
Sourcefn append_high_qc2<'life0, 'async_trait>(
&'life0 self,
high_qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn append_high_qc2<'life0, 'async_trait>(
&'life0 self,
high_qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Persist the locked QC, written before each phase-2 vote so the lock survives a restart instead of regressing to the decided-anchor QC.
Sourcefn load_high_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn load_high_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Load the persisted locked QC, if any.
Sourcefn append_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn append_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
qc: Certificate1<T>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Persist the own Certificate1 of the last block of an epoch, at the
block’s own view.
A re-vote request and the next epoch’s first block name it, and nothing else carries it once the view has passed: without it a restarted node cannot lead either. Implementations keep the latest, ordered by epoch, then view, as a monotonic compare-and-set.
Sourcefn load_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn load_boundary_qc2<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<Certificate1<T>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Load the persisted boundary certificate, if any.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".