Changed query_account_balances return type (#2455)

This commit is contained in:
Branislav Kontur
2023-04-17 17:01:40 +02:00
committed by GitHub
parent 863e94d862
commit 72349fce04
7 changed files with 46 additions and 20 deletions
@@ -31,11 +31,16 @@ pub enum FungiblesAccessError {
sp_api::decl_runtime_apis! { sp_api::decl_runtime_apis! {
/// The API for querying account's balances from runtime. /// The API for querying account's balances from runtime.
#[api_version(2)]
pub trait FungiblesApi<AccountId> pub trait FungiblesApi<AccountId>
where where
AccountId: Codec, AccountId: Codec,
{ {
/// Returns the list of all [`MultiAsset`] that an `AccountId` has. /// Returns the list of all [`MultiAsset`] that an `AccountId` has.
#[changed_in(2)]
fn query_account_balances(account: AccountId) -> Result<Vec<MultiAsset>, FungiblesAccessError>; fn query_account_balances(account: AccountId) -> Result<Vec<MultiAsset>, FungiblesAccessError>;
/// Returns the list of all [`MultiAsset`] that an `AccountId` has.
fn query_account_balances(account: AccountId) -> Result<xcm::VersionedMultiAssets, FungiblesAccessError>;
} }
} }
@@ -951,7 +951,7 @@ impl_runtime_apis! {
AccountId, AccountId,
> for Runtime > for Runtime
{ {
fn query_account_balances(account: AccountId) -> Result<Vec<xcm::latest::MultiAsset>, assets_common::runtime_api::FungiblesAccessError> { fn query_account_balances(account: AccountId) -> Result<xcm::VersionedMultiAssets, assets_common::runtime_api::FungiblesAccessError> {
use assets_common::fungible_conversion::{convert, convert_balance}; use assets_common::fungible_conversion::{convert, convert_balance};
Ok([ Ok([
// collect pallet_balance // collect pallet_balance
@@ -976,7 +976,7 @@ impl_runtime_apis! {
.filter(|(_, balance)| balance > &0) .filter(|(_, balance)| balance > &0)
)?, )?,
// collect ... e.g. other tokens // collect ... e.g. other tokens
].concat()) ].concat().into())
} }
} }
@@ -383,7 +383,11 @@ fn test_assets_balances_api_works() {
0 0
); );
assert_eq!(Balances::free_balance(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::<MultiAssets>()
.unwrap()
.is_none());
// Drip some balance // Drip some balance
use frame_support::traits::fungible::Mutate; 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); 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); assert_eq!(result.len(), 3);
// check currency // check currency
assert!(result.iter().any(|asset| asset.eq( assert!(result.inner().iter().any(|asset| asset.eq(
&assets_common::fungible_conversion::convert_balance::<KsmLocation, Balance>( &assets_common::fungible_conversion::convert_balance::<KsmLocation, Balance>(
some_currency some_currency
) )
.unwrap() .unwrap()
))); )));
// check trusted asset // 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(), AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(),
minimum_asset_balance minimum_asset_balance
) )
.into()))); .into())));
// check foreign asset // 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(), Identity::reverse_ref(foreign_asset_id_multilocation).unwrap(),
6 * foreign_asset_minimum_asset_balance 6 * foreign_asset_minimum_asset_balance
) )
@@ -855,7 +855,7 @@ impl_runtime_apis! {
AccountId, AccountId,
> for Runtime > for Runtime
{ {
fn query_account_balances(account: AccountId) -> Result<Vec<xcm::latest::MultiAsset>, assets_common::runtime_api::FungiblesAccessError> { fn query_account_balances(account: AccountId) -> Result<xcm::VersionedMultiAssets, assets_common::runtime_api::FungiblesAccessError> {
use assets_common::fungible_conversion::{convert, convert_balance}; use assets_common::fungible_conversion::{convert, convert_balance};
Ok([ Ok([
// collect pallet_balance // collect pallet_balance
@@ -874,7 +874,7 @@ impl_runtime_apis! {
.filter(|(_, balance)| balance > &0) .filter(|(_, balance)| balance > &0)
)?, )?,
// collect ... e.g. pallet_assets ForeignAssets // collect ... e.g. pallet_assets ForeignAssets
].concat()) ].concat().into())
} }
} }
@@ -389,7 +389,11 @@ fn test_assets_balances_api_works() {
// check before // check before
assert_eq!(Assets::balance(local_asset_id, AccountId::from(ALICE)), 0); assert_eq!(Assets::balance(local_asset_id, AccountId::from(ALICE)), 0);
assert_eq!(Balances::free_balance(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::<MultiAssets>()
.unwrap()
.is_none());
// Drip some balance // Drip some balance
use frame_support::traits::fungible::Mutate; 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); 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); assert_eq!(result.len(), 2);
// check currency // check currency
assert!(result.iter().any(|asset| asset.eq( assert!(result.inner().iter().any(|asset| asset.eq(
&assets_common::fungible_conversion::convert_balance::<DotLocation, Balance>( &assets_common::fungible_conversion::convert_balance::<DotLocation, Balance>(
some_currency some_currency
) )
.unwrap() .unwrap()
))); )));
// check trusted asset // 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(), AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(),
minimum_asset_balance minimum_asset_balance
) )
@@ -963,7 +963,7 @@ impl_runtime_apis! {
AccountId, AccountId,
> for Runtime > for Runtime
{ {
fn query_account_balances(account: AccountId) -> Result<Vec<xcm::latest::MultiAsset>, assets_common::runtime_api::FungiblesAccessError> { fn query_account_balances(account: AccountId) -> Result<xcm::VersionedMultiAssets, assets_common::runtime_api::FungiblesAccessError> {
use assets_common::fungible_conversion::{convert, convert_balance}; use assets_common::fungible_conversion::{convert, convert_balance};
Ok([ Ok([
// collect pallet_balance // collect pallet_balance
@@ -988,7 +988,7 @@ impl_runtime_apis! {
.filter(|(_, balance)| balance > &0) .filter(|(_, balance)| balance > &0)
)?, )?,
// collect ... e.g. other tokens // collect ... e.g. other tokens
].concat()) ].concat().into())
} }
} }
@@ -388,7 +388,11 @@ fn test_assets_balances_api_works() {
0 0
); );
assert_eq!(Balances::free_balance(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::<MultiAssets>()
.unwrap()
.is_none());
// Drip some balance // Drip some balance
use frame_support::traits::fungible::Mutate; 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); 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); assert_eq!(result.len(), 3);
// check currency // check currency
assert!(result.iter().any(|asset| asset.eq( assert!(result.inner().iter().any(|asset| asset.eq(
&assets_common::fungible_conversion::convert_balance::<WestendLocation, Balance>( &assets_common::fungible_conversion::convert_balance::<WestendLocation, Balance>(
some_currency some_currency
) )
.unwrap() .unwrap()
))); )));
// check trusted asset // 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(), AssetIdForTrustBackedAssetsConvert::reverse_ref(local_asset_id).unwrap(),
minimum_asset_balance minimum_asset_balance
) )
.into()))); .into())));
// check foreign asset // 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(), Identity::reverse_ref(foreign_asset_id_multilocation).unwrap(),
6 * foreign_asset_minimum_asset_balance 6 * foreign_asset_minimum_asset_balance
) )