1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#![cfg_attr(not(feature = "std"), no_std)] use frame_support::Parameter; use orml_traits::{DataProvider, PriceProvider}; use orml_utilities::FixedU128; use sp_runtime::traits::{CheckedDiv, MaybeSerializeDeserialize, Member}; use sp_std::marker::PhantomData; pub type Price = FixedU128; mod tests; pub struct DefaultPriceProvider<CurrencyId, Source>(PhantomData<(CurrencyId, Source)>); impl<CurrencyId, Source> PriceProvider<CurrencyId, Price> for DefaultPriceProvider<CurrencyId, Source> where CurrencyId: Parameter + Member + Copy + MaybeSerializeDeserialize, Source: DataProvider<CurrencyId, Price>, { fn get_price(base_currency_id: CurrencyId, quote_currency_id: CurrencyId) -> Option<Price> { let base_price = Source::get(&base_currency_id)?; let quote_price = Source::get("e_currency_id)?; base_price.checked_div("e_price) } }