From 23819381a41810c79f1e4f439926968165bce72c Mon Sep 17 00:00:00 2001 From: "Sam H. Smith" Date: Mon, 1 Jul 2024 00:42:22 +0200 Subject: [PATCH] fix: flatten asset definitions and assets in data model Signed-off-by: Sam H. Smith --- cli/src/lib.rs | 1 + configs/swarm/executor.wasm | Bin 518033 -> 503501 bytes core/benches/blocks/common.rs | 1 + core/src/block.rs | 13 +- core/src/queue.rs | 4 +- core/src/smartcontracts/isi/account.rs | 20 +- core/src/smartcontracts/isi/asset.rs | 112 ++++---- core/src/smartcontracts/isi/domain.rs | 80 +++--- core/src/smartcontracts/isi/mod.rs | 2 +- core/src/smartcontracts/isi/query.rs | 52 ++-- core/src/smartcontracts/isi/world.rs | 21 ++ core/src/smartcontracts/wasm.rs | 2 +- core/src/state.rs | 360 ++++++++++++++++++++----- core/src/sumeragi/main_loop.rs | 2 +- data_model/src/account.rs | 36 +-- data_model/src/asset.rs | 7 - data_model/src/domain.rs | 83 +----- data_model/src/events/data/filters.rs | 3 - docs/source/references/schema.json | 30 --- 19 files changed, 457 insertions(+), 372 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index d49d3ae26d1..38ba897395d 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -260,6 +260,7 @@ impl Iroha { let world = World::with( [genesis_domain(config.genesis.public_key.clone())], [genesis_account(config.genesis.public_key.clone())], + [], config .sumeragi .trusted_peers diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index 8cf4a4e0d8c6bd6044d5e6315334ab63ebdb42ad..39bcc8feef3ecc802fa2df460c64021973dbbb39 100644 GIT binary patch delta 159085 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

*-YjQ*~79-*yZa2 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 D&>89Q delta 171200 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 P`Thrguv6~Hod5p;CFWQ< diff --git a/core/benches/blocks/common.rs b/core/benches/blocks/common.rs index 6ec0bcf3055..efdf7345729 100644 --- a/core/benches/blocks/common.rs +++ b/core/benches/blocks/common.rs @@ -188,6 +188,7 @@ pub fn build_state(rt: &tokio::runtime::Handle, account_id: &AccountId) -> State World::with( [domain], [Account::new(account_id.clone()).build(account_id)], + [], UniqueVec::new(), ), kura, diff --git a/core/src/block.rs b/core/src/block.rs index 179b5d6024c..921aacc47de 100644 --- a/core/src/block.rs +++ b/core/src/block.rs @@ -997,7 +997,7 @@ mod tests { let account = Account::new(alice_id.clone()).build(&alice_id); let domain_id = DomainId::from_str("wonderland").expect("Valid"); let domain = Domain::new(domain_id).build(&alice_id); - let world = World::with([domain], [account], UniqueVec::new()); + let world = World::with([domain], [account], [], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura, query_handle); @@ -1053,7 +1053,7 @@ mod tests { let account = Account::new(alice_id.clone()).build(&alice_id); let domain_id = DomainId::from_str("wonderland").expect("Valid"); let domain = Domain::new(domain_id).build(&alice_id); - let world = World::with([domain], [account], UniqueVec::new()); + let world = World::with([domain], [account], [], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura, query_handle); @@ -1127,7 +1127,7 @@ mod tests { let account = Account::new(alice_id.clone()).build(&alice_id); let domain_id = DomainId::from_str("wonderland").expect("Valid"); let domain = Domain::new(domain_id).build(&alice_id); - let world = World::with([domain], [account], UniqueVec::new()); + let world = World::with([domain], [account], [], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura, query_handle); @@ -1208,7 +1208,12 @@ mod tests { Domain::new(GENESIS_DOMAIN_ID.clone()).build(&genesis_correct_account_id); let genesis_wrong_account = Account::new(genesis_wrong_account_id.clone()).build(&genesis_wrong_account_id); - let world = World::with([genesis_domain], [genesis_wrong_account], UniqueVec::new()); + let world = World::with( + [genesis_domain], + [genesis_wrong_account], + [], + UniqueVec::new(), + ); let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura, query_handle); diff --git a/core/src/queue.rs b/core/src/queue.rs index d3ac864685b..20b0b39a954 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -437,7 +437,7 @@ pub mod tests { let (account_id, _account_keypair) = gen_account_in("wonderland"); let domain = Domain::new(domain_id).build(&account_id); let account = Account::new(account_id.clone()).build(&account_id); - World::with([domain], [account], PeersIds::new()) + World::with([domain], [account], [], PeersIds::new()) } fn config_factory() -> Config { @@ -838,7 +838,7 @@ pub mod tests { let domain = Domain::new(domain_id).build(&alice_id); let alice_account = Account::new(alice_id.clone()).build(&alice_id); let bob_account = Account::new(bob_id.clone()).build(&bob_id); - World::with([domain], [alice_account, bob_account], PeersIds::new()) + World::with([domain], [alice_account, bob_account], [], PeersIds::new()) }; let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura, query_handle); diff --git a/core/src/smartcontracts/isi/account.rs b/core/src/smartcontracts/isi/account.rs index 4278dd67229..2ba18eea0e0 100644 --- a/core/src/smartcontracts/isi/account.rs +++ b/core/src/smartcontracts/isi/account.rs @@ -97,12 +97,9 @@ pub mod isi { let asset = state_transaction .world - .account_mut(&asset_id.account) - .and_then(|account| { - account - .remove_asset(&asset_id.definition) - .ok_or_else(|| FindError::Asset(asset_id)) - })?; + .assets + .remove(asset_id.clone()) + .ok_or_else(|| FindError::Asset(asset_id))?; match asset.value { AssetValue::Numeric(increment) => { @@ -586,7 +583,16 @@ pub mod query { state_ro .world() .accounts_iter() - .filter(move |account| account.assets.contains_key(&asset_definition_id)) + .filter(move |account| { + state_ro + .world() + .assets() + .get(&AssetId::new( + asset_definition_id.clone(), + account.id().clone(), + )) + .is_some() + }) .cloned(), )) } diff --git a/core/src/smartcontracts/isi/asset.rs b/core/src/smartcontracts/isi/asset.rs index d3221810474..df8d3c0f321 100644 --- a/core/src/smartcontracts/isi/asset.rs +++ b/core/src/smartcontracts/isi/asset.rs @@ -141,19 +141,18 @@ pub mod isi { let asset = state_transaction .world - .account_mut(&asset_id.account) - .and_then(|account| { - account - .remove_asset(&asset_id.definition) - .ok_or_else(|| FindError::Asset(asset_id.clone())) - })?; + .assets + .get_mut(&asset_id) + .ok_or_else(|| FindError::Asset(asset_id.clone()))?; let destination_store = { + let value = asset.value.clone(); + let destination_id = AssetId::new(asset_id.definition.clone(), self.destination.clone()); let destination_store_asset = state_transaction .world - .asset_or_insert(destination_id.clone(), asset.value)?; + .asset_or_insert(destination_id.clone(), value)?; destination_store_asset.clone() }; @@ -230,10 +229,10 @@ pub mod isi { )?; assert_numeric_spec(&self.object, &asset_definition)?; - let account = state_transaction.world.account_mut(&asset_id.account)?; - let asset = account + let asset = state_transaction + .world .assets - .get_mut(&asset_id.definition) + .get_mut(&asset_id) .ok_or_else(|| FindError::Asset(asset_id.clone()))?; let AssetValue::Numeric(quantity) = &mut asset.value else { return Err(Error::Conversion("Expected numeric asset type".to_owned())); @@ -243,7 +242,11 @@ pub mod isi { .ok_or(MathError::NotEnoughQuantity)?; if asset.value.is_zero_value() { - assert!(account.remove_asset(&asset_id.definition).is_some()); + assert!(state_transaction + .world + .assets + .remove(asset_id.clone()) + .is_some()); } #[allow(clippy::float_arithmetic)] @@ -286,10 +289,10 @@ pub mod isi { assert_numeric_spec(&self.object, &asset_definition)?; { - let account = state_transaction.world.account_mut(&source_id.account)?; - let asset = account + let asset = state_transaction + .world .assets - .get_mut(&source_id.definition) + .get_mut(&source_id) .ok_or_else(|| FindError::Asset(source_id.clone()))?; let AssetValue::Numeric(quantity) = &mut asset.value else { return Err(Error::Conversion("Expected numeric asset type".to_owned())); @@ -298,7 +301,11 @@ pub mod isi { .checked_sub(self.object) .ok_or(MathError::NotEnoughQuantity)?; if asset.value.is_zero_value() { - assert!(account.remove_asset(&source_id.definition).is_some()); + assert!(state_transaction + .world + .assets + .remove(source_id.clone()) + .is_some()); } } @@ -430,13 +437,7 @@ pub mod query { &self, state_ro: &'state impl StateReadOnly, ) -> Result + 'state>, Error> { - Ok(Box::new( - state_ro - .world() - .accounts_iter() - .flat_map(|account| account.assets.values()) - .cloned(), - )) + Ok(Box::new(state_ro.world().assets_iter().cloned())) } } @@ -446,13 +447,7 @@ pub mod query { &self, state_ro: &'state impl StateReadOnly, ) -> Result + 'state>, Error> { - Ok(Box::new( - state_ro - .world() - .domains_iter() - .flat_map(|domain| domain.asset_definitions.values()) - .cloned(), - )) + Ok(Box::new(state_ro.world().asset_definitions_iter().cloned())) } } @@ -493,15 +488,8 @@ pub mod query { Ok(Box::new( state_ro .world() - .accounts_iter() - .flat_map(move |account| { - let name = name.clone(); - - account - .assets - .values() - .filter(move |asset| asset.id().definition.name == name) - }) + .assets_iter() + .filter(move |asset| asset.id().definition.name == name) .cloned(), )) } @@ -513,9 +501,16 @@ pub mod query { &self, state_ro: &'state impl StateReadOnly, ) -> Result + 'state>, Error> { - let id = &self.account; + let id = self.account.clone(); iroha_logger::trace!(%id); - Ok(Box::new(state_ro.world().account_assets(id)?.cloned())) + let _ = state_ro.world().map_account(&id, |_| ())?; + Ok(Box::new( + state_ro + .world() + .assets_iter() + .filter(move |asset| asset.id().account == id) + .cloned(), + )) } } @@ -530,15 +525,8 @@ pub mod query { Ok(Box::new( state_ro .world() - .accounts_iter() - .flat_map(move |account| { - let id = id.clone(); - - account - .assets - .values() - .filter(move |asset| asset.id().definition == id) - }) + .assets_iter() + .filter(move |asset| asset.id().definition == id) .cloned(), )) } @@ -550,13 +538,13 @@ pub mod query { &self, state_ro: &'state impl StateReadOnly, ) -> Result + 'state>, Error> { - let id = &self.domain; + let id = self.domain.clone(); iroha_logger::trace!(%id); Ok(Box::new( state_ro .world() - .accounts_in_domain_iter(id) - .flat_map(|account| account.assets.values()) + .assets_iter() + .filter(move |asset| asset.id().account.domain() == &id) .cloned(), )) } @@ -570,24 +558,16 @@ pub mod query { ) -> Result + 'state>, Error> { let domain_id = self.domain.clone(); let asset_definition_id = self.asset_definition.clone(); - let domain = state_ro.world().domain(&domain_id)?; - let _definition = domain - .asset_definitions - .get(&asset_definition_id) - .ok_or_else(|| FindError::AssetDefinition(asset_definition_id.clone()))?; + let _ = state_ro.world().domain(&domain_id)?; + let _ = state_ro.world().asset_definition(&asset_definition_id)?; iroha_logger::trace!(%domain_id, %asset_definition_id); Ok(Box::new( state_ro .world() - .accounts_in_domain_iter(&domain_id) - .flat_map(move |account| { - let domain_id = domain_id.clone(); - let asset_definition_id = asset_definition_id.clone(); - - account.assets.values().filter(move |asset| { - asset.id().account.domain == domain_id - && asset.id().definition == asset_definition_id - }) + .assets_iter() + .filter(move |asset| { + asset.id().definition == asset_definition_id + && asset.id().account.domain() == &domain_id }) .cloned(), )) diff --git a/core/src/smartcontracts/isi/domain.rs b/core/src/smartcontracts/isi/domain.rs index 81d80232226..f3c11186480 100644 --- a/core/src/smartcontracts/isi/domain.rs +++ b/core/src/smartcontracts/isi/domain.rs @@ -1,11 +1,7 @@ //! This module contains [`Domain`] structure and related implementations and trait implementations. use eyre::Result; -use iroha_data_model::{ - asset::{AssetDefinitionsMap, AssetTotalQuantityMap}, - prelude::*, - query::error::FindError, -}; +use iroha_data_model::{prelude::*, query::error::FindError}; use iroha_telemetry::metrics; use super::super::isi::prelude::*; @@ -18,8 +14,6 @@ impl Registrable for iroha_data_model::domain::NewDomain { fn build(self, authority: &AccountId) -> Self::Target { Self::Target { id: self.id, - asset_definitions: AssetDefinitionsMap::default(), - asset_total_quantities: AssetTotalQuantityMap::default(), metadata: self.metadata, logo: self.logo, owned_by: authority.clone(), @@ -109,6 +103,15 @@ pub mod isi { state_transaction.world.remove_account_roles(&account_id); + let remove_assets: Vec = state_transaction + .world + .assets_in_account_iter(&account_id) + .map(|ad| ad.id().clone()) + .collect(); + for asset_id in remove_assets { + state_transaction.world.assets.remove(asset_id); + } + if state_transaction .world .accounts @@ -136,20 +139,30 @@ pub mod isi { let asset_definition = self.object.build(authority); let asset_definition_id = asset_definition.id().clone(); - let domain = state_transaction + if state_transaction .world - .domain_mut(&asset_definition_id.domain)?; - if domain.asset_definitions.contains_key(&asset_definition_id) { + .asset_definition(&asset_definition_id) + .is_ok() + { return Err(RepetitionError { instruction: InstructionType::Register, id: IdBox::AssetDefinitionId(asset_definition_id), } .into()); } + let _ = state_transaction + .world + .domain(&asset_definition_id.domain)?; - domain.add_asset_total_quantity(asset_definition_id, Numeric::ZERO); + state_transaction + .world + .asset_total_quantities + .insert(asset_definition_id.clone(), Numeric::ZERO); - domain.add_asset_definition(asset_definition.clone()); + state_transaction + .world + .asset_definitions + .insert(asset_definition_id.clone(), asset_definition.clone()); state_transaction .world @@ -171,28 +184,22 @@ pub mod isi { let asset_definition_id = self.object; let mut assets_to_remove = Vec::new(); - for (_, account) in state_transaction.world.accounts.iter() { - assets_to_remove.extend( - account - .assets - .values() - .filter_map(|asset| { - if asset.id().definition == asset_definition_id { - return Some(asset.id()); - } - - None - }) - .cloned(), - ) - } + assets_to_remove.extend( + state_transaction + .world + .assets + .iter() + .filter(|(asset_id, _)| asset_id.definition == asset_definition_id) + .map(|(asset_id, _)| asset_id) + .cloned(), + ); let mut events = Vec::with_capacity(assets_to_remove.len() + 1); for asset_id in assets_to_remove { if state_transaction .world - .account_mut(&asset_id.account)? - .remove_asset(&asset_id.definition) + .assets + .remove(asset_id.clone()) .is_none() { error!(%asset_id, "asset not found. This is a bug"); @@ -201,17 +208,22 @@ pub mod isi { events.push(AccountEvent::Asset(AssetEvent::Deleted(asset_id)).into()); } - let domain = state_transaction + if state_transaction .world - .domain_mut(&asset_definition_id.domain)?; - if domain - .remove_asset_definition(&asset_definition_id) + .asset_definitions + .remove(asset_definition_id.clone()) .is_none() { return Err(FindError::AssetDefinition(asset_definition_id).into()); } + let _ = state_transaction + .world + .domain(&asset_definition_id.domain)?; - domain.remove_asset_total_quantity(&asset_definition_id); + state_transaction + .world + .asset_total_quantities + .remove(asset_definition_id.clone()); events.push(DataEvent::from(DomainEvent::AssetDefinition( AssetDefinitionEvent::Deleted(asset_definition_id), diff --git a/core/src/smartcontracts/isi/mod.rs b/core/src/smartcontracts/isi/mod.rs index 156473d0a7d..1e3c9406bf7 100644 --- a/core/src/smartcontracts/isi/mod.rs +++ b/core/src/smartcontracts/isi/mod.rs @@ -244,7 +244,7 @@ mod tests { }; fn state_with_test_domains(kura: &Arc) -> Result { - let world = World::with([], [], PeersIds::new()); + let world = World::with([], [], [], PeersIds::new()); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, kura.clone(), query_handle); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland")?; diff --git a/core/src/smartcontracts/isi/query.rs b/core/src/smartcontracts/isi/query.rs index 4702533ad8c..fbe0a3adc79 100644 --- a/core/src/smartcontracts/isi/query.rs +++ b/core/src/smartcontracts/isi/query.rs @@ -312,25 +312,19 @@ mod tests { fn world_with_test_domains() -> World { let domain_id = DomainId::from_str("wonderland").expect("Valid"); - let mut domain = Domain::new(domain_id).build(&ALICE_ID); + let domain = Domain::new(domain_id).build(&ALICE_ID); let account = Account::new(ALICE_ID.clone()).build(&ALICE_ID); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland").expect("Valid"); - assert!(domain - .add_asset_definition(AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID)) - .is_none()); - World::with([domain], [account], PeersIds::new()) + let asset_definition = AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID); + World::with([domain], [account], [asset_definition], PeersIds::new()) } fn world_with_test_asset_with_metadata() -> World { let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland").expect("Valid"); - let mut domain = - Domain::new(DomainId::from_str("wonderland").expect("Valid")).build(&ALICE_ID); - let mut account = Account::new(ALICE_ID.clone()).build(&ALICE_ID); - assert!(domain - .add_asset_definition( - AssetDefinition::numeric(asset_definition_id.clone()).build(&ALICE_ID) - ) - .is_none()); + let domain = Domain::new(DomainId::from_str("wonderland").expect("Valid")).build(&ALICE_ID); + let account = Account::new(ALICE_ID.clone()).build(&ALICE_ID); + let asset_definition = + AssetDefinition::numeric(asset_definition_id.clone()).build(&ALICE_ID); let mut store = Metadata::default(); store @@ -342,23 +336,31 @@ mod tests { let asset_id = AssetId::new(asset_definition_id, account.id().clone()); let asset = Asset::new(asset_id, AssetValue::Store(store)); - assert!(account.add_asset(asset).is_none()); - World::with([domain], [account], PeersIds::new()) + World::with_assets( + [domain], + [account], + [asset_definition], + [asset], + PeersIds::new(), + ) } fn world_with_test_account_with_metadata() -> Result { let mut metadata = Metadata::default(); metadata.insert(Name::from_str("Bytes")?, vec![1_u32, 2_u32, 3_u32]); - let mut domain = Domain::new(DomainId::from_str("wonderland")?).build(&ALICE_ID); + let domain = Domain::new(DomainId::from_str("wonderland")?).build(&ALICE_ID); let account = Account::new(ALICE_ID.clone()) .with_metadata(metadata) .build(&ALICE_ID); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland").expect("Valid"); - assert!(domain - .add_asset_definition(AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID)) - .is_none()); - Ok(World::with([domain], [account], PeersIds::new())) + let asset_definition = AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID); + Ok(World::with( + [domain], + [account], + [asset_definition], + PeersIds::new(), + )) } fn state_with_test_blocks_and_transactions( @@ -598,19 +600,15 @@ mod tests { let state = { let mut metadata = Metadata::default(); metadata.insert(Name::from_str("Bytes")?, vec![1_u32, 2_u32, 3_u32]); - let mut domain = Domain::new(DomainId::from_str("wonderland")?) + let domain = Domain::new(DomainId::from_str("wonderland")?) .with_metadata(metadata) .build(&ALICE_ID); let account = Account::new(ALICE_ID.clone()).build(&ALICE_ID); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland")?; - assert!(domain - .add_asset_definition( - AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID) - ) - .is_none()); + let asset_definition = AssetDefinition::numeric(asset_definition_id).build(&ALICE_ID); let query_handle = LiveQueryStore::test().start(); State::new( - World::with([domain], [account], PeersIds::new()), + World::with([domain], [account], [asset_definition], PeersIds::new()), kura, query_handle, ) diff --git a/core/src/smartcontracts/isi/world.rs b/core/src/smartcontracts/isi/world.rs index ff65fdee954..c9c93045d83 100644 --- a/core/src/smartcontracts/isi/world.rs +++ b/core/src/smartcontracts/isi/world.rs @@ -147,9 +147,30 @@ pub mod isi { state_transaction.world.remove_account_roles(&account); + let remove_assets: Vec = state_transaction + .world + .assets_in_account_iter(&account) + .map(|ad| ad.id().clone()) + .collect(); + for asset_id in remove_assets { + state_transaction.world.assets.remove(asset_id); + } + state_transaction.world.accounts.remove(account); } + let remove_asset_definitions: Vec = state_transaction + .world + .asset_definitions_in_domain_iter(&domain_id) + .map(|ad| ad.id().clone()) + .collect(); + for asset_definition_id in remove_asset_definitions { + state_transaction + .world + .asset_definitions + .remove(asset_definition_id); + } + if state_transaction .world .domains diff --git a/core/src/smartcontracts/wasm.rs b/core/src/smartcontracts/wasm.rs index 733deb3ccd2..0a9e31a154a 100644 --- a/core/src/smartcontracts/wasm.rs +++ b/core/src/smartcontracts/wasm.rs @@ -1728,7 +1728,7 @@ mod tests { let account = Account::new(authority.clone()).build(authority); let domain = Domain::new(domain_id).build(authority); - World::with([domain], [account], PeersIds::new()) + World::with([domain], [account], [], PeersIds::new()) } fn memory_and_alloc(isi_hex: &str) -> String { diff --git a/core/src/state.rs b/core/src/state.rs index 2c711280929..a920563c743 100644 --- a/core/src/state.rs +++ b/core/src/state.rs @@ -25,7 +25,7 @@ use iroha_data_model::{ use iroha_logger::prelude::*; use iroha_primitives::{must_use::MustUse, numeric::Numeric, small::SmallVec}; use parking_lot::Mutex; -use range_bounds::{AccountByDomainBounds, AsAccountIdDomainCompare, RoleIdByAccountBounds}; +use range_bounds::*; use serde::{ de::{DeserializeSeed, MapAccess, Visitor}, Deserializer, Serialize, @@ -71,6 +71,12 @@ pub struct World { pub(crate) domains: Storage, /// Registered accounts. pub(crate) accounts: Storage, + /// Registered asset definitions. + pub(crate) asset_definitions: Storage, + /// Registered asset definition total amounts. + pub(crate) asset_total_quantities: Storage, + /// Registered assets. + pub(crate) assets: Storage, /// Roles. [`Role`] pairs. pub(crate) roles: Storage, /// Permission tokens of an account. @@ -95,6 +101,12 @@ pub struct WorldBlock<'world> { pub(crate) domains: StorageBlock<'world, DomainId, Domain>, /// Registered accounts. pub(crate) accounts: StorageBlock<'world, AccountId, Account>, + /// Registered asset definitions. + pub(crate) asset_definitions: StorageBlock<'world, AssetDefinitionId, AssetDefinition>, + /// Registered asset definition total amounts. + pub(crate) asset_total_quantities: StorageBlock<'world, AssetDefinitionId, Numeric>, + /// Registered assets. + pub(crate) assets: StorageBlock<'world, AssetId, Asset>, /// Roles. [`Role`] pairs. pub(crate) roles: StorageBlock<'world, RoleId, Role>, /// Permission tokens of an account. @@ -121,6 +133,14 @@ pub struct WorldTransaction<'block, 'world> { pub(crate) domains: StorageTransaction<'block, 'world, DomainId, Domain>, /// Registered accounts. pub(crate) accounts: StorageTransaction<'block, 'world, AccountId, Account>, + /// Registered asset definitions. + pub(crate) asset_definitions: + StorageTransaction<'block, 'world, AssetDefinitionId, AssetDefinition>, + /// Registered asset definition total amounts. + pub(crate) asset_total_quantities: + StorageTransaction<'block, 'world, AssetDefinitionId, Numeric>, + /// Registered assets. + pub(crate) assets: StorageTransaction<'block, 'world, AssetId, Asset>, /// Roles. [`Role`] pairs. pub(crate) roles: StorageTransaction<'block, 'world, RoleId, Role>, /// Permission tokens of an account. @@ -155,6 +175,12 @@ pub struct WorldView<'world> { pub(crate) domains: StorageView<'world, DomainId, Domain>, /// Registered accounts. pub(crate) accounts: StorageView<'world, AccountId, Account>, + /// Registered asset definitions. + pub(crate) asset_definitions: StorageView<'world, AssetDefinitionId, AssetDefinition>, + /// Registered asset definition total amounts. + pub(crate) asset_total_quantities: StorageView<'world, AssetDefinitionId, Numeric>, + /// Registered assets. + pub(crate) assets: StorageView<'world, AssetId, Asset>, /// Roles. [`Role`] pairs. pub(crate) roles: StorageView<'world, RoleId, Role>, /// Permission tokens of an account. @@ -262,10 +288,33 @@ impl World { } /// Creates a [`World`] with these [`Domain`]s and trusted [`PeerId`]s. - pub fn with(domains: D, accounts: A, trusted_peers_ids: PeersIds) -> Self + pub fn with( + domains: D, + accounts: A, + asset_definitions: Ad, + trusted_peers_ids: PeersIds, + ) -> Self where D: IntoIterator, A: IntoIterator, + Ad: IntoIterator, + { + Self::with_assets(domains, accounts, asset_definitions, [], trusted_peers_ids) + } + + /// Creates a [`World`] with these [`Domain`]s and trusted [`PeerId`]s. + pub fn with_assets( + domains: D, + accounts: A, + asset_definitions: Ad, + assets: As, + trusted_peers_ids: PeersIds, + ) -> Self + where + D: IntoIterator, + A: IntoIterator, + Ad: IntoIterator, + As: IntoIterator, { let domains = domains .into_iter() @@ -275,10 +324,17 @@ impl World { .into_iter() .map(|account| (account.id().clone(), account)) .collect(); + let asset_definitions = asset_definitions + .into_iter() + .map(|ad| (ad.id().clone(), ad)) + .collect(); + let assets = assets.into_iter().map(|ad| (ad.id().clone(), ad)).collect(); Self { trusted_peers_ids: Cell::new(trusted_peers_ids), domains, accounts, + asset_definitions, + assets, ..Self::new() } } @@ -290,6 +346,9 @@ impl World { trusted_peers_ids: self.trusted_peers_ids.block(), domains: self.domains.block(), accounts: self.accounts.block(), + asset_definitions: self.asset_definitions.block(), + asset_total_quantities: self.asset_total_quantities.block(), + assets: self.assets.block(), roles: self.roles.block(), account_permissions: self.account_permissions.block(), account_roles: self.account_roles.block(), @@ -307,6 +366,9 @@ impl World { trusted_peers_ids: self.trusted_peers_ids.block_and_revert(), domains: self.domains.block_and_revert(), accounts: self.accounts.block_and_revert(), + asset_definitions: self.asset_definitions.block_and_revert(), + asset_total_quantities: self.asset_total_quantities.block_and_revert(), + assets: self.assets.block_and_revert(), roles: self.roles.block_and_revert(), account_permissions: self.account_permissions.block_and_revert(), account_roles: self.account_roles.block_and_revert(), @@ -324,6 +386,9 @@ impl World { trusted_peers_ids: self.trusted_peers_ids.view(), domains: self.domains.view(), accounts: self.accounts.view(), + asset_definitions: self.asset_definitions.view(), + asset_total_quantities: self.asset_total_quantities.view(), + assets: self.assets.view(), roles: self.roles.view(), account_permissions: self.account_permissions.view(), account_roles: self.account_roles.view(), @@ -341,6 +406,9 @@ pub trait WorldReadOnly { fn trusted_peers_ids(&self) -> &PeersIds; fn domains(&self) -> &impl StorageReadOnly; fn accounts(&self) -> &impl StorageReadOnly; + fn asset_definitions(&self) -> &impl StorageReadOnly; + fn asset_total_quantities(&self) -> &impl StorageReadOnly; + fn assets(&self) -> &impl StorageReadOnly; fn roles(&self) -> &impl StorageReadOnly; fn account_permissions(&self) -> &impl StorageReadOnly; fn account_roles(&self) -> &impl StorageReadOnly; @@ -396,12 +464,52 @@ pub trait WorldReadOnly { .map(|(_, account)| account) } - /// Returns reference for domains map + /// Returns reference for accounts map #[inline] fn accounts_iter(&self) -> impl Iterator { self.accounts().iter().map(|(_, account)| account) } + /// Iterate asset definitions in domain + #[allow(clippy::type_complexity)] + fn asset_definitions_in_domain_iter<'slf>( + &'slf self, + id: &DomainId, + ) -> core::iter::Map< + RangeIter<'slf, AssetDefinitionId, AssetDefinition>, + fn((&'slf AssetDefinitionId, &'slf AssetDefinition)) -> &'slf AssetDefinition, + > { + self.asset_definitions() + .range::(AssetDefinitionByDomainBounds::new(id)) + .map(|(_, ad)| ad) + } + + /// Returns reference for asset definitions map + #[inline] + fn asset_definitions_iter(&self) -> impl Iterator { + self.asset_definitions().iter().map(|(_, ad)| ad) + } + + /// Iterate asset definitions in domain + #[allow(clippy::type_complexity)] + fn assets_in_account_iter<'slf>( + &'slf self, + id: &AccountId, + ) -> core::iter::Map< + RangeIter<'slf, AssetId, Asset>, + fn((&'slf AssetId, &'slf Asset)) -> &'slf Asset, + > { + self.assets() + .range::(AssetByAccountBounds::new(id)) + .map(|(_, a)| a) + } + + /// Returns reference for asset definitions map + #[inline] + fn assets_iter(&self) -> impl Iterator { + self.assets().iter().map(|(_, a)| a) + } + // Account-related methods /// Get `Account` and return reference to it. @@ -430,18 +538,6 @@ pub trait WorldReadOnly { Ok(f(account)) } - /// Get `Account`'s `Asset`s - /// - /// # Errors - /// Fails if there is no domain or account - fn account_assets( - &self, - id: &AccountId, - ) -> Result, QueryExecutionFail> - { - self.map_account(id, |account| account.assets.values()) - } - /// Get [`Account`]'s [`RoleId`]s // NOTE: have to use concreate type because don't want to capture lifetme of `id` #[allow(clippy::type_complexity)] @@ -516,16 +612,11 @@ pub trait WorldReadOnly { /// - The [`Account`] with which the [`Asset`] is associated doesn't exist. /// - The [`Domain`] with which the [`Account`] is associated doesn't exist. fn asset(&self, id: &AssetId) -> Result { - self.map_account( - &id.account, - |account| -> Result { - account - .assets - .get(&id.definition) - .ok_or_else(|| QueryExecutionFail::from(FindError::Asset(id.clone()))) - .cloned() - }, - )? + let _ = self.map_account(&id.account, |_| ())?; + self.assets() + .get(id) + .ok_or_else(|| QueryExecutionFail::from(FindError::Asset(id.clone()))) + .cloned() } // AssetDefinition-related methods @@ -535,8 +626,7 @@ pub trait WorldReadOnly { /// # Errors /// - Asset definition entry not found fn asset_definition(&self, asset_id: &AssetDefinitionId) -> Result { - self.domain(&asset_id.domain)? - .asset_definitions + self.asset_definitions() .get(asset_id) .ok_or_else(|| FindError::AssetDefinition(asset_id.clone())) .cloned() @@ -547,8 +637,7 @@ pub trait WorldReadOnly { /// # Errors /// - Asset definition not found fn asset_total_amount(&self, definition_id: &AssetDefinitionId) -> Result { - self.domain(&definition_id.domain)? - .asset_total_quantities + self.asset_total_quantities() .get(definition_id) .ok_or_else(|| FindError::AssetDefinition(definition_id.clone())) .copied() @@ -581,6 +670,15 @@ macro_rules! impl_world_ro { fn accounts(&self) -> &impl StorageReadOnly { &self.accounts } + fn asset_definitions(&self) -> &impl StorageReadOnly { + &self.asset_definitions + } + fn asset_total_quantities(&self) -> &impl StorageReadOnly { + &self.asset_total_quantities + } + fn assets(&self) -> &impl StorageReadOnly { + &self.assets + } fn roles(&self) -> &impl StorageReadOnly { &self.roles } @@ -615,6 +713,9 @@ impl<'world> WorldBlock<'world> { trusted_peers_ids: self.trusted_peers_ids.transaction(), domains: self.domains.transaction(), accounts: self.accounts.transaction(), + asset_definitions: self.asset_definitions.transaction(), + asset_total_quantities: self.asset_total_quantities.transaction(), + assets: self.assets.transaction(), roles: self.roles.transaction(), account_permissions: self.account_permissions.transaction(), account_roles: self.account_roles.transaction(), @@ -637,6 +738,9 @@ impl<'world> WorldBlock<'world> { self.account_roles.commit(); self.account_permissions.commit(); self.roles.commit(); + self.assets.commit(); + self.asset_total_quantities.commit(); + self.asset_definitions.commit(); self.accounts.commit(); self.domains.commit(); self.trusted_peers_ids.commit(); @@ -653,6 +757,9 @@ impl WorldTransaction<'_, '_> { self.account_roles.apply(); self.account_permissions.apply(); self.roles.apply(); + self.assets.apply(); + self.asset_total_quantities.apply(); + self.asset_definitions.apply(); self.accounts.apply(); self.domains.apply(); self.trusted_peers_ids.apply(); @@ -729,12 +836,10 @@ impl WorldTransaction<'_, '_> { /// # Errors /// If domain, account or asset not found pub fn asset_mut(&mut self, id: &AssetId) -> Result<&mut Asset, FindError> { - self.account_mut(&id.account).and_then(move |account| { - account - .assets - .get_mut(&id.definition) - .ok_or_else(|| FindError::Asset(id.clone())) - }) + let _ = self.account_mut(&id.account)?; + self.assets + .get_mut(id) + .ok_or_else(|| FindError::Asset(id.clone())) } /// Get asset or inserts new with `default_asset_value`. @@ -749,36 +854,24 @@ impl WorldTransaction<'_, '_> { ) -> Result<&mut Asset, Error> { // Check that asset definition exists { - let asset_definition_id = &asset_id.definition; - let asset_definition_domain_id = &asset_id.definition.domain; - let asset_definition_domain = self - .domains - .get(asset_definition_domain_id) - .ok_or(FindError::Domain(asset_definition_domain_id.clone()))?; - asset_definition_domain - .asset_definitions - .get(asset_definition_id) - .ok_or(FindError::AssetDefinition(asset_definition_id.clone()))?; + let _ = self.domain(&asset_id.definition.domain)?; + let _ = self.asset_definition(&asset_id.definition)?; } - let account_id = &asset_id.account; - let account = self - .accounts - .get_mut(account_id) - .ok_or(FindError::Account(account_id.clone()))?; - - Ok(account + let _ = self.account(&asset_id.account)?; + if self.assets.get(&asset_id).is_none() { + let asset = Asset::new(asset_id.clone(), default_asset_value.into()); + Self::emit_events_impl( + &mut self.triggers, + &mut self.events_buffer, + Some(AccountEvent::Asset(AssetEvent::Created(asset.clone()))), + ); + self.assets.insert(asset_id.clone(), asset); + } + Ok(self .assets - .entry(asset_id.definition.clone()) - .or_insert_with(|| { - let asset = Asset::new(asset_id, default_asset_value.into()); - Self::emit_events_impl( - &mut self.triggers, - &mut self.events_buffer, - Some(AccountEvent::Asset(AssetEvent::Created(asset.clone()))), - ); - asset - })) + .get_mut(&asset_id) + .expect("Just inserted, cannot fail.")) } /// Get mutable reference to [`AssetDefinition`] @@ -789,12 +882,9 @@ impl WorldTransaction<'_, '_> { &mut self, id: &AssetDefinitionId, ) -> Result<&mut AssetDefinition, FindError> { - self.domain_mut(&id.domain).and_then(|domain| { - domain - .asset_definitions - .get_mut(id) - .ok_or_else(|| FindError::AssetDefinition(id.clone())) - }) + self.asset_definitions + .get_mut(id) + .ok_or_else(|| FindError::AssetDefinition(id.clone())) } /// Increase [`Asset`] total amount by given value @@ -807,9 +897,8 @@ impl WorldTransaction<'_, '_> { definition_id: &AssetDefinitionId, increment: Numeric, ) -> Result<(), Error> { - let domain = self.domain_mut(&definition_id.domain)?; let asset_total_amount: &mut Numeric = - domain.asset_total_quantities.get_mut(definition_id).expect( + self.asset_total_quantities.get_mut(definition_id).expect( "INTERNAL BUG: Asset total amount not found. \ Insert initial total amount on `Register`", ); @@ -840,9 +929,8 @@ impl WorldTransaction<'_, '_> { definition_id: &AssetDefinitionId, decrement: Numeric, ) -> Result<(), Error> { - let domain = self.domain_mut(&definition_id.domain)?; let asset_total_amount: &mut Numeric = - domain.asset_total_quantities.get_mut(definition_id).expect( + self.asset_total_quantities.get_mut(definition_id).expect( "INTERNAL BUG: Asset total amount not found. \ Insert initial total amount on `Register`", ); @@ -1536,6 +1624,116 @@ mod range_bounds { key: AccountIdDomainCompare<'_>, trait: AsAccountIdDomainCompare } + + /// `DomainId` wrapper for fetching asset definitions beloning to a domain from the global store + #[derive(PartialEq, Eq, Ord, PartialOrd, Copy, Clone)] + pub struct AssetDefinitionIdDomainCompare<'a> { + domain_id: &'a DomainId, + name: MinMaxExt<&'a Name>, + } + + /// Bounds for range quired over asset definitions by domain + pub struct AssetDefinitionByDomainBounds<'a> { + start: AssetDefinitionIdDomainCompare<'a>, + end: AssetDefinitionIdDomainCompare<'a>, + } + + impl<'a> AssetDefinitionByDomainBounds<'a> { + /// Create range bounds for range quires over asset definitions by domain + pub fn new(domain_id: &'a DomainId) -> Self { + Self { + start: AssetDefinitionIdDomainCompare { + domain_id, + name: MinMaxExt::Min, + }, + end: AssetDefinitionIdDomainCompare { + domain_id, + name: MinMaxExt::Max, + }, + } + } + } + + impl<'a> RangeBounds + for AssetDefinitionByDomainBounds<'a> + { + fn start_bound(&self) -> Bound<&(dyn AsAssetDefinitionIdDomainCompare + 'a)> { + Bound::Excluded(&self.start) + } + + fn end_bound(&self) -> Bound<&(dyn AsAssetDefinitionIdDomainCompare + 'a)> { + Bound::Excluded(&self.end) + } + } + + impl AsAssetDefinitionIdDomainCompare for AssetDefinitionId { + fn as_key(&self) -> AssetDefinitionIdDomainCompare<'_> { + AssetDefinitionIdDomainCompare { + domain_id: &self.domain, + name: (&self.name).into(), + } + } + } + + impl_as_dyn_key! { + target: AssetDefinitionId, + key: AssetDefinitionIdDomainCompare<'_>, + trait: AsAssetDefinitionIdDomainCompare + } + + /// `AccountId` wrapper for fetching assets beloning to an account from the global store + #[derive(PartialEq, Eq, Ord, PartialOrd, Copy, Clone)] + pub struct AssetIdAccountCompare<'a> { + account_id: &'a AccountId, + definition: MinMaxExt<&'a AssetDefinitionId>, + } + + /// Bounds for range quired over assets by account + pub struct AssetByAccountBounds<'a> { + start: AssetIdAccountCompare<'a>, + end: AssetIdAccountCompare<'a>, + } + + impl<'a> AssetByAccountBounds<'a> { + /// Create range bounds for range quires over assets by account + pub fn new(account_id: &'a AccountId) -> Self { + Self { + start: AssetIdAccountCompare { + account_id, + definition: MinMaxExt::Min, + }, + end: AssetIdAccountCompare { + account_id, + definition: MinMaxExt::Max, + }, + } + } + } + + impl<'a> RangeBounds for AssetByAccountBounds<'a> { + fn start_bound(&self) -> Bound<&(dyn AsAssetIdAccountCompare + 'a)> { + Bound::Excluded(&self.start) + } + + fn end_bound(&self) -> Bound<&(dyn AsAssetIdAccountCompare + 'a)> { + Bound::Excluded(&self.end) + } + } + + impl AsAssetIdAccountCompare for AssetId { + fn as_key(&self) -> AssetIdAccountCompare<'_> { + AssetIdAccountCompare { + account_id: &self.account, + definition: (&self.definition).into(), + } + } + } + + impl_as_dyn_key! { + target: AssetId, + key: AssetIdAccountCompare<'_>, + trait: AsAssetIdAccountCompare + } } pub(crate) mod deserialize { @@ -1633,6 +1831,9 @@ pub(crate) mod deserialize { let mut trusted_peers_ids = None; let mut domains = None; let mut accounts = None; + let mut asset_definitions = None; + let mut asset_total_quantities = None; + let mut assets = None; let mut roles = None; let mut account_permissions = None; let mut account_roles = None; @@ -1654,6 +1855,15 @@ pub(crate) mod deserialize { "accounts" => { accounts = Some(map.next_value()?); } + "asset_definitions" => { + asset_definitions = Some(map.next_value()?); + } + "asset_total_quantities" => { + asset_total_quantities = Some(map.next_value()?); + } + "assets" => { + assets = Some(map.next_value()?); + } "roles" => { roles = Some(map.next_value()?); } @@ -1689,6 +1899,12 @@ pub(crate) mod deserialize { .ok_or_else(|| serde::de::Error::missing_field("domains"))?, accounts: accounts .ok_or_else(|| serde::de::Error::missing_field("accounts"))?, + asset_definitions: asset_definitions + .ok_or_else(|| serde::de::Error::missing_field("asset_definitions"))?, + asset_total_quantities: asset_total_quantities.ok_or_else(|| { + serde::de::Error::missing_field("asset_total_quantities") + })?, + assets: assets.ok_or_else(|| serde::de::Error::missing_field("assets"))?, roles: roles.ok_or_else(|| serde::de::Error::missing_field("roles"))?, account_permissions: account_permissions.ok_or_else(|| { serde::de::Error::missing_field("account_permissions") diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index f8c2d8dd17b..af21b124381 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -1365,7 +1365,7 @@ mod tests { let account = Account::new(alice_id.clone()).build(&alice_id); let domain_id = "wonderland".parse().expect("Valid"); let domain = Domain::new(domain_id).build(&alice_id); - let world = World::with([domain], [account], topology.iter().cloned().collect()); + let world = World::with([domain], [account], [], topology.iter().cloned().collect()); let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let state = State::new(world, Arc::clone(&kura), query_handle); diff --git a/data_model/src/account.rs b/data_model/src/account.rs index c8daf5c8cb3..0717190102d 100644 --- a/data_model/src/account.rs +++ b/data_model/src/account.rs @@ -12,10 +12,7 @@ use serde_with::{DeserializeFromStr, SerializeDisplay}; pub use self::model::*; use crate::{ - asset::{Asset, AssetDefinitionId, AssetsMap}, - domain::prelude::*, - metadata::Metadata, - HasMetadata, ParseError, PublicKey, Registered, + domain::prelude::*, metadata::Metadata, HasMetadata, ParseError, PublicKey, Registered, }; #[model] @@ -75,8 +72,6 @@ mod model { pub struct Account { /// Identification of the [`Account`]. pub id: AccountId, - /// Assets in this [`Account`]. - pub assets: AssetsMap, /// Metadata of this account as a key-value store. pub metadata: Metadata, } @@ -118,34 +113,6 @@ impl Account { pub fn signatory(&self) -> &PublicKey { &self.id.signatory } - - /// Return a reference to the [`Asset`] corresponding to the asset id. - #[inline] - pub fn asset(&self, asset_id: &AssetDefinitionId) -> Option<&Asset> { - self.assets.get(asset_id) - } - - /// Get an iterator over [`Asset`]s of the `Account` - #[inline] - pub fn assets(&self) -> impl ExactSizeIterator { - self.assets.values() - } -} - -#[cfg(feature = "transparent_api")] -impl Account { - /// Add [`Asset`] into the [`Account`] returning previous asset stored under the same id - #[inline] - pub fn add_asset(&mut self, asset: Asset) -> Option { - assert_eq!(self.id, asset.id.account); - self.assets.insert(asset.id.definition.clone(), asset) - } - - /// Remove asset from the [`Account`] and return it - #[inline] - pub fn remove_asset(&mut self, asset_id: &AssetDefinitionId) -> Option { - self.assets.remove(asset_id) - } } impl NewAccount { @@ -171,7 +138,6 @@ impl NewAccount { pub fn into_account(self) -> Account { Account { id: self.id, - assets: AssetsMap::default(), metadata: self.metadata, } } diff --git a/data_model/src/asset.rs b/data_model/src/asset.rs index 7e4e1c43f9b..fb87db6b291 100644 --- a/data_model/src/asset.rs +++ b/data_model/src/asset.rs @@ -20,13 +20,6 @@ use crate::{ ParseError, Registered, }; -/// API to work with collections of [`Id`] : [`Asset`] mappings. -pub type AssetsMap = btree_map::BTreeMap; - -/// [`AssetDefinitionsMap`] provides an API to work with collection of key([`AssetDefinitionId`])-value([`AssetDefinition`]) -/// pairs. -pub type AssetDefinitionsMap = btree_map::BTreeMap; - /// [`AssetTotalQuantityMap`] provides an API to work with collection of key([`AssetDefinitionId`])-value([`AssetValue`]) /// pairs. pub type AssetTotalQuantityMap = btree_map::BTreeMap; diff --git a/data_model/src/domain.rs b/data_model/src/domain.rs index fba99212f45..8789ea47a34 100644 --- a/data_model/src/domain.rs +++ b/data_model/src/domain.rs @@ -5,20 +5,13 @@ use alloc::{format, string::String, vec::Vec}; use derive_more::{Constructor, Display, FromStr}; use iroha_data_model_derive::{model, IdEqOrdHash}; -use iroha_primitives::numeric::Numeric; use iroha_schema::IntoSchema; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; use serde_with::{DeserializeFromStr, SerializeDisplay}; pub use self::model::*; -use crate::{ - asset::{AssetDefinition, AssetDefinitionsMap, AssetTotalQuantityMap}, - ipfs::IpfsPath, - metadata::Metadata, - prelude::*, - HasMetadata, Name, Registered, -}; +use crate::{ipfs::IpfsPath, metadata::Metadata, prelude::*, HasMetadata, Name, Registered}; #[model] mod model { @@ -73,10 +66,6 @@ mod model { pub struct Domain { /// Identification of this [`Domain`]. pub id: DomainId, - /// [`Asset`](AssetDefinition)s defined of the `Domain`. - pub asset_definitions: AssetDefinitionsMap, - /// Total amount of [`Asset`]. - pub asset_total_quantities: AssetTotalQuantityMap, /// IPFS link to the [`Domain`] logo. #[getset(get = "pub")] pub logo: Option, @@ -155,76 +144,6 @@ impl Domain { } } -impl Domain { - /// Return a reference to the asset definition corresponding to the asset definition id - #[inline] - pub fn asset_definition( - &self, - asset_definition_id: &AssetDefinitionId, - ) -> Option<&AssetDefinition> { - self.asset_definitions.get(asset_definition_id) - } - - /// Return a reference to the asset definition corresponding to the asset definition id - #[inline] - pub fn asset_total_quantity( - &self, - asset_definition_id: &AssetDefinitionId, - ) -> Option<&Numeric> { - self.asset_total_quantities.get(asset_definition_id) - } - - /// Get an iterator over asset definitions of the `Domain` - #[inline] - pub fn asset_definitions(&self) -> impl ExactSizeIterator { - self.asset_definitions.values() - } -} - -#[cfg(feature = "transparent_api")] -impl Domain { - /// Add asset definition into the [`Domain`] returning previous - /// asset definition stored under the same id - #[inline] - pub fn add_asset_definition( - &mut self, - asset_definition: AssetDefinition, - ) -> Option { - self.asset_definitions - .insert(asset_definition.id().clone(), asset_definition) - } - - /// Remove asset definition from the [`Domain`] and return it - #[inline] - pub fn remove_asset_definition( - &mut self, - asset_definition_id: &AssetDefinitionId, - ) -> Option { - self.asset_definitions.remove(asset_definition_id) - } - - /// Add asset total amount into the [`Domain`] returning previous - /// asset amount stored under the same id - #[inline] - pub fn add_asset_total_quantity( - &mut self, - asset_definition_id: AssetDefinitionId, - initial_amount: Numeric, - ) -> Option { - self.asset_total_quantities - .insert(asset_definition_id, initial_amount) - } - - /// Remove asset total amount from the [`Domain`] and return it - #[inline] - pub fn remove_asset_total_quantity( - &mut self, - asset_definition_id: &AssetDefinitionId, - ) -> Option { - self.asset_total_quantities.remove(asset_definition_id) - } -} - /// The prelude re-exports most commonly used traits, structs and macros from this crate. pub mod prelude { pub use super::{Domain, DomainId}; diff --git a/data_model/src/events/data/filters.rs b/data_model/src/events/data/filters.rs index 0bda7058181..20dbf6e0d3d 100644 --- a/data_model/src/events/data/filters.rs +++ b/data_model/src/events/data/filters.rs @@ -724,7 +724,6 @@ mod tests { use iroha_crypto::KeyPair; use super::*; - use crate::asset::{AssetDefinitionsMap, AssetTotalQuantityMap}; #[test] #[cfg(feature = "transparent_api")] @@ -736,8 +735,6 @@ mod tests { let domain = Domain { id: domain_id.clone(), - asset_definitions: AssetDefinitionsMap::default(), - asset_total_quantities: AssetTotalQuantityMap::default(), logo: None, metadata: Metadata::default(), owned_by: domain_owner_id, diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 20920ee1ab4..996cd56c30d 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -5,10 +5,6 @@ "name": "id", "type": "AccountId" }, - { - "name": "assets", - "type": "SortedMap" - }, { "name": "metadata", "type": "Metadata" @@ -930,14 +926,6 @@ "name": "id", "type": "DomainId" }, - { - "name": "asset_definitions", - "type": "SortedMap" - }, - { - "name": "asset_total_quantities", - "type": "SortedMap" - }, { "name": "logo", "type": "Option" @@ -3603,24 +3591,6 @@ } ] }, - "SortedMap": { - "Map": { - "key": "AssetDefinitionId", - "value": "Asset" - } - }, - "SortedMap": { - "Map": { - "key": "AssetDefinitionId", - "value": "AssetDefinition" - } - }, - "SortedMap": { - "Map": { - "key": "AssetDefinitionId", - "value": "Numeric" - } - }, "SortedMap": { "Map": { "key": "CustomParameterId",