pub struct SpreadPrefixKeyMapper;
Expand description
A DatabaseKeyMapper
tailored for databases which cannot tolerate long common prefixes
among keys (for performance reasons). In other words, it spreads the keys “evenly” (i.e.
pseudo-randomly) across the key space. For context: our use-case for this is the Jellyfish
Merkle Tree.
This implementation is the actual, protocol-enforced one, to be used in public Radix networks.
This implementation achieves the prefix-spreading by adding a hash prefix (shortened hash for performance reasons, but still hard to crack) to:
- the ReNode part of DB Partition key
- the Map key and Sorted key flavors of SubstateKey
Trait Implementations§
Source§impl DatabaseKeyMapper for SpreadPrefixKeyMapper
impl DatabaseKeyMapper for SpreadPrefixKeyMapper
Source§fn to_db_node_key(node_id: &NodeId) -> Vec<u8> ⓘ
fn to_db_node_key(node_id: &NodeId) -> Vec<u8> ⓘ
Converts the given Node ID to the database Node key.
Source§fn from_db_node_key(db_node_key: &Vec<u8>) -> NodeId
fn from_db_node_key(db_node_key: &Vec<u8>) -> NodeId
Converts the database Node key back to ReNode ID.
Source§fn to_db_partition_num(partition_num: PartitionNumber) -> u8
fn to_db_partition_num(partition_num: PartitionNumber) -> u8
Converts the given Partition number to the database Partition number.
Source§fn from_db_partition_num(db_partition_num: u8) -> PartitionNumber
fn from_db_partition_num(db_partition_num: u8) -> PartitionNumber
Converts the database Partition number back to a Partition number.
fn field_to_db_sort_key(fields_key: &u8) -> DbSortKey
fn field_from_db_sort_key(db_sort_key: &DbSortKey) -> u8
fn map_to_db_sort_key(map_key: &Vec<u8>) -> DbSortKey
fn map_from_db_sort_key(db_sort_key: &DbSortKey) -> Vec<u8> ⓘ
fn sorted_to_db_sort_key(sorted_key: &([u8; 2], Vec<u8>)) -> DbSortKey
fn sorted_from_db_sort_key(db_sort_key: &DbSortKey) -> ([u8; 2], Vec<u8>)
Source§fn to_db_partition_key(
node_id: &NodeId,
partition_num: PartitionNumber,
) -> DbPartitionKey
fn to_db_partition_key( node_id: &NodeId, partition_num: PartitionNumber, ) -> DbPartitionKey
Converts the given Node ID and Partition number to the database partition’s key.
Source§fn from_db_partition_key(
partition_key: &DbPartitionKey,
) -> (NodeId, PartitionNumber)
fn from_db_partition_key( partition_key: &DbPartitionKey, ) -> (NodeId, PartitionNumber)
Converts database partition’s key back to ReNode ID and Partition number.
Source§fn to_db_sort_key(key: &SubstateKey) -> DbSortKey
fn to_db_sort_key(key: &SubstateKey) -> DbSortKey
Converts the given
SubstateKey
to the database’s sort key.
This is a convenience method, which simply unwraps the SubstateKey
and maps any specific
type found inside (see *_to_db_sort_key()
family).Source§fn to_db_sort_key_from_ref(key: SubstateKeyRef<'_>) -> DbSortKey
fn to_db_sort_key_from_ref(key: SubstateKeyRef<'_>) -> DbSortKey
Converts the given
SubstateKeyRef
to the database’s sort key.
This is a convenience method, which simply unwraps the SubstateKeyRef
and maps any specific
type found inside (see *_to_db_sort_key()
family).Source§fn from_db_sort_key<K>(db_sort_key: &DbSortKey) -> SubstateKeywhere
K: SubstateKeyContent,
fn from_db_sort_key<K>(db_sort_key: &DbSortKey) -> SubstateKeywhere
K: SubstateKeyContent,
Converts the given database’s sort key to a
SubstateKey
.
This is a convenience method, which simply wraps the type-specific result of an appropriate
*_from_db_sort_key()
method into a SubstateKey
. Read moreSource§fn from_db_sort_key_to_inner<K>(db_sort_key: &DbSortKey) -> Kwhere
K: SubstateKeyContent,
fn from_db_sort_key_to_inner<K>(db_sort_key: &DbSortKey) -> Kwhere
K: SubstateKeyContent,
Examples Read more
Auto Trait Implementations§
impl Freeze for SpreadPrefixKeyMapper
impl RefUnwindSafe for SpreadPrefixKeyMapper
impl Send for SpreadPrefixKeyMapper
impl Sync for SpreadPrefixKeyMapper
impl Unpin for SpreadPrefixKeyMapper
impl UnwindSafe for SpreadPrefixKeyMapper
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
Mutably borrows from an owned value. Read more
Source§impl<T, U> ContextualTryInto<U> for Twhere
U: ContextualTryFrom<T>,
impl<T, U> ContextualTryInto<U> for Twhere
U: ContextualTryFrom<T>,
type Error = <U as ContextualTryFrom<T>>::Error
type Context = <U as ContextualTryFrom<T>>::Context
fn contextual_try_into( self, context: &<U as ContextualTryFrom<T>>::Context, ) -> Result<U, <U as ContextualTryFrom<T>>::Error>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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> ⓘ
Converts
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> ⓘ
Converts
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 more