Struct scrypto_test::prelude::SpreadPrefixKeyMapper
source · 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 from_db_sort_key<K>(db_sort_key: &DbSortKey) -> SubstateKeywhere
K: SubstateKeyContent + 'static,
fn from_db_sort_key<K>(db_sort_key: &DbSortKey) -> SubstateKeywhere
K: SubstateKeyContent + 'static,
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.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> 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