Skip to content

Commit

Permalink
Asset Hubs: auto incremented asset id for trust backed assets (polkad…
Browse files Browse the repository at this point in the history
…ot-fellows#414)

Setup auto incremented asset id to `50_000_000` for trust backed assets.

---------

Co-authored-by: joe petrowski <[email protected]>
  • Loading branch information
muharem and joepetrowski authored Aug 13, 2024
1 parent 9cfa42c commit c125f5c
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 50 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Polkadot chains: allow arbitrary XCM execution ([polkadot-fellows/runtimes#345](https:/polkadot-fellows/runtimes/pull/345)).
- Bounties: Remove payout delay ([polkadot-fellows/runtimes#386](https:/polkadot-fellows/runtimes/pull/386)).
- Polkadot System Chains: Reduce the base transaction fee by half ([polkadot-fellows/runtimes#398](https:/polkadot-fellows/runtimes/pull/398)).
- Asset Hubs: setup auto incremented asset id to 50_000_000 for trust backed assets ([polkadot-fellows/runtimes#414](https:/polkadot-fellows/runtimes/pull/414)).

#### From [#322](https:/polkadot-fellows/runtimes/pull/322):

Expand Down
34 changes: 9 additions & 25 deletions system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ use frame_support::{
ord_parameter_types, parameter_types,
traits::{
fungible, fungibles, tokens::imbalance::ResolveAssetTo, AsEnsureOriginWithArg, ConstBool,
ConstU128, ConstU32, ConstU64, ConstU8, EitherOfDiverse, EnsureOrigin, EnsureOriginWithArg,
Equals, InstanceFilter, TransformOrigin, WithdrawReasons,
ConstU128, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Equals, InstanceFilter,
TransformOrigin, WithdrawReasons,
},
weights::{ConstantMultiplier, Weight, WeightToFee as _},
BoundedVec, PalletId,
Expand Down Expand Up @@ -297,27 +297,6 @@ parameter_types! {
/// We allow root to execute privileged asset operations.
pub type AssetsForceOrigin = EnsureRoot<AccountId>;

/// Ensure that the proposed asset id is less than `50_000_000` and origin is signed.
pub struct EnsureLessThanAutoIncrement;
impl EnsureOriginWithArg<RuntimeOrigin, AssetIdForTrustBackedAssets>
for EnsureLessThanAutoIncrement
{
type Success = AccountId;
fn try_origin(
o: RuntimeOrigin,
a: &AssetIdForTrustBackedAssets,
) -> Result<Self::Success, RuntimeOrigin> {
if *a >= 50_000_000 {
return Err(o);
}
<EnsureSigned<AccountId> as EnsureOrigin<RuntimeOrigin>>::try_origin(o)
}
#[cfg(feature = "runtime-benchmarks")]
fn try_successful_origin(_a: &AssetIdForTrustBackedAssets) -> Result<RuntimeOrigin, ()> {
<EnsureSigned<AccountId> as EnsureOrigin<RuntimeOrigin>>::try_successful_origin()
}
}

// Called "Trust Backed" assets because these are generally registered by some account, and users of
// the asset assume it has some claimed backing. The pallet is called `Assets` in
// `construct_runtime` to avoid breaking changes on storage reads.
Expand All @@ -329,7 +308,7 @@ impl pallet_assets::Config<TrustBackedAssetsInstance> for Runtime {
type AssetId = AssetIdForTrustBackedAssets;
type AssetIdParameter = codec::Compact<AssetIdForTrustBackedAssets>;
type Currency = Balances;
type CreateOrigin = EnsureLessThanAutoIncrement;
type CreateOrigin = AsEnsureOriginWithArg<EnsureSigned<AccountId>>;
type ForceOrigin = AssetsForceOrigin;
type AssetDeposit = AssetDeposit;
type MetadataDepositBase = MetadataDepositBase;
Expand All @@ -339,7 +318,7 @@ impl pallet_assets::Config<TrustBackedAssetsInstance> for Runtime {
type Freezer = ();
type Extra = ();
type WeightInfo = weights::pallet_assets_local::WeightInfo<Runtime>;
type CallbackHandle = ();
type CallbackHandle = pallet_assets::AutoIncAssetId<Runtime, TrustBackedAssetsInstance>;
type AssetAccountDeposit = AssetAccountDeposit;
type RemoveItemsLimit = frame_support::traits::ConstU32<1000>;
#[cfg(feature = "runtime-benchmarks")]
Expand Down Expand Up @@ -1079,6 +1058,11 @@ pub type Migrations = (
frame_support::migrations::RemovePallet<DmpQueueName, RocksDbWeight>,
pallet_collator_selection::migration::v2::MigrationToV2<Runtime>,
cumulus_pallet_xcmp_queue::migration::v5::MigrateV4ToV5<Runtime>,
pallet_assets::migration::next_asset_id::SetNextAssetId<
ConstU32<50_000_000>,
Runtime,
TrustBackedAssetsInstance,
>,
// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,
);
Expand Down
34 changes: 9 additions & 25 deletions system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ use frame_support::{
parameter_types,
traits::{
fungible, fungibles, tokens::imbalance::ResolveAssetTo, AsEnsureOriginWithArg, ConstBool,
ConstU32, ConstU64, ConstU8, EitherOfDiverse, EnsureOrigin, EnsureOriginWithArg, Equals,
InstanceFilter, NeverEnsureOrigin, TransformOrigin, WithdrawReasons,
ConstU32, ConstU64, ConstU8, EitherOfDiverse, Equals, InstanceFilter, NeverEnsureOrigin,
TransformOrigin, WithdrawReasons,
},
weights::{ConstantMultiplier, Weight, WeightToFee as _},
PalletId,
Expand Down Expand Up @@ -315,27 +315,6 @@ parameter_types! {
/// We allow root to execute privileged asset operations.
pub type AssetsForceOrigin = EnsureRoot<AccountId>;

/// Ensure that the proposed asset id is less than `50_000_000` and origin is signed.
pub struct EnsureLessThanAutoIncrement;
impl EnsureOriginWithArg<RuntimeOrigin, AssetIdForTrustBackedAssets>
for EnsureLessThanAutoIncrement
{
type Success = AccountId;
fn try_origin(
o: RuntimeOrigin,
a: &AssetIdForTrustBackedAssets,
) -> Result<Self::Success, RuntimeOrigin> {
if *a >= 50_000_000 {
return Err(o);
}
<EnsureSigned<AccountId> as EnsureOrigin<RuntimeOrigin>>::try_origin(o)
}
#[cfg(feature = "runtime-benchmarks")]
fn try_successful_origin(_a: &AssetIdForTrustBackedAssets) -> Result<RuntimeOrigin, ()> {
<EnsureSigned<AccountId> as EnsureOrigin<RuntimeOrigin>>::try_successful_origin()
}
}

// Called "Trust Backed" assets because these are generally registered by some account, and users of
// the asset assume it has some claimed backing. The pallet is called `Assets` in
// `construct_runtime` to avoid breaking changes on storage reads.
Expand All @@ -347,7 +326,7 @@ impl pallet_assets::Config<TrustBackedAssetsInstance> for Runtime {
type AssetId = AssetIdForTrustBackedAssets;
type AssetIdParameter = codec::Compact<AssetIdForTrustBackedAssets>;
type Currency = Balances;
type CreateOrigin = EnsureLessThanAutoIncrement;
type CreateOrigin = AsEnsureOriginWithArg<EnsureSigned<AccountId>>;
type ForceOrigin = AssetsForceOrigin;
type AssetDeposit = AssetDeposit;
type MetadataDepositBase = MetadataDepositBase;
Expand All @@ -357,7 +336,7 @@ impl pallet_assets::Config<TrustBackedAssetsInstance> for Runtime {
type Freezer = ();
type Extra = ();
type WeightInfo = weights::pallet_assets_local::WeightInfo<Runtime>;
type CallbackHandle = ();
type CallbackHandle = pallet_assets::AutoIncAssetId<Runtime, TrustBackedAssetsInstance>;
type AssetAccountDeposit = AssetAccountDeposit;
type RemoveItemsLimit = frame_support::traits::ConstU32<1000>;
#[cfg(feature = "runtime-benchmarks")]
Expand Down Expand Up @@ -1061,6 +1040,11 @@ pub type Migrations = (
cumulus_pallet_xcmp_queue::migration::v4::MigrationToV4<Runtime>,
pallet_collator_selection::migration::v2::MigrationToV2<Runtime>,
cumulus_pallet_xcmp_queue::migration::v5::MigrateV4ToV5<Runtime>,
pallet_assets::migration::next_asset_id::SetNextAssetId<
ConstU32<50_000_000>,
Runtime,
TrustBackedAssetsInstance,
>,
// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,
);
Expand Down

0 comments on commit c125f5c

Please sign in to comment.