Files
pezkuwi-subxt/cumulus/parachains/runtimes/assets
Francisco Aguirre 8428f678fe XCMv4 (#1230)
# Note for reviewer

Most changes are just syntax changes necessary for the new version.
Most important files should be the ones under the `xcm` folder.

# Description 

Added XCMv4.

## Removed `Multi` prefix
The following types have been renamed:
- MultiLocation -> Location
- MultiAsset -> Asset
- MultiAssets -> Assets
- InteriorMultiLocation -> InteriorLocation
- MultiAssetFilter -> AssetFilter
- VersionedMultiAsset -> VersionedAsset
- WildMultiAsset -> WildAsset
- VersionedMultiLocation -> VersionedLocation

In order to fix a name conflict, the `Assets` in `xcm-executor` were
renamed to `HoldingAssets`, as they represent assets in holding.

## Removed `Abstract` asset id

It was not being used anywhere and this simplifies the code.

Now assets are just constructed as follows:

```rust
let asset: Asset = (AssetId(Location::new(1, Here)), 100u128).into();
```

No need for specifying `Concrete` anymore.

## Outcome is now a named fields struct

Instead of

```rust
pub enum Outcome {
  Complete(Weight),
  Incomplete(Weight, Error),
  Error(Error),
}
```

we now have

```rust
pub enum Outcome {
  Complete { used: Weight },
  Incomplete { used: Weight, error: Error },
  Error { error: Error },
}
```

## Added Reanchorable trait

Now both locations and assets implement this trait, making it easier to
reanchor both.

## New syntax for building locations and junctions

Now junctions are built using the following methods:

```rust
let location = Location {
    parents: 1,
    interior: [Parachain(1000), PalletInstance(50), GeneralIndex(1984)].into()
};
```

or

```rust
let location = Location::new(1, [Parachain(1000), PalletInstance(50), GeneralIndex(1984)]);
```

And they are matched like so:

```rust
match location.unpack() {
  (1, [Parachain(id)]) => ...
  (0, Here) => ...,
  (1, [_]) => ...,
}
```

This syntax is mandatory in v4, and has been also implemented for v2 and
v3 for easier migration.

This was needed to make all sizes smaller.

# TODO
- [x] Scaffold v4
- [x] Port github.com/paritytech/polkadot/pull/7236
- [x] Remove `Multi` prefix
- [x] Remove `Abstract` asset id

---------

Co-authored-by: command-bot <>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
2024-01-16 18:18:04 +00:00
..
2024-01-16 18:18:04 +00:00
2024-01-16 18:18:04 +00:00
2024-01-16 18:18:04 +00:00
2024-01-16 18:18:04 +00:00
2023-11-07 13:11:06 +01:00

Assets Parachain

Implementation of Asset Hub, a blockchain to support generic assets in the Polkadot and Kusama networks. Asset Hub was formerly known as "Statemint".

Asset Hub allows users to:

  • Deploy promise-backed assets, both fungible and non-fungible, with a DOT/KSM deposit.
  • Set admin roles to manage assets and asset classes.
  • Register assets as "self-sufficient" if the Relay Chain agrees, i.e. gain the ability for an asset to justify the existence of accounts sans DOT/KSM.
  • Pay transaction fees using sufficient assets.
  • Transfer (and approve transfer) assets.
  • Interact with the chain via its transactional API or XCM.

Asset Hub must stay fully aligned with the Relay Chain it is connected to. As such, it will accept the Relay Chain's governance origins as its own.

See the article on Asset Hub as common good parachain for a higher level description.

Wallets, custodians, etc. should see the Polkadot Wiki's Integration Guide for details about support.