pub mod state_tree_facade;
pub mod tree_store;
pub mod entity_tier;
pub mod partition_tier;
pub mod substate_tier;
pub mod tier_framework;
use entity_tier::EntityTier;
use radix_common::crypto::Hash;
use radix_rust::prelude::*;
use radix_substate_store_interface::interface::*;
use tree_store::*;
use types::*;
#[allow(dead_code)]
mod jellyfish;
#[cfg(test)]
mod test;
#[allow(dead_code)]
mod types;
pub fn put_at_next_version<S: TreeStore>(
tree_store: &S,
current_state_version: Option<Version>,
database_updates: &DatabaseUpdates,
) -> Hash {
EntityTier::new(tree_store, current_state_version)
.put_next_version_entity_updates(database_updates)
.unwrap_or(SPARSE_MERKLE_PLACEHOLDER_HASH)
}
pub fn list_substate_hashes_at_version<S: ReadableTreeStore>(
tree_store: &S,
root_state_version: Version,
) -> IndexMap<DbPartitionKey, IndexMap<DbSortKey, Hash>> {
EntityTier::new(tree_store, Some(root_state_version))
.iter_entity_partition_tiers_from(None)
.flat_map(|partition_tier| {
partition_tier
.into_iter_partition_substate_tiers_from(None)
.map(|substate_tier| {
let partition_key = substate_tier.partition_key().clone();
let by_sort_key = substate_tier
.into_iter_substate_summaries_from(None)
.map(|substate| (substate.sort_key, substate.value_hash))
.collect::<IndexMap<_, _>>();
(partition_key, by_sort_key)
})
})
.collect()
}