pub struct SectionsDAG { /* private fields */ }Expand description
A Merkle DAG of BLS keys where every key is signed by its parent key, except the genesis one.
Implementations§
Source§impl SectionsDAG
impl SectionsDAG
Sourcepub fn verify_and_insert(
&mut self,
parent_key: &PublicKey,
key: PublicKey,
signature: Signature,
) -> Result<()>
pub fn verify_and_insert( &mut self, parent_key: &PublicKey, key: PublicKey, signature: Signature, ) -> Result<()>
Insert new key into the DAG. parent_key must exist in the DAG and must validate
signature, otherwise error is returned.
Sourcepub fn partial_dag(&self, from: &PublicKey, to: &PublicKey) -> Result<Self>
pub fn partial_dag(&self, from: &PublicKey, to: &PublicKey) -> Result<Self>
Get a partial SectionsDAG from the from key to the to key
Returns Error::KeyNotFound if the to key is not present in the DAG;
Returns Error::InvalidBranch if the from key is not found or is not a direct ancestor of the to key
Sourcepub fn single_branch_dag_for_key(
&self,
key: &PublicKey,
) -> Result<(Self, PublicKey)>
pub fn single_branch_dag_for_key( &self, key: &PublicKey, ) -> Result<(Self, PublicKey)>
Get a partial SectionsDAG with a single branch which contains the given key,
from the genesis to the last key of any of its children branches.
It also returns the last key of the (single) branch the returned DAG contains.
Returns Error::KeyNotFound if the key key is not present in the DAG;
Sourcepub fn merge(&mut self, other: Self) -> Result<()>
pub fn merge(&mut self, other: Self) -> Result<()>
Update our current SectionsDAG with the keys from another SectionsDAG
Returns Error::InvalidSignature if the provided DAG fails signature verification
Returns Error::KeyNotFound if the genesis_key of either of the DAGs is not present in the
other
Sourcepub fn genesis_key(&self) -> &PublicKey
pub fn genesis_key(&self) -> &PublicKey
Returns the genesis key
Sourcepub fn keys(&self) -> impl Iterator<Item = PublicKey> + '_
pub fn keys(&self) -> impl Iterator<Item = PublicKey> + '_
Iterator over all the keys in the SectionsDAG
Sourcepub fn has_key(&self, key: &PublicKey) -> bool
pub fn has_key(&self, key: &PublicKey) -> bool
Returns whether key is present in this SectionsDAG.
Sourcepub fn self_verify(&self) -> bool
pub fn self_verify(&self) -> bool
Verify every BLS key in the DAG is proven (signed) by its parent key, except the genesis key
Sourcepub fn check_trust<I>(&self, trusted_keys: I) -> boolwhere
I: IntoIterator<Item = PublicKey>,
pub fn check_trust<I>(&self, trusted_keys: I) -> boolwhere
I: IntoIterator<Item = PublicKey>,
Returns true if the genesis_key is present in the list of trusted_keys
Sourcepub fn get_parent_key(&self, key: &PublicKey) -> Result<Option<PublicKey>>
pub fn get_parent_key(&self, key: &PublicKey) -> Result<Option<PublicKey>>
Returns the parent of the provided key. None is returned if we’re provided the genesis_key
Can return Error::KeyNotFound
Sourcepub fn get_ancestors(&self, key: &PublicKey) -> Result<Vec<PublicKey>>
pub fn get_ancestors(&self, key: &PublicKey) -> Result<Vec<PublicKey>>
Returns the ancestors of the provided key. List is empty if we’re provided the genesis_key
Can return Error::KeyNotFound
Trait Implementations§
Source§impl Clone for SectionsDAG
impl Clone for SectionsDAG
Source§fn clone(&self) -> SectionsDAG
fn clone(&self) -> SectionsDAG
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SectionsDAG
impl Debug for SectionsDAG
Source§impl<'de> Deserialize<'de> for SectionsDAG
impl<'de> Deserialize<'de> for SectionsDAG
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 SectionsDAG
impl PartialEq for SectionsDAG
Source§impl Serialize for SectionsDAG
impl Serialize for SectionsDAG
impl Eq for SectionsDAG
impl StructuralPartialEq for SectionsDAG
Auto Trait Implementations§
impl Freeze for SectionsDAG
impl RefUnwindSafe for SectionsDAG
impl Send for SectionsDAG
impl Sync for SectionsDAG
impl Unpin for SectionsDAG
impl UnwindSafe for SectionsDAG
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<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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§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> Pointable for T
impl<T> Pointable for T
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.