diff --git a/parachains/runtimes/assets/common/src/runtime_api.rs b/parachains/runtimes/assets/common/src/runtime_api.rs index 36a8df1271e..ceb8bc13fcc 100644 --- a/parachains/runtimes/assets/common/src/runtime_api.rs +++ b/parachains/runtimes/assets/common/src/runtime_api.rs @@ -31,11 +31,16 @@ pub enum FungiblesAccessError { sp_api::decl_runtime_apis! { /// The API for querying account's balances from runtime. + #[api_version(2)] pub trait FungiblesApi where AccountId: Codec, { /// Returns the list of all [`MultiAsset`] that an `AccountId` has. + #[changed_in(2)] fn query_account_balances(account: AccountId) -> Result, FungiblesAccessError>; + + /// Returns the list of all [`MultiAsset`] that an `AccountId` has. + fn query_account_balances(account: AccountId) -> Result; } } diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 62425aa7496..5f987851a18 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -951,7 +951,7 @@ impl_runtime_apis! { AccountId, > for Runtime { - fn query_account_balances(account: AccountId) -> Result, assets_common::runtime_api::FungiblesAccessError> { + fn query_account_balances(account: AccountId) -> Result { use assets_common::fungible_conversion::{convert, convert_balance}; Ok([ // collect pallet_balance @@ -976,7 +976,7 @@ impl_runtime_apis! { .filter(|(_, balance)| balance > &0) )?, // collect ... e.g. other tokens - ].concat()) + ].concat().into()) } } diff --git a/parachains/runtimes/assets/statemine/tests/tests.rs b/parachains/runtimes/assets/statemine/tests/tests.rs index 972abe9d427..acfb2417e4b 100644 --- a/parachains/runtimes/assets/statemine/tests/tests.rs +++ b/parachains/runtimes/assets/statemine/tests/tests.rs @@ -383,7 +383,11 @@ fn test_assets_balances_api_works() { 0 ); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 0); - assert!(Runtime::query_account_balances(AccountId::from(ALICE)).unwrap().is_empty()); + assert!(Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_as::() + .unwrap() + .is_none()); // Drip some balance use frame_support::traits::fungible::Mutate; @@ -437,24 +441,27 @@ fn test_assets_balances_api_works() { ); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), some_currency); - let result = Runtime::query_account_balances(AccountId::from(ALICE)).unwrap(); + let result: MultiAssets = Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_into() + .unwrap(); assert_eq!(result.len(), 3); // check currency - assert!(result.iter().any(|asset| asset.eq( + assert!(result.inner().iter().any(|asset| asset.eq( &assets_common::fungible_conversion::convert_balance::( some_currency ) .unwrap() ))); // check trusted asset - assert!(result.iter().any(|asset| asset.eq(&( + assert!(result.inner().iter().any(|asset| asset.eq(&( AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(), minimum_asset_balance ) .into()))); // check foreign asset - assert!(result.iter().any(|asset| asset.eq(&( + assert!(result.inner().iter().any(|asset| asset.eq(&( Identity::reverse_ref(foreign_asset_id_multilocation).unwrap(), 6 * foreign_asset_minimum_asset_balance ) diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index a72df7314e6..aa90ca7a157 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -855,7 +855,7 @@ impl_runtime_apis! { AccountId, > for Runtime { - fn query_account_balances(account: AccountId) -> Result, assets_common::runtime_api::FungiblesAccessError> { + fn query_account_balances(account: AccountId) -> Result { use assets_common::fungible_conversion::{convert, convert_balance}; Ok([ // collect pallet_balance @@ -874,7 +874,7 @@ impl_runtime_apis! { .filter(|(_, balance)| balance > &0) )?, // collect ... e.g. pallet_assets ForeignAssets - ].concat()) + ].concat().into()) } } diff --git a/parachains/runtimes/assets/statemint/tests/tests.rs b/parachains/runtimes/assets/statemint/tests/tests.rs index 501c16960aa..75f6aaf6d57 100644 --- a/parachains/runtimes/assets/statemint/tests/tests.rs +++ b/parachains/runtimes/assets/statemint/tests/tests.rs @@ -389,7 +389,11 @@ fn test_assets_balances_api_works() { // check before assert_eq!(Assets::balance(local_asset_id, AccountId::from(ALICE)), 0); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 0); - assert!(Runtime::query_account_balances(AccountId::from(ALICE)).unwrap().is_empty()); + assert!(Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_as::() + .unwrap() + .is_none()); // Drip some balance use frame_support::traits::fungible::Mutate; @@ -421,18 +425,21 @@ fn test_assets_balances_api_works() { ); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), some_currency); - let result = Runtime::query_account_balances(AccountId::from(ALICE)).unwrap(); + let result: MultiAssets = Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_into() + .unwrap(); assert_eq!(result.len(), 2); // check currency - assert!(result.iter().any(|asset| asset.eq( + assert!(result.inner().iter().any(|asset| asset.eq( &assets_common::fungible_conversion::convert_balance::( some_currency ) .unwrap() ))); // check trusted asset - assert!(result.iter().any(|asset| asset.eq(&( + assert!(result.inner().iter().any(|asset| asset.eq(&( AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(), minimum_asset_balance ) diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 97d2596a4bd..c237c8dc5cf 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -963,7 +963,7 @@ impl_runtime_apis! { AccountId, > for Runtime { - fn query_account_balances(account: AccountId) -> Result, assets_common::runtime_api::FungiblesAccessError> { + fn query_account_balances(account: AccountId) -> Result { use assets_common::fungible_conversion::{convert, convert_balance}; Ok([ // collect pallet_balance @@ -988,7 +988,7 @@ impl_runtime_apis! { .filter(|(_, balance)| balance > &0) )?, // collect ... e.g. other tokens - ].concat()) + ].concat().into()) } } diff --git a/parachains/runtimes/assets/westmint/tests/tests.rs b/parachains/runtimes/assets/westmint/tests/tests.rs index e04c163b01f..c0c20c6b61a 100644 --- a/parachains/runtimes/assets/westmint/tests/tests.rs +++ b/parachains/runtimes/assets/westmint/tests/tests.rs @@ -388,7 +388,11 @@ fn test_assets_balances_api_works() { 0 ); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 0); - assert!(Runtime::query_account_balances(AccountId::from(ALICE)).unwrap().is_empty()); + assert!(Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_as::() + .unwrap() + .is_none()); // Drip some balance use frame_support::traits::fungible::Mutate; @@ -442,24 +446,27 @@ fn test_assets_balances_api_works() { ); assert_eq!(Balances::free_balance(AccountId::from(ALICE)), some_currency); - let result = Runtime::query_account_balances(AccountId::from(ALICE)).unwrap(); + let result: MultiAssets = Runtime::query_account_balances(AccountId::from(ALICE)) + .unwrap() + .try_into() + .unwrap(); assert_eq!(result.len(), 3); // check currency - assert!(result.iter().any(|asset| asset.eq( + assert!(result.inner().iter().any(|asset| asset.eq( &assets_common::fungible_conversion::convert_balance::( some_currency ) .unwrap() ))); // check trusted asset - assert!(result.iter().any(|asset| asset.eq(&( + assert!(result.inner().iter().any(|asset| asset.eq(&( AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(), minimum_asset_balance ) .into()))); // check foreign asset - assert!(result.iter().any(|asset| asset.eq(&( + assert!(result.inner().iter().any(|asset| asset.eq(&( Identity::reverse_ref(foreign_asset_id_multilocation).unwrap(), 6 * foreign_asset_minimum_asset_balance )