fix AssetFeeAsExistentialDepositMultiplier

This commit is contained in:
joepetrowski
2022-11-30 21:48:20 +01:00
parent e8afde4bfa
commit e569b68889
6 changed files with 35 additions and 17 deletions
+14 -13
View File
@@ -76,34 +76,35 @@ impl ShouldExecute for DenyReserveTransferToRelayChain {
/// A `ChargeFeeInFungibles` implementation that converts the output of
/// a given WeightToFee implementation an amount charged in
/// a particular assetId from pallet-assets
pub struct AssetFeeAsExistentialDepositMultiplier<Runtime, WeightToFee, BalanceConverter>(
PhantomData<(Runtime, WeightToFee, BalanceConverter)>,
);
impl<CurrencyBalance, Runtime, WeightToFee, BalanceConverter>
pub struct AssetFeeAsExistentialDepositMultiplier<
Runtime,
WeightToFee,
BalanceConverter,
AssetInstance: 'static,
>(PhantomData<(Runtime, WeightToFee, BalanceConverter, AssetInstance)>);
impl<CurrencyBalance, Runtime, WeightToFee, BalanceConverter, AssetInstance>
cumulus_primitives_utility::ChargeWeightInFungibles<
AccountIdOf<Runtime>,
pallet_assets::Pallet<Runtime, pallet_assets::Instance1>,
> for AssetFeeAsExistentialDepositMultiplier<Runtime, WeightToFee, BalanceConverter>
pallet_assets::Pallet<Runtime, AssetInstance>,
> for AssetFeeAsExistentialDepositMultiplier<Runtime, WeightToFee, BalanceConverter, AssetInstance>
where
Runtime: pallet_assets::Config<pallet_assets::Instance1>,
Runtime: pallet_assets::Config<AssetInstance>,
WeightToFee: WeightToFeePolynomial<Balance = CurrencyBalance>,
BalanceConverter: BalanceConversion<
CurrencyBalance,
<Runtime as pallet_assets::Config<pallet_assets::Instance1>>::AssetId,
<Runtime as pallet_assets::Config<pallet_assets::Instance1>>::Balance,
<Runtime as pallet_assets::Config<AssetInstance>>::AssetId,
<Runtime as pallet_assets::Config<AssetInstance>>::Balance,
>,
AccountIdOf<Runtime>:
From<polkadot_primitives::v2::AccountId> + Into<polkadot_primitives::v2::AccountId>,
{
fn charge_weight_in_fungibles(
asset_id: <pallet_assets::Pallet<Runtime, pallet_assets::Instance1> as Inspect<
asset_id: <pallet_assets::Pallet<Runtime, AssetInstance> as Inspect<
AccountIdOf<Runtime>,
>>::AssetId,
weight: Weight,
) -> Result<
<pallet_assets::Pallet<Runtime, pallet_assets::Instance1> as Inspect<
AccountIdOf<Runtime>,
>>::Balance,
<pallet_assets::Pallet<Runtime, AssetInstance> as Inspect<AccountIdOf<Runtime>>>::Balance,
XcmError,
> {
let amount = WeightToFee::weight_to_fee(&weight);
@@ -189,6 +189,7 @@ impl xcm_executor::Config for XcmConfig {
ConvertInto,
TrustBackedAssetsInstance,
>,
TrustBackedAssetsInstance,
>,
ConvertedConcreteId<
AssetId,
@@ -249,6 +249,19 @@ impl pallet_assets::Config<TrustBackedAssetsInstance> for Runtime {
type Helper = ();
}
// This is frustrating...
// use pallet_assets::BenchmarkHelper;
// pub struct XcmBenchmarkHelper;
// #[cfg(feature = "runtime-benchmarks")]
// impl<AssetId: From<MultiLocationForAssetId>> BenchmarkHelper<AssetId> for XcmBenchmarkHelper {
// fn create_asset_id(id: u32) -> AssetId {
// match id {
// x => MultiLocationForAssetId { parents: 1, interior: X1(Parachain(x)) },
// _ => MultiLocationForAssetId { parents: 0, interior: Here },
// }
// }
// }
/// Assets managed by some foreign location.
type ForeignAssetsInstance = pallet_assets::Instance2;
impl pallet_assets::Config<ForeignAssetsInstance> for Runtime {
@@ -189,6 +189,7 @@ impl xcm_executor::Config for XcmConfig {
ConvertInto,
TrustBackedAssetsInstance,
>,
TrustBackedAssetsInstance,
>,
ConvertedConcreteId<
AssetId,
@@ -35,7 +35,7 @@ use frame_support::{
construct_runtime,
dispatch::DispatchClass,
parameter_types,
traits::Everything,
traits::{AsEnsureOriginWithArg, Everything},
weights::{
constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient,
WeightToFeeCoefficients, WeightToFeePolynomial,
@@ -44,7 +44,7 @@ use frame_support::{
};
use frame_system::{
limits::{BlockLength, BlockWeights},
EnsureRoot,
EnsureRoot, EnsureSigned,
};
use smallvec::smallvec;
use sp_api::impl_runtime_apis;
@@ -398,6 +398,7 @@ impl pallet_assets::Config for Runtime {
type Balance = Balance;
type AssetId = AssetId;
type Currency = Balances;
type CreateOrigin = AsEnsureOriginWithArg<EnsureSigned<AccountId>>;
type ForceOrigin = EnsureRoot<AccountId>;
type AssetDeposit = AssetDeposit;
type MetadataDepositBase = MetadataDepositBase;
@@ -42,7 +42,7 @@ pub use frame_support::{
construct_runtime,
dispatch::DispatchClass,
match_types, parameter_types,
traits::{EitherOfDiverse, Everything, IsInVec, Randomness},
traits::{AsEnsureOriginWithArg, EitherOfDiverse, Everything, IsInVec, Randomness},
weights::{
constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},
ConstantMultiplier, IdentityFee, Weight,
@@ -51,7 +51,7 @@ pub use frame_support::{
};
use frame_system::{
limits::{BlockLength, BlockWeights},
EnsureRoot,
EnsureRoot, EnsureSigned,
};
pub use pallet_balances::Call as BalancesCall;
pub use pallet_timestamp::Call as TimestampCall;
@@ -513,6 +513,7 @@ impl pallet_assets::Config for Runtime {
type Balance = u64;
type AssetId = AssetId;
type Currency = Balances;
type CreateOrigin = AsEnsureOriginWithArg<EnsureSigned<AccountId>>;
type ForceOrigin = AdminOrigin;
type AssetDeposit = AssetDeposit;
type MetadataDepositBase = MetadataDepositBase;