From a8f92f7e52798325bc12e9594c8a998c1fe6a6d7 Mon Sep 17 00:00:00 2001 From: Grigoriy Simonov Date: Mon, 22 May 2023 13:21:36 +0000 Subject: [PATCH] feat: switch `common` from `Currency` trait to `fungible::*` traits --- --- a/pallets/common/src/benchmarking.rs +++ b/pallets/common/src/benchmarking.rs @@ -27,12 +27,12 @@ MAX_PROPERTIES_PER_ITEM, }; use frame_support::{ - traits::{Currency, Get}, + traits::{Get, fungible::Balanced, Imbalance, tokens::Precision}, pallet_prelude::ConstU32, BoundedVec, }; use core::convert::TryInto; -use sp_runtime::DispatchError; +use sp_runtime::{DispatchError, traits::Zero}; const SEED: u32 = 1; @@ -85,7 +85,12 @@ ) -> Result, cast: impl FnOnce(CollectionHandle) -> R, ) -> Result { - ::Currency::deposit_creating(&owner.as_sub(), T::CollectionCreationPrice::get()); + let imbalance = ::Currency::deposit( + &owner.as_sub(), + T::CollectionCreationPrice::get(), + Precision::Exact, + )?; + debug_assert!(imbalance.peek().is_zero()); let name = create_u16_data::(); let description = create_u16_data::(); let token_prefix = create_data::(); --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -64,7 +64,11 @@ use frame_support::{ dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo, Weight, PostDispatchInfo}, ensure, - traits::{Imbalance, Get, Currency, WithdrawReasons, ExistenceRequirement}, + traits::{ + Get, + fungible::{Balanced, Debt, Inspect}, + tokens::{Imbalance, Precision, Preservation}, + }, dispatch::Pays, transactional, fail, }; @@ -85,7 +89,7 @@ pub use pallet::*; use sp_core::H160; -use sp_runtime::{ArithmeticError, DispatchError, DispatchResult}; +use sp_runtime::{ArithmeticError, DispatchError, DispatchResult, traits::Zero}; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; @@ -424,7 +428,6 @@ use super::*; use dispatch::CollectionDispatch; use frame_support::{Blake2_128Concat, pallet_prelude::*, storage::Key, traits::StorageVersion}; - use frame_support::traits::Currency; use up_data_structs::{TokenId, mapping::TokenAddressMapping}; use scale_info::TypeInfo; use weights::WeightInfo; @@ -440,12 +443,12 @@ type RuntimeEvent: IsType<::RuntimeEvent> + From>; /// Handler of accounts and payment. - type Currency: Currency; + type Currency: Balanced + Inspect; /// Set price to create a collection. #[pallet::constant] type CollectionCreationPrice: Get< - <::Currency as Currency>::Balance, + <::Currency as Inspect>::Balance, >; /// Dispatcher of operations on collections. @@ -1112,21 +1115,17 @@ // Take a (non-refundable) deposit of collection creation { - let mut imbalance = - <<::Currency as Currency>::PositiveImbalance>::zero(); - imbalance.subsume( - <::Currency as Currency>::deposit_creating( - &T::TreasuryAccountId::get(), - T::CollectionCreationPrice::get(), - ), - ); - ::Currency::settle( - payer.as_sub(), - imbalance, - WithdrawReasons::TRANSFER, - ExistenceRequirement::KeepAlive, - ) - .map_err(|_| Error::::NotSufficientFounds)?; + let mut imbalance = ::Currency>>::zero(); + imbalance.subsume(::Currency::deposit( + &T::TreasuryAccountId::get(), + T::CollectionCreationPrice::get(), + Precision::Exact, + )?); + let credit = + ::Currency::settle(payer.as_sub(), imbalance, Preservation::Preserve) + .map_err(|_| Error::::NotSufficientFounds)?; + + debug_assert!(credit.peek().is_zero()) } >::put(created_count); -- gitstuff