From 8065116ba5e9cb79d02859b72c76dc1379401a25 Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 19 Feb 2019 17:13:59 +0100 Subject: [PATCH] Improve fees module (#1821) * remove amount associated * make a new trait to bound some arithmetics to balances or assets: It also remove arithmetic bounds of srml-support::traits::Currency. To update your code then use srml_support::traits::ArithmeticType like: `type Currency: ArithmeticType + Currency>; ` with `type BalanceOf = <::Currency as ArithmeticType>::Type; ` * improve decl_storage when it explicit serde bound: basically don't try to be smarter than rust and just use where clause. --- .../substrate_test_runtime.compact.wasm | Bin 56872 -> 56887 bytes substrate/node-template/runtime/src/lib.rs | 1 - substrate/node/runtime/src/lib.rs | 3 +- .../release/node_runtime.compact.wasm | Bin 822578 -> 822694 bytes substrate/srml/balances/src/lib.rs | 8 ++- substrate/srml/contract/src/tests.rs | 1 - substrate/srml/council/src/seats.rs | 4 +- substrate/srml/democracy/src/lib.rs | 6 +- substrate/srml/executive/src/lib.rs | 1 - substrate/srml/fees/src/lib.rs | 27 +++++---- substrate/srml/fees/src/mock.rs | 9 ++- substrate/srml/staking/src/lib.rs | 6 +- .../procedural/src/storage/transformation.rs | 14 ++--- .../support/procedural/tools/src/syn_ext.rs | 54 ------------------ substrate/srml/support/src/traits.rs | 6 +- substrate/srml/treasury/src/lib.rs | 8 +-- 16 files changed, 48 insertions(+), 100 deletions(-) diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 23239e917eabf85bb24340d0747d52bad15d2723..8bd317e605a271cded36c515e80948ed531a7eda 100644 GIT binary patch delta 2960 zcmb7FYit$A72erJAbrT#E!)3`Jh(3OHMImQqJZh4tUc|?#JwWw(oMI|Z)NJGjY1|YBvtS_nVTk%Y#|PZNPXtO zzCIy)n_vxunc^E_UeQ!uP+wb@^`C!N#c5$Uv+Tcdc)WBm>4aUSb0&BFIEpT0 zk4HP}v$j6L5@{iPT&m>_U|zZyPm0zaOh?BPM7l%>XH;yPo^xjh8saNjX8kSv?UGd@ z`DYk=dJZ8yP_?X{>%l)%27(9 zhBjDTXh4hMXLXh6ezNXh8rcIatN%o%LEUrtwf8YwUF?V@#YMyrC!tH*-iHTv#2%ir z6ZKJD)=(r!DBK?v1_djFPDIUM_`!2a;60<#T!mw zCZ`)>B!6%xR;|#=$aRbu-v0itMYP`CG>;TRchhXNzunYBCjB&(TN~CIWt)@A7LK&! z<&GwYgiuq2=z|+A4BfI`xh}Gfl-tmV+c%3G62Dm_OsEVgl^U%T)5X6;Q|bIaqeq>ESvyu^ptfa`VBd~~S@$DG zM=c+OYdh{?+;eYcM-961qqCF7L?367;W0q>t`@YKv-{tXRmTzj|Dm)JF4y>GMp;U&Niy{@4Ag;hA;+lf`@=-k${XTzN^mg6I+a7#djB@H6#Mf|T z;+h_(!o)H9CXAo{E&5#}dKvA0b(;|ooWz1SK{+N#L0-?L&pf~ z@Hz5(G(KHO1s+u>aUs>8C~)-K2lapWXu{Y3$+Mt_l);l{R#J&^)zvlAHe^>em;?vU z%%Y4NisX2T&Q+aBiUdPvnkO(@wQWx}99NbU&SA~javDgQF8KjB9feD>A;C}1)>1{+ zCGMM=;n+4eJrC}kZKS#>yMY>*uBin9^Htb*ZV}bofJwT|ICErS4B~=NrZIp#5fkUeMTDUA<1$OwN5z<%Z`87dDv-l564O zg;IF`0;Otzy>~TPlQ?$*--Nq^wbb{08SB+0PjfY&IZ$_TMM7q>u9{r-Fk8jc{BkHg z_bBCoiKcGg;&e@0mqEN#GeK81S&?}lYdV+I0O~Jw<=S4v32dLK;Dr33N{77{3Ja^N z{U*2B^RZvPfhDMFV5^4hF;9j1%MH0WAQl8h#1hVA+hEI~?M4CIxjZX3(0oIS_@!y4 zt{SdXfz8jGh$l&o&updzHs`vmGA(@K$_IohnjtF;r>L2}%?urKt{$a0KqgC)=W>pe z(HLC5x+%eYm-|kDGHc delta 2981 zcmb7FdvF!i89%%CCM3Cu>P4Rpvw+ae+fk66i-`PEQDAIE%vaeBq6~att6iQ&D@THs>AyEO|5SHfmzSvJ|Ibht2iq ze!Tg$93c%ID?b$OhUSMRHC@9VxY!*@hzkT=EJ2s+8O>@}>mFjFn;?tO%08k+p! z*-wP!w@t91YNS+Vf0Gd|{yyB5Jzp?;I9aIKx)Kwm7ni_`Tjv#A3mF}bd;l(P{X6D8 z{ah>@(B&82D;bl0Tv8a_2I$+?fmSoO|0}fWSXlxMJ5DBUTPA~$tGsGAU#T+hn;z~ppSK!-cJK^KqX6~g7L4xX+o-VB3g``X5 zC!*4WVK+CcPlwvVtTqkD_9|H2r+c57-JKbcF`BFzLynRV8H}=l+d~l(spRN32d}!?d2sxueF=*fWX#uhA%PLMG*967&d|p$r}KZe@6` zXY*b7HOW7CALdzdFoH)9mi4ycnd|SZtlyW(iDx)W$ub$kXjo)Iuw-&cda zw9l&V&3Iv+&@22Dj5dj3P%gs~@XTd9ghPD{6W{2o7H9Wo-0)b3Zg+Bb%sJ1td+(tG z^(VhTro`LFgc11o?ZvTz1i>;ikw^tF@9;}P51c(*hv)C#habTY;;JK4@cGn{4fy=) zk$do2)*p5@zrU)eh%7jN?y zR33deSbtO$<5|U=C)?LO_C$x}c(C)>7LgDrIo|qz7pFnr@f3VzU>;NrOoz<_b-~XE z@Sk!0#MkroAoF6~Q3A~;>&-_9Axi{8au6>OiF_Hc4KdWWWc9uvks^G50I?kLLPR3- z;g=_uZ<>ozHEPa?5?O$_3~#K8OhA3@7=0Km)W3pu_+PnYzc#DyMf*yWGm#OW#ycPH ziBXA67^82)igIu3H{EjBmR+bthp~a)$m%zseil0Z6tNKT0Ad93B4Qlz8sa3xKVp^P zC`b6_;`=>^5y*IgbKZ7$Q&9fBO)iuqrd{47|U_(u%uBYGt9I6_M<+zGI?W^;;ID@N0(_v&-l2q4s zO&1+)Q}(G!;kQFfvN*FX><_2xP+N6j>Tu(D*|uy~_YB#>xhoE|4fDx3a-A~fGoQbR-aiW;kJ3Y zX)xEZ98J?1ymO{e(y6Lgp6MD)Ru$jyAbz%SyytVw=P0^jQ`fO!&Dq{!$MGztP{o&h zS2cWhHiwso%F7!Xyf&xZ^%@%1a;~Wsvcp!fIh0_{xl}Q?OxL!V=_{1mx~kA6u=8>m z{Ow##v8DK)f)jRhN-f+KxekU0ODA9?!*VspFd1^d(_PyOTF$>ENSftx$5&h~o17Yk z4CNONN}BJOHZ>T>QCb|E`rU=Dxa@kWZu_RG*ovxZv;n3@rojsrS4fV^LdH?sMt*3H z8T{$u1&mBNGqHbLF;r8vmEhdv7BTMoI7S`$<5ENSxbrnw8ZCvU57tYRBXJp1eQJ0( z3LW16V6Mbi mL2B8WrTTuj7kKy__|=t1CmNQgtJGpFp-|bJMU`2U)%_P_kV$#~ diff --git a/substrate/node-template/runtime/src/lib.rs b/substrate/node-template/runtime/src/lib.rs index 39a18593f1..7c68046707 100644 --- a/substrate/node-template/runtime/src/lib.rs +++ b/substrate/node-template/runtime/src/lib.rs @@ -165,7 +165,6 @@ impl balances::Trait for Runtime { } impl fees::Trait for Runtime { - type Amount = u128; type TransferAsset = Balances; type Event = Event; } diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 89f3a58030..3f242dcc5b 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -61,7 +61,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("substrate-node"), authoring_version: 10, spec_version: 29, - impl_version: 30, + impl_version: 31, apis: RUNTIME_API_VERSIONS, }; @@ -109,7 +109,6 @@ impl balances::Trait for Runtime { impl fees::Trait for Runtime { type Event = Event; - type Amount = Balance; type TransferAsset = Balances; } diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index b6ff057716ca4196181b2e7c1a221188c6837854..d320f9a372bff82472003f1075be115b1e34a9e5 100644 GIT binary patch delta 66511 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
4vPB0QQ8(e{!>i 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⋙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 + As; + type Balance: Parameter + Member + SimpleArithmetic + Codec + Default + Copy + As + As + MaybeSerializeDebug; /// A function which is invoked when the free-balance has fallen below the existential deposit and /// has been reduced to zero. @@ -58,6 +58,10 @@ pub trait Trait: system::Trait { type Event: From> + Into<::Event>; } +impl ArithmeticType for Module { + type Type = ::Balance; +} + decl_event!( pub enum Event where ::AccountId, diff --git a/substrate/srml/contract/src/tests.rs b/substrate/srml/contract/src/tests.rs index 6febc2dec4..b49cbdcbaf 100644 --- a/substrate/srml/contract/src/tests.rs +++ b/substrate/srml/contract/src/tests.rs @@ -91,7 +91,6 @@ impl consensus::Trait for Test { } impl fees::Trait for Test { type Event = MetaEvent; - type Amount = u64; type TransferAsset = Balances; } impl Trait for Test { diff --git a/substrate/srml/council/src/seats.rs b/substrate/srml/council/src/seats.rs index 6fd4f1cfec..27a22bbf47 100644 --- a/substrate/srml/council/src/seats.rs +++ b/substrate/srml/council/src/seats.rs @@ -77,11 +77,11 @@ use system::{self, ensure_signed}; // after each vote as all but K entries are cleared. newly registering candidates must use cleared // entries before they increase the capacity. -use srml_support::decl_module; +use srml_support::{decl_module, traits::ArithmeticType}; pub type VoteIndex = u32; -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as ArithmeticType>::Type; pub trait Trait: democracy::Trait { type Event: From> + Into<::Event>; diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs index 5045a0ca3d..539aa4227b 100644 --- a/substrate/srml/democracy/src/lib.rs +++ b/substrate/srml/democracy/src/lib.rs @@ -24,7 +24,7 @@ use primitives::traits::{Zero, As}; use parity_codec_derive::{Encode, Decode}; use srml_support::{StorageValue, StorageMap, Parameter, Dispatchable, IsSubType}; use srml_support::{decl_module, decl_storage, decl_event, ensure}; -use srml_support::traits::{Currency, OnFreeBalanceZero, EnsureAccountLiquid}; +use srml_support::traits::{Currency, OnFreeBalanceZero, EnsureAccountLiquid, ArithmeticType}; use srml_support::dispatch::Result; use system::ensure_signed; @@ -65,10 +65,10 @@ impl Vote { } } -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as ArithmeticType>::Type; pub trait Trait: system::Trait + Sized { - type Currency: Currency<::AccountId>; + type Currency: ArithmeticType + Currency<::AccountId, Balance=BalanceOf>; type Proposal: Parameter + Dispatchable + IsSubType>; diff --git a/substrate/srml/executive/src/lib.rs b/substrate/srml/executive/src/lib.rs index dfc369174f..1638bc6e62 100644 --- a/substrate/srml/executive/src/lib.rs +++ b/substrate/srml/executive/src/lib.rs @@ -324,7 +324,6 @@ mod tests { } impl fees::Trait for Runtime { type Event = MetaEvent; - type Amount = u64; type TransferAsset = balances::Module; } diff --git a/substrate/srml/fees/src/lib.rs b/substrate/srml/fees/src/lib.rs index a86ea68cdb..d6809bac30 100644 --- a/substrate/srml/fees/src/lib.rs +++ b/substrate/srml/fees/src/lib.rs @@ -19,9 +19,9 @@ // Ensure we're `no_std` when compiling for Wasm. #![cfg_attr(not(feature = "std"), no_std)] -use srml_support::{dispatch::Result, Parameter, StorageMap, decl_event, decl_storage, decl_module}; +use srml_support::{dispatch::Result, traits::ArithmeticType, StorageMap, decl_event, decl_storage, decl_module}; use runtime_primitives::traits::{ - As, Member, SimpleArithmetic, ChargeBytesFee, ChargeFee, + As, ChargeBytesFee, ChargeFee, TransferAsset, CheckedAdd, CheckedSub, CheckedMul, Zero }; use system; @@ -29,15 +29,14 @@ use system; mod mock; mod tests; +type AssetOf = <::TransferAsset as ArithmeticType>::Type; + pub trait Trait: system::Trait { /// The overarching event type. type Event: From> + Into<::Event>; - /// The unit for fee amount - type Amount: Member + Parameter + SimpleArithmetic + Default + Copy + As; - /// A function does the asset transfer between accounts - type TransferAsset: TransferAsset; + type TransferAsset: ArithmeticType + TransferAsset>; } decl_module! { @@ -58,7 +57,7 @@ decl_module! { } decl_event!( - pub enum Event where ::Amount { + pub enum Event where Amount = AssetOf { /// Fee charged (extrinsic_index, fee_amount) Charged(u32, Amount), } @@ -67,22 +66,22 @@ decl_event!( decl_storage! { trait Store for Module as Fees { /// The fee to be paid for making a transaction; the base. - pub TransactionBaseFee get(transaction_base_fee) config(): T::Amount; + pub TransactionBaseFee get(transaction_base_fee) config(): AssetOf; /// The fee to be paid for making a transaction; the per-byte portion. - pub TransactionByteFee get(transaction_byte_fee) config(): T::Amount; + pub TransactionByteFee get(transaction_byte_fee) config(): AssetOf; /// The `extrinsic_index => accumulated_fees` map, containing records to /// track the overall charged fees for each transaction. /// /// All records should be removed at finalise stage. - CurrentTransactionFee get(current_transaction_fee): map u32 => T::Amount; + CurrentTransactionFee get(current_transaction_fee): map u32 => AssetOf; } } impl ChargeBytesFee for Module { fn charge_base_bytes_fee(transactor: &T::AccountId, encoded_len: usize) -> Result { let bytes_fee = Self::transaction_byte_fee().checked_mul( - &>::sa(encoded_len as u64) + & as As>::sa(encoded_len as u64) ).ok_or_else(|| "bytes fee overflow")?; let overall = Self::transaction_base_fee().checked_add(&bytes_fee).ok_or_else(|| "bytes fee overflow")?; Self::charge_fee(transactor, overall) @@ -90,9 +89,9 @@ impl ChargeBytesFee for Module { } impl ChargeFee for Module { - type Amount = T::Amount; + type Amount = AssetOf; - fn charge_fee(transactor: &T::AccountId, amount: T::Amount) -> Result { + fn charge_fee(transactor: &T::AccountId, amount: AssetOf) -> Result { let extrinsic_index = >::extrinsic_index().ok_or_else(|| "no extrinsic index found")?; let current_fee = Self::current_transaction_fee(extrinsic_index); let new_fee = current_fee.checked_add(&amount).ok_or_else(|| "fee got overflow after charge")?; @@ -103,7 +102,7 @@ impl ChargeFee for Module { Ok(()) } - fn refund_fee(transactor: &T::AccountId, amount: T::Amount) -> Result { + fn refund_fee(transactor: &T::AccountId, amount: AssetOf) -> Result { let extrinsic_index = >::extrinsic_index().ok_or_else(|| "no extrinsic index found")?; let current_fee = Self::current_transaction_fee(extrinsic_index); let new_fee = current_fee.checked_sub(&amount).ok_or_else(|| "fee got underflow after refund")?; diff --git a/substrate/srml/fees/src/mock.rs b/substrate/srml/fees/src/mock.rs index 46058e1921..dd93335eef 100644 --- a/substrate/srml/fees/src/mock.rs +++ b/substrate/srml/fees/src/mock.rs @@ -25,7 +25,7 @@ use runtime_primitives::{ }; use primitives::{H256, Blake2Hasher}; use runtime_io; -use srml_support::{impl_outer_origin, impl_outer_event}; +use srml_support::{impl_outer_origin, impl_outer_event, traits::ArithmeticType}; use crate::{GenesisConfig, Module, Trait, system}; impl_outer_origin!{ @@ -52,6 +52,10 @@ impl TransferAsset for TransferAssetMock { fn add_to(_: &AccountId, _: Self::Amount) -> Result<(), &'static str> { Ok(()) } } +impl ArithmeticType for TransferAssetMock { + type Type = u64; +} + // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, PartialEq, Eq, Debug)] pub struct Test; @@ -69,8 +73,7 @@ impl system::Trait for Test { type Log = DigestItem; } impl Trait for Test { - type Amount = u64; - type Event =TestEvent; + type Event = TestEvent; type TransferAsset = TransferAssetMock; } diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs index b22190eae3..34fa4f036c 100644 --- a/substrate/srml/staking/src/lib.rs +++ b/substrate/srml/staking/src/lib.rs @@ -25,7 +25,7 @@ use parity_codec::HasCompact; use parity_codec_derive::{Encode, Decode}; use srml_support::{Parameter, StorageValue, StorageMap, dispatch::Result}; use srml_support::{decl_module, decl_event, decl_storage, ensure}; -use srml_support::traits::{Currency, OnDilution, EnsureAccountLiquid, OnFreeBalanceZero}; +use srml_support::traits::{Currency, OnDilution, EnsureAccountLiquid, OnFreeBalanceZero, ArithmeticType}; use session::OnSessionChange; use primitives::Perbill; use primitives::traits::{Zero, One, Bounded, As, StaticLookup}; @@ -67,11 +67,11 @@ impl Default for ValidatorPrefs { } } -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as ArithmeticType>::Type; pub trait Trait: system::Trait + session::Trait { /// The staking balance. - type Currency: Currency; + type Currency: ArithmeticType + Currency>; /// Some tokens minted. type OnRewardMinted: OnDilution>; diff --git a/substrate/srml/support/procedural/src/storage/transformation.rs b/substrate/srml/support/procedural/src/storage/transformation.rs index 736d39cae7..f5eefb7844 100644 --- a/substrate/srml/support/procedural/src/storage/transformation.rs +++ b/substrate/srml/support/procedural/src/storage/transformation.rs @@ -192,13 +192,10 @@ fn decl_store_extra_genesis( is_trait_needed = true; has_trait_field = true; } - for t in ext::get_non_bound_serde_derive_types(type_infos.value_type, &traitinstance) { - serde_complete_bound.insert(t); - } + + serde_complete_bound.insert(type_infos.value_type); if let DeclStorageTypeInfosKind::Map { key_type, .. } = type_infos.kind { - for t in ext::get_non_bound_serde_derive_types(key_type, &traitinstance) { - serde_complete_bound.insert(t); - } + serde_complete_bound.insert(key_type); } let storage_type = type_infos.typ.clone(); config_field.extend(match type_infos.kind { @@ -285,9 +282,7 @@ fn decl_store_extra_genesis( has_trait_field = true; } - for t in ext::get_non_bound_serde_derive_types(extra_type, &traitinstance).into_iter() { - serde_complete_bound.insert(t); - } + serde_complete_bound.insert(extra_type); let extrafield = &extra_field.content; genesis_extrafields.extend(quote!{ @@ -315,6 +310,7 @@ fn decl_store_extra_genesis( let serde_bug_bound = if !serde_complete_bound.is_empty() { let mut b_ser = String::new(); let mut b_dser = String::new(); + // panic!("{:#?}", serde_complete_bound); serde_complete_bound.into_iter().for_each(|bound| { let stype = quote!(#bound); b_ser.push_str(&format!("{} : {}::serde::Serialize, ", stype, scrate)); diff --git a/substrate/srml/support/procedural/tools/src/syn_ext.rs b/substrate/srml/support/procedural/tools/src/syn_ext.rs index 0ea403a652..74233b2d0b 100644 --- a/substrate/srml/support/procedural/tools/src/syn_ext.rs +++ b/substrate/srml/support/procedural/tools/src/syn_ext.rs @@ -327,57 +327,3 @@ pub fn has_parametric_type_def(typ: &syn::Type, ident: &Ident, default: bool) -> pub fn has_parametric_type(typ: &syn::Type, ident: &Ident) -> bool { has_parametric_type_def(typ, ident, true) } - -/// Get case where serde does not include bound with serde_derive macros: -/// see https://github.com/serde-rs/serde/issues/1454 -pub fn get_non_bound_serde_derive_types(typ: &syn::Type, t: &syn::Ident) -> Vec { - let mut result = Vec::new(); - get_non_bound_serde_derive_types_inner(typ, t, &mut result); - result -} - -fn get_non_bound_serde_derive_types_inner(typ: &syn::Type, t: &syn::Ident, result: &mut Vec) { - match *typ { - syn::Type::Path(ref path) => { - if heuristic_is_associated_path(&path.path,t) { - result.push(typ.clone()); - } - for p in path.path.segments.iter() { - if let syn::PathArguments::AngleBracketed(ref args) = p.arguments { - for a in args.args.iter() { - if let syn::GenericArgument::Type(ref ty) = a { - get_non_bound_serde_derive_types_inner(ty, t, result) - } - } - } - } - }, - syn::Type::Slice(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::Array(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::Ptr(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::Reference(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::BareFn(..) => (), - syn::Type::Never(..) => (), - syn::Type::Tuple(ref inner) => for e in inner.elems.iter() { - get_non_bound_serde_derive_types_inner(e, t, result) - }, - syn::Type::TraitObject(..) => (), - syn::Type::ImplTrait(..) => (), - syn::Type::Paren(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::Group(ref inner) => get_non_bound_serde_derive_types_inner(&inner.elem, t, result), - syn::Type::Infer(..) => (), - syn::Type::Macro(..) => (), - syn::Type::Verbatim(..) => (), - } - -} - -fn heuristic_is_associated_path(path: &syn::Path,t: &syn::Ident) -> bool { - - if let Some(syn::punctuated::Pair::Punctuated(s,_)) = path.segments.first() { - &s.ident == t - } else { - false - } - -} diff --git a/substrate/srml/support/src/traits.rs b/substrate/srml/support/src/traits.rs index 416ed4e959..873f61e961 100644 --- a/substrate/srml/support/src/traits.rs +++ b/substrate/srml/support/src/traits.rs @@ -79,10 +79,14 @@ pub enum UpdateBalanceOutcome { AccountKilled, } +pub trait ArithmeticType { + type Type: SimpleArithmetic + As + As + Codec + Copy + MaybeSerializeDebug + Default; +} + /// Abstraction over a fungible assets system. pub trait Currency { /// The balance of an account. - type Balance: SimpleArithmetic + As + As + Codec + Copy + MaybeSerializeDebug + Default; + type Balance; // PUBLIC IMMUTABLES diff --git a/substrate/srml/treasury/src/lib.rs b/substrate/srml/treasury/src/lib.rs index ad861ac7ec..4a8913bc4d 100644 --- a/substrate/srml/treasury/src/lib.rs +++ b/substrate/srml/treasury/src/lib.rs @@ -22,12 +22,12 @@ use serde_derive::{Serialize, Deserialize}; use rstd::prelude::*; use srml_support::{StorageValue, StorageMap, decl_module, decl_storage, decl_event, ensure}; -use srml_support::traits::{Currency, OnDilution}; +use srml_support::traits::{Currency, OnDilution, ArithmeticType}; use runtime_primitives::{Permill, traits::{Zero, EnsureOrigin, StaticLookup}}; use parity_codec_derive::{Encode, Decode}; use system::ensure_signed; -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as ArithmeticType>::Type; /// Our module's configuration trait. All our types and consts go in here. If the /// module is dependent on specific other modules, then their configuration traits @@ -36,7 +36,7 @@ type BalanceOf = <::Currency as Currency<::Ac /// `system::Trait` should always be included in our implied traits. pub trait Trait: system::Trait { /// The staking balance. - type Currency: Currency; + type Currency: ArithmeticType + Currency>; /// Origin from which approvals must come. type ApproveOrigin: EnsureOrigin; @@ -172,7 +172,7 @@ decl_storage! { decl_event!( pub enum Event where - Balance = <::Currency as Currency<::AccountId>>::Balance, + Balance = BalanceOf, ::AccountId { /// New proposal.