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 RefUnwindSafe for SpreadPrefixKeyMapper
impl Send for SpreadPrefixKeyMapper
impl Sync for SpreadPrefixKeyMapper
impl Unpin for SpreadPrefixKeyMapper
impl UnwindSafe for SpreadPrefixKeyMapper
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
Casts
self
to type T
. The semantics of numeric casting with the as
operator are followed, so <T as As>::as_::<U>
can be used in the same way as T as U
for numeric conversions. Read moresource§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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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
.§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
.§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.§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.