diff --git a/substrate/frame/assets/src/impl_fungibles.rs b/substrate/frame/assets/src/impl_fungibles.rs index 6b263bc0c7befe520a829bc91071c3e3258cf161..842ee5c102c1d6a0d1d6ab617dec60bf3146291d 100644 --- a/substrate/frame/assets/src/impl_fungibles.rs +++ b/substrate/frame/assets/src/impl_fungibles.rs @@ -263,3 +263,23 @@ impl<T: Config<I>, I: 'static> fungibles::approvals::Mutate<<T as SystemConfig>: Self::do_transfer_approved(asset, owner, delegate, dest, amount) } } + +impl<T: Config<I>, I: 'static> fungibles::roles::Inspect<<T as SystemConfig>::AccountId> + for Pallet<T, I> +{ + fn owner(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> { + Asset::<T, I>::get(asset).map(|x| x.owner) + } + + fn issuer(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> { + Asset::<T, I>::get(asset).map(|x| x.issuer) + } + + fn admin(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> { + Asset::<T, I>::get(asset).map(|x| x.admin) + } + + fn freezer(asset: T::AssetId) -> Option<<T as SystemConfig>::AccountId> { + Asset::<T, I>::get(asset).map(|x| x.freezer) + } +} diff --git a/substrate/frame/assets/src/tests.rs b/substrate/frame/assets/src/tests.rs index 50ab04111edfff05bde0bdf714555a070ec44f09..598b6049b3d571f12bdbda066b2b51b53ab1ea71 100644 --- a/substrate/frame/assets/src/tests.rs +++ b/substrate/frame/assets/src/tests.rs @@ -977,3 +977,25 @@ fn transfer_large_asset() { assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, amount - 1)); }) } + +#[test] +fn querying_roles_should_work() { + new_test_ext().execute_with(|| { + use frame_support::traits::tokens::fungibles::roles::Inspect; + assert_ok!(Assets::force_create(Origin::root(), 0, 1, true, 1)); + assert_ok!(Assets::set_team( + Origin::signed(1), + 0, + // Issuer + 2, + // Admin + 3, + // Freezer + 4, + )); + assert_eq!(Assets::owner(0), Some(1)); + assert_eq!(Assets::issuer(0), Some(2)); + assert_eq!(Assets::admin(0), Some(3)); + assert_eq!(Assets::freezer(0), Some(4)); + }); +} diff --git a/substrate/frame/support/src/traits/tokens/fungibles.rs b/substrate/frame/support/src/traits/tokens/fungibles.rs index dab50d56962f6322334b1f472e7e265edf64324c..e4108b7f80a989e4d883ff59b74c2e71a371cf18 100644 --- a/substrate/frame/support/src/traits/tokens/fungibles.rs +++ b/substrate/frame/support/src/traits/tokens/fungibles.rs @@ -31,6 +31,7 @@ pub mod metadata; pub use balanced::{Balanced, Unbalanced}; mod imbalance; pub use imbalance::{CreditOf, DebtOf, HandleImbalanceDrop, Imbalance}; +pub mod roles; /// Trait for providing balance-inspection access to a set of named fungible assets. pub trait Inspect<AccountId> { diff --git a/substrate/frame/support/src/traits/tokens/fungibles/roles.rs b/substrate/frame/support/src/traits/tokens/fungibles/roles.rs new file mode 100644 index 0000000000000000000000000000000000000000..18fd1cc801210cef2545a950d65b01a5f2cf6829 --- /dev/null +++ b/substrate/frame/support/src/traits/tokens/fungibles/roles.rs @@ -0,0 +1,29 @@ +// This file is part of Substrate. + +// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Inspect traits for Asset roles + +pub trait Inspect<AccountId>: super::Inspect<AccountId> { + // Get owner for an AssetId. + fn owner(asset: Self::AssetId) -> Option<AccountId>; + // Get issuer for an AssetId. + fn issuer(asset: Self::AssetId) -> Option<AccountId>; + // Get admin for an AssetId. + fn admin(asset: Self::AssetId) -> Option<AccountId>; + // Get freezer for an AssetId. + fn freezer(asset: Self::AssetId) -> Option<AccountId>; +}