Skip to content
  1. Dec 07, 2023
  2. Dec 06, 2023
    • Svyatoslav Nikolsky's avatar
      Added AllSiblingSystemParachains matcher to be used at a parachain level (#2422) · 0b3d0677
      Svyatoslav Nikolsky authored
      
      
      As suggested in this thread:
      https://github.com/polkadot-fellows/runtimes/pull/87#discussion_r1400237122
      
      We already have the `IsChildSystemParachain`, which may be used at relay
      chain, but it can't be used at a parachain level. So let's use
      `AllSiblingSystemParachains` for that. I was thinking about
      `AllSystemParachains`, but it may cause wrong impression that it can be
      used at a relay chain level.
      
      ---------
      
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      0b3d0677
    • Adrian Catangiu's avatar
      pallet-xcm: add new flexible `transfer_assets()` call/extrinsic (#2388) · e7651cf4
      Adrian Catangiu authored
      # Motivation (+testing)
      
      ### Enable easy `ForeignAssets` transfers using `pallet-xcm` 
      
      We had just previously added capabilities to teleport fees during
      reserve-based transfers, but what about reserve-transferring fees when
      needing to teleport some non-fee asset?
      
      This PR aligns everything under either explicit reserve-transfer,
      explicit teleport, or this new flexible `transfer_assets()` which can
      mix and match as needed with fewer artificial constraints imposed to the
      user.
      
      This will enable, for example, a (non-system) parachain to teleport
      their `ForeignAssets` assets to AssetHub while using DOT to pay fees.
      (the assets are teleported - as foreign assets should from their owner
      chain - while DOT used for fees can only be reserve-based transferred
      between said parachain and AssetHub).
      
      Added `xcm-emulator` tests for this scenario ^.
      
      # Description
      
      Reverts `(limited_)reserve_transfer_assets` to only allow reserve-based
      transfers for all `assets` including fees.
      
      Similarly `(limited_)teleport_assets` only allows teleports for all
      `assets` including fees.
          
      For complex combinations of asset transfers where assets and fees may
      have different reserves or different reserve/teleport trust
      configurations, users can use the newly added `transfer_assets()`
      extrinsic which is more flexible in allowing more complex scenarios.
      
      `assets` (excluding `fees`) must have same reserve location or otherwise
      be teleportable to `dest`.
      No limitations imposed on `fees`.
      
      - for local reserve: transfer assets to sovereign account of destination
      chain and forward a notification XCM to `dest` to mint and deposit
      reserve-based assets to `beneficiary`.
      - for destination reserve: burn local assets and forward a notification
      to `dest` chain to withdraw the reserve assets from this chain's
      sovereign account and deposit them to `beneficiary`.
      - for remote reserve: burn local assets, forward XCM to reserve chain to
      move reserves from this chain's SA to `dest` chain's SA, and forward
      another XCM to `dest` to mint and deposit reserve-based assets to
      `beneficiary`.
      - for teleports: burn local assets and forward XCM to `dest` chain to
      mint/teleport assets and deposit them to `beneficiary`.
      
      ## Review notes
      
      Only around 500 lines are prod code (see `pallet_xcm/src/lib.rs`), the
      rest of the PR is new tests and improving existing tests.
      
      ---------
      
      Co-authored-by: command-bot <>
      e7651cf4
  3. Dec 05, 2023
  4. Dec 01, 2023
  5. Nov 30, 2023
    • dependabot[bot]'s avatar
      Bump the known_good_semver group with 2 updates (#2570) · 6742aba0
      dependabot[bot] authored
      
      
      Bumps the known_good_semver group with 2 updates:
      [serde](https://github.com/serde-rs/serde) and
      [clap](https://github.com/clap-rs/clap).
      
      Updates `serde` from 1.0.188 to 1.0.193
      <details>
      <summary>Release notes</summary>
      <p><em>Sourced from <a
      href="https://github.com/serde-rs/serde/releases">serde's
      releases</a>.</em></p>
      <blockquote>
      <h2>v1.0.193</h2>
      <ul>
      <li>Fix field names used for the deserialization of
      <code>RangeFrom</code> and <code>RangeTo</code> (<a
      href="https://redirect.github.com/serde-rs/serde/issues/2653">#2653</a>,
      <a
      href="https://redirect.github.com/serde-rs/serde/issues/2654">#2654</a>,
      <a
      href="https://redirect.github.com/serde-rs/serde/issues/2655">#2655</a>,
      thanks <a
      href="https://github.com/emilbonnek"><code>@​emilbonnek</code></a>)</li>
      </ul>
      <h2>v1.0.192</h2>
      <ul>
      <li>Allow internal tag field in untagged variant (<a
      href="https://redirect.github.com/serde-rs/serde/issues/2646">#2646</a>,
      thanks <a
      href="https://github.com/robsdedude"><code>@​robsdedude</code></a>)</li>
      </ul>
      <h2>v1.0.191</h2>
      <ul>
      <li>Documentation improvements</li>
      </ul>
      <h2>v1.0.190</h2>
      <ul>
      <li>Preserve NaN sign when deserializing f32 from f64 or vice versa (<a
      href="https://redirect.github.com/serde-rs/serde/issues/2637">#2637</a>)</li>
      </ul>
      <h2>v1.0.189</h2>
      <ul>
      <li>Fix &quot;cannot infer type&quot; error when internally tagged enum
      contains untagged variant (<a
      href="https://redirect.github.com/serde-rs/serde/issues/2613">#2613</a>,
      thanks <a href="https://github.com/ahl"><code>@​ahl</code></a>)</li>
      </ul>
      </blockquote>
      </details>
      <details>
      <summary>Commits</summary>
      <ul>
      <li><a
      href="https://github.com/serde-rs/serde/commit/44613c7d0190dbb5ecd2d5ec19c636f45b7488cc"><code>44613c7</code></a>
      Release 1.0.193</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/c706281df3c8d50dba1763f19c856df2746eba6c"><code>c706281</code></a>
      Merge pull request <a
      href="https://redirect.github.com/serde-rs/serde/issues/2655">#2655</a>
      from dtolnay/rangestartend</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/65d75b8fe3105f00ab2e01537d568d4587167582"><code>65d75b8</code></a>
      Add RangeFrom and RangeTo tests</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/332b0cba40bcbcc7a6b23a9706277c54791a9856"><code>332b0cb</code></a>
      Merge pull request <a
      href="https://redirect.github.com/serde-rs/serde/issues/2654">#2654</a>
      from dtolnay/rangestartend</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/8c4af412969086bc8f54fdc2a079d373632e0a03"><code>8c4af41</code></a>
      Fix more RangeFrom / RangeEnd mixups</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/24a78f071b22ae491eec4127be696ac255b9b5d3"><code>24a78f0</code></a>
      Merge pull request <a
      href="https://redirect.github.com/serde-rs/serde/issues/2653">#2653</a>
      from emilbonnek/fix/range-to-from-de-mixup</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/c91c33436d7aaef7472ebc18b734ddc9b5bd11fa"><code>c91c334</code></a>
      Fix Range{From,To} deserialize mixup</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/2083f43a287cac8302009fda5bbe41518dd83209"><code>2083f43</code></a>
      Update ui test suite to nightly-2023-11-19</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/4676abdc9e6bbbddfb33a00ce8d7e81e92f01120"><code>4676abd</code></a>
      Release 1.0.192</li>
      <li><a
      href="https://github.com/serde-rs/serde/commit/35700eb23e21d8cb198ef4a422ddad13b855ce3b"><code>35700eb</code></a>
      Merge pull request <a
      href="https://redirect.github.com/serde-rs/serde/issues/2646">#2646</a>
      from robsdedude/fix/2643/allow-tag-field-in-untagged</li>
      <li>Additional commits viewable in <a
      href="https://github.com/serde-rs/serde/compare/v1.0.188...v1.0.193">compare
      view</a></li>
      </ul>
      </details>
      <br />
      
      Updates `clap` from 4.4.6 to 4.4.10
      <details>
      <summary>Release notes</summary>
      <p><em>Sourced from <a
      href="https://github.com/clap-rs/clap/releases">clap's
      releases</a>.</em></p>
      <blockquote>
      <h2>v4.4.10</h2>
      <h2>[4.4.10] - 2023-11-28</h2>
      <h3>Documentation</h3>
      <ul>
      <li>Link out to changelog</li>
      <li>Cross link derive's attribute reference to derive tutorial</li>
      </ul>
      <h2>v4.4.9</h2>
      <h2>[4.4.9] - 2023-11-27</h2>
      <h3>Fixes</h3>
      <ul>
      <li><em>(help)</em> Show correct <code>Command::about</code> under
      flattened headings</li>
      <li><em>(help)</em> Respect <code>hide</code> when flattening
      subcommands</li>
      </ul>
      <h2>v4.4.8</h2>
      <h2>[4.4.8] - 2023-11-10</h2>
      <h3>Features</h3>
      <ul>
      <li>Add <code>Command::flatten_help</code> to allow <code>git stash
      -h</code> like help for subcommands</li>
      </ul>
      </blockquote>
      </details>
      <details>
      <summary>Changelog</summary>
      <p><em>Sourced from <a
      href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
      changelog</a>.</em></p>
      <blockquote>
      <h2>[4.4.10] - 2023-11-28</h2>
      <h3>Documentation</h3>
      <ul>
      <li>Link out to changelog</li>
      <li>Cross link derive's attribute reference to derive tutorial</li>
      </ul>
      <h2>[4.4.9] - 2023-11-27</h2>
      <h3>Fixes</h3>
      <ul>
      <li><em>(help)</em> Show correct <code>Command::about</code> under
      flattened headings</li>
      <li><em>(help)</em> Respect <code>hide</code> when flattening
      subcommands</li>
      </ul>
      <h2>[4.4.8] - 2023-11-10</h2>
      <h3>Features</h3>
      <ul>
      <li>Add <code>Command::flatten_help</code> to allow <code>git stash
      -h</code> like help for subcommands</li>
      </ul>
      <h2>[4.4.7] - 2023-10-24</h2>
      <h3>Performance</h3>
      <ul>
      <li>Reduced code size</li>
      </ul>
      </blockquote>
      </details>
      <details>
      <summary>Commits</summary>
      <ul>
      <li><a
      href="https://github.com/clap-rs/clap/commit/c0a1814d3c1d93c18faaedc95fd251846e47f4fe"><code>c0a1814</code></a>
      chore: Release</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/c83e681e20b05f7e128088f47f8fcfc44e8ea166"><code>c83e681</code></a>
      docs: Update changelog</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/91bcac4ca9d442786f554abeb7b1ed6d7a464a42"><code>91bcac4</code></a>
      Merge pull request <a
      href="https://redirect.github.com/clap-rs/clap/issues/5230">#5230</a>
      from epage/migrate</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/030d87505d150345ddd425c1df21c034d2ae7748"><code>030d875</code></a>
      docs: Link out to the changelog at the relevant tag</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/b661a9de04aebd1adaaafdbf7e470f07a8d8a36d"><code>b661a9d</code></a>
      Merge pull request <a
      href="https://redirect.github.com/clap-rs/clap/issues/5229">#5229</a>
      from epage/derive</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/a08587b00e347492165ded1415bad6ab339e9f0b"><code>a08587b</code></a>
      docs(derive): Link to tutorial sections for attributes</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/21b671f689bc0b8d790dc8c42902c22822bf6f82"><code>21b671f</code></a>
      chore: Release</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/93ba76dbaaf9136313a4fe2978693cc39fa467dd"><code>93ba76d</code></a>
      docs: Update changelog</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/c1c55b30d853446e2cab78664c0d22c1b77d4dfd"><code>c1c55b3</code></a>
      Merge pull request <a
      href="https://redirect.github.com/clap-rs/clap/issues/5228">#5228</a>
      from epage/flat</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/b13f6d98622b80ba30e63c2c6e65d218cc8a4de3"><code>b13f6d9</code></a>
      fix(help): Hide 'help' if only flattened subcommand</li>
      <li>Additional commits viewable in <a
      href="https://github.com/clap-rs/clap/compare/v4.4.6...v4.4.10">compare
      view</a></li>
      </ul>
      </details>
      <br />
      
      
      Dependabot will resolve any conflicts with this PR as long as you don't
      alter it yourself. You can also trigger a rebase manually by commenting
      `@dependabot rebase`.
      
      [//]: # (dependabot-automerge-start)
      [//]: # (dependabot-automerge-end)
      
      ---
      
      <details>
      <summary>Dependabot commands and options</summary>
      <br />
      
      You can trigger Dependabot actions by commenting on this PR:
      - `@dependabot rebase` will rebase this PR
      - `@dependabot recreate` will recreate this PR, overwriting any edits
      that have been made to it
      - `@dependabot merge` will merge this PR after your CI passes on it
      - `@dependabot squash and merge` will squash and merge this PR after
      your CI passes on it
      - `@dependabot cancel merge` will cancel a previously requested merge
      and block automerging
      - `@dependabot reopen` will reopen this PR if it is closed
      - `@dependabot close` will close this PR and stop Dependabot recreating
      it. You can achieve the same result by closing it manually
      - `@dependabot show <dependency name> ignore conditions` will show all
      of the ignore conditions of the specified dependency
      - `@dependabot ignore <dependency name> major version` will close this
      group update PR and stop Dependabot creating any more for the specific
      dependency's major version (unless you unignore this specific
      dependency's major version or upgrade to it yourself)
      - `@dependabot ignore <dependency name> minor version` will close this
      group update PR and stop Dependabot creating any more for the specific
      dependency's minor version (unless you unignore this specific
      dependency's minor version or upgrade to it yourself)
      - `@dependabot ignore <dependency name>` will close this group update PR
      and stop Dependabot creating any more for the specific dependency
      (unless you unignore this specific dependency or upgrade to it yourself)
      - `@dependabot unignore <dependency name>` will remove all of the ignore
      conditions of the specified dependency
      - `@dependabot unignore <dependency name> <ignore condition>` will
      remove the ignore condition of the specified dependency and ignore
      conditions
      
      
      </details>
      
      Signed-off-by: default avatardependabot[bot] <[email protected]>
      Co-authored-by: default avatardependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
      6742aba0
    • joe petrowski's avatar
      Withdraw Assets Before Checking Out in `OnReapIdentity` impl (#2552) · 64361ac1
      joe petrowski authored
      
      
      Follow up to fix a bug from #1814 discovered in XCM emulator testing.
      
      I mistakenly thought that checking out an asset would withdraw it from
      the sender. This actually withdraws the asset before checking out.
      
      ---------
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      64361ac1
  6. Nov 29, 2023
  7. Nov 28, 2023
  8. Nov 27, 2023
    • Chevdor's avatar
      New runtime `spec_version` format + backport of the bump to 1.4.0 (#2468) · 4f8048b9
      Chevdor authored
      
      
      ## Overview
      
      This PR aligns the `spec_version` formatting to the [recent
      changes](https://github.com/polkadot-fellows/runtimes/pull/26/files#diff-efa4caeb17487ecb13d8f5eb7863c3241d84afa2e73fbf25909a2ca89df0f362R142)
      made for the Polkadot/Kusama runtimes.
      
      It also backports the latest version `v1.4.0` bumps as `1_004_000`.
      
      ## Details
      
      During the switch from `v0.9` to `v1.x`, the format of the
      `spec_version` was modified from: `(M)m_ppp` for a runtime considered on
      version `M.m.pp`. For instance `0.9.42` had a `spec_version` of `9420`.
      
      With the transition to `v1.x`, the format was changed to a bigger number
      (still `u32`) formatted as `MM_mm_ppp` where `1.2.3` would be stored as
      `01_02_003`.
      
      This PR aligns the format with that has been introduced in the
      fellowship repo: `MMM_mmm_ppp`.
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      4f8048b9
  9. Nov 16, 2023
  10. Nov 15, 2023
    • joe petrowski's avatar
      Identity Deposits Relay to Parachain Migration (#1814) · c79b234b
      joe petrowski authored
      The goal of this PR is to migrate Identity deposits from the Relay Chain
      to a system parachain.
      
      The problem I want to solve is that `IdentityOf` and `SubsOf` both store
      an amount that's held in reserve as a storage deposit. When migrating to
      a parachain, we can take a snapshot of the actual `IdentityInfo` and
      sub-account mappings, but should migrate (off chain) the `deposit`s to
      zero, since the chain (and by extension, accounts) won't have any funds
      at genesis.
      
      The good news is that we expect parachain deposits to be significantly
      lower (possibly 100x) on the parachain. That is, a deposit of 21 DOT on
      the Relay Chain would need 0.21 DOT on a parachain. This PR proposes to
      migrate the deposits in the following way:
      
      1. Introduces a new pallet with two extrinsics: 
      - `reap_identity`: Has a configurable `ReapOrigin`, which would be set
      to `EnsureSigned` on the Relay Chain (i.e. callable by anyone) and
      `EnsureRoot` on the parachain (we don't want identities reaped from
      there).
      - `poke_deposit`: Checks what deposit the pallet holds (at genesis,
      zero) and attempts to update the amount based on the calculated deposit
      for storage data.
      2. `reap_identity` clears all storage data for a `target` account and
      unreserves their deposit.
      3. A `ReapIdentityHandler` teleports the necessary DOT to the parachain
      and calls `poke_deposit`. Since the parachain deposit is much lower, and
      was just unreserved, we know we have enough.
      
      One awkwardness I ran into was that the XCMv3 instruction set does not
      provide a way for the system to teleport assets without a fee being
      deducted on reception. Users shouldn't have to pay a fee for the system
      to migrate their info to a more efficient location. So I wrote my own
      program and did the `InitiateTeleport` accounting on my own to send a
      program with `UnpaidExecution`. Have discussed an
      `InitiateUnpaidTeleport` instruction with @franciscoaguirre
      
       . Obviously
      any chain executing this would have to pass a `Barrier` for free
      execution.
      
      TODO:
      
      - [x] Confirm People Chain ParaId
      - [x] Confirm People Chain deposit rates (determined in
      https://github.com/paritytech/polkadot-sdk/pull/2281)
      - [x] Add pallet to Westend
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      c79b234b
  11. Nov 14, 2023
    • Alin Dima's avatar
      add NodeFeatures field to HostConfiguration and runtime API (#2177) · fc12f435
      Alin Dima authored
      Adds a `NodeFeatures` bitfield value to the runtime `HostConfiguration`,
      with the purpose of coordinating the enabling of node-side features,
      such as: https://github.com/paritytech/polkadot-sdk/issues/628 and
      https://github.com/paritytech/polkadot-sdk/issues/598.
      These are features that require all validators enable them at the same
      time, assuming all/most nodes have upgraded their node versions.
      
      This PR doesn't add any feature yet. These are coming in future PRs.
      
      Also adds a runtime API for querying the state of the client features
      and an extrinsic for setting/unsetting a feature by its index in the bitfield.
      
      Note: originally part of:
      https://github.com/paritytech/polkadot-sdk/pull/1644, but posted as
      standalone to be reused by other PRs until the initial PR is merged
      fc12f435
  12. Nov 13, 2023
    • Adrian Catangiu's avatar
      pallet-xcm: enhance `reserve_transfer_assets` to support remote reserves (#1672) · 18257373
      Adrian Catangiu authored
      
      
      ## Motivation
      
      `pallet-xcm` is the main user-facing interface for XCM functionality,
      including assets manipulation functions like `teleportAssets()` and
      `reserve_transfer_assets()` calls.
      
      While `teleportAsset()` works both ways, `reserve_transfer_assets()`
      works only for sending reserve-based assets to a remote destination and
      beneficiary when the reserve is the _local chain_.
      
      ## Solution
      
      This PR enhances `pallet_xcm::(limited_)reserve_withdraw_assets` to
      support transfers when reserves are other chains.
      This will allow complete, **bi-directional** reserve-based asset
      transfers user stories using `pallet-xcm`.
      
      Enables following scenarios:
      - transferring assets with local reserve (was previously supported iff
      asset used as fee also had local reserve - now it works in all cases),
      - transferring assets with reserve on destination,
      - transferring assets with reserve on remote/third-party chain (iff
      assets and fees have same remote reserve),
      - transferring assets with reserve different than the reserve of the
      asset to be used as fees - meaning can be used to transfer random asset
      with local/dest reserve while using DOT for fees on all involved chains,
      even if DOT local/dest reserve doesn't match asset reserve,
      - transferring assets with any type of local/dest reserve while using
      fees which can be teleported between involved chains.
      
      All of the above is done by pallet inner logic without the user having
      to specify which scenario/reserves/teleports/etc. The correct scenario
      and corresponding XCM programs are identified, and respectively, built
      automatically based on runtime configuration of trusted teleporters and
      trusted reserves.
      
      #### Current limitations:
      - while `fees` and "non-fee" `assets` CAN have different reserves (or
      fees CAN be teleported), the remaining "non-fee" `assets` CANNOT, among
      themselves, have different reserve locations (this is also implicitly
      enforced by `MAX_ASSETS_FOR_TRANSFER=2`, but this can be safely
      increased in the future).
      - `fees` and "non-fee" `assets` CANNOT have **different remote**
      reserves (this could also be supported in the future, but adds even more
      complexity while possibly not being worth it - we'll see what the future
      holds).
      
      Fixes https://github.com/paritytech/polkadot-sdk/issues/1584
      Fixes https://github.com/paritytech/polkadot-sdk/issues/2055
      
      ---------
      
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      Co-authored-by: default avatarBranislav Kontur <[email protected]>
      18257373
    • Bastian Köcher's avatar
      pallet-grandpa: Remove `GRANDPA_AUTHORITIES_KEY` (#2181) · ebcf0a0f
      Bastian Köcher authored
      
      
      Remove the `GRANDPA_AUTHORITIES_KEY` key and its usage. Apparently this
      was used in the early days to communicate the grandpa authorities to the
      node. However, we have now a runtime api that does this for us. So, this
      pull request is moving from the custom managed storage item to a FRAME
      managed storage item.
      
      This pr also includes a migration for doing the switch on a running
      chain.
      
      ---------
      
      Co-authored-by: default avatarDavide Galassi <[email protected]>
      ebcf0a0f
  13. Nov 10, 2023
    • PG Herveou's avatar
      Contracts: Add XCM traits to interface with contracts (#2086) · 6b7be115
      PG Herveou authored
      
      
      We are introducing a new set of `XcmController` traits (final name yet
      to be determined).
      These traits are implemented by `pallet-xcm` and allows other pallets,
      such as `pallet_contracts`, to rely on these traits instead of tight
      coupling them to `pallet-xcm`.
      
      Using only the existing Xcm traits would mean duplicating the logic from
      `pallet-xcm` in these other pallets, which we aim to avoid. Our
      objective is to ensure that when these APIs are called from
      `pallet-contracts`, they produce the exact same outcomes as if called
      directly from `pallet-xcm`.
      
      The other benefits is that we can also expose return values to
      `pallet-contracts` instead of just calling `pallet-xcm` dispatchable and
      getting a `DispatchResult` back.
      
      See traits integration in this PR
      https://github.com/paritytech/polkadot-sdk/pull/1248, where the traits
      are used as follow to define and implement `pallet-contracts` Config.
      ```rs
      // Contracts config:
      pub trait Config: frame_system::Config {
        // ...
      
        /// A type that exposes XCM APIs, allowing contracts to interact with other parachains, and
        /// execute XCM programs.
        type Xcm: xcm_executor::traits::Controller<
      	  OriginFor<Self>,
      	  <Self as frame_system::Config>::RuntimeCall,
      	  BlockNumberFor<Self>,
        >;
      }
      
      // implementation
      impl pallet_contracts::Config for Runtime {
              // ...
      
      	type Xcm = pallet_xcm::Pallet<Self>;
      }
      ```
      
      ---------
      
      Co-authored-by: default avatarAlexander Theißen <[email protected]>
      Co-authored-by: command-bot <>
      6b7be115
    • Liam Aharon's avatar
      Improve `VersionedMigration` naming conventions (#2264) · 84ddbaf6
      Liam Aharon authored
      As suggested by @ggwpez
      (https://github.com/paritytech/polkadot-sdk/pull/2142#discussion_r1388145872),
      remove the `VersionChecked` prefix from version checked migrations (but
      leave `VersionUnchecked` prefixes)
      
      ---------
      
      Co-authored-by: command-bot <>
      84ddbaf6
  14. Nov 08, 2023
  15. Nov 06, 2023
  16. Nov 05, 2023
    • Michal Kucharczyk's avatar
      `chain-spec`: getting ready for native-runtime-free world (#1256) · 8ba7a6ab
      Michal Kucharczyk authored
      
      
      This PR prepares chains specs for _native-runtime-free_  world.
      
      This PR has following changes:
      - `substrate`:
        - adds support for:
      - JSON based `GenesisConfig` to `ChainSpec` allowing interaction with
      runtime `GenesisBuilder` API.
      - interacting with arbitrary runtime wasm blob to[
      `chain-spec-builder`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/bin/utils/chain-spec-builder/src/lib.rs#L46)
      command line util,
      - removes
      [`code`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/frame/system/src/lib.rs#L660)
      from `system_pallet`
        - adds `code` to the `ChainSpec`
      - deprecates
      [`ChainSpec::from_genesis`](https://github.com/paritytech/substrate/blob/3ef576eaeb3f42610e85daecc464961cf1295570/client/chain-spec/src/chain_spec.rs#L263),
      but also changes the signature of this method extending it with `code`
      argument.
      [`ChainSpec::builder()`](https://github.com/paritytech/substrate/blob/20bee680ed098be7239cf7a6b804cd4de267983e/client/chain-spec/src/chain_spec.rs#L507)
      should be used instead.
      - `polkadot`:
      - all references to `RuntimeGenesisConfig` in `node/service` are
      removed,
      - all
      `(kusama|polkadot|versi|rococo|wococo)_(staging|dev)_genesis_config`
      functions now return the JSON patch for default runtime `GenesisConfig`,
        - `ChainSpecBuilder` is used, `ChainSpec::from_genesis` is removed,
      
      - `cumulus`:
        - `ChainSpecBuilder` is used, `ChainSpec::from_genesis` is removed,
      - _JSON_ patch configuration used instead of `RuntimeGenesisConfig
      struct` in all chain specs.
        
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarJavier Viola <[email protected]>
      Co-authored-by: default avatarDavide Galassi <[email protected]>
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      Co-authored-by: default avatarKevin Krone <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      8ba7a6ab
  17. Nov 03, 2023
    • georgepisaltu's avatar
      Identity pallet improvements (#2048) · 21fbc00d
      georgepisaltu authored
      
      
      This PR is a follow up to #1661 
      
      - [x] rename the `simple` module to `legacy`
      - [x] fix benchmarks to disregard the number of additional fields
      - [x] change the storage deposits to charge per encoded byte of the
      identity information instance, removing the need for `fn
      additional(&self) -> usize` in `IdentityInformationProvider`
      - [x] ~add an extrinsic to rejig deposits to account for the change
      above~
      - [ ] ~ensure through proper configuration that the new byte-based
      deposit is always lower than whatever is reserved now~
      - [x] remove `IdentityFields` from the `set_fields` extrinsic signature,
      as per [this
      discussion](https://github.com/paritytech/polkadot-sdk/pull/1661#discussion_r1371703403)
      
      > ensure through proper configuration that the new byte-based deposit is
      always lower than whatever is reserved now
      
      Not sure this is needed anymore. If the new deposits are higher than
      what is currently on chain and users don't have enough funds to reserve
      what is needed, the extrinisc fails and they're basically grandfathered
      and frozen until they add more funds and/or make a change to their
      identity. This behavior seems fine to me. Original idea
      [here](https://github.com/paritytech/polkadot-sdk/pull/1661#issuecomment-1779606319).
      
      > add an extrinsic to rejig deposits to account for the change above
      
      This was initially implemented but now removed from this PR in favor of
      the implementation detailed
      [here](https://github.com/paritytech/polkadot-sdk/pull/2088).
      
      ---------
      
      Signed-off-by: default avatargeorgepisaltu <[email protected]>
      Co-authored-by: default avatarjoepetrowski <[email protected]>
      21fbc00d
  18. Nov 01, 2023
  19. Oct 31, 2023
    • Adel Arja's avatar
      1953 defensive testing extrinsic (#1998) · 6e2f94f8
      Adel Arja authored
      
      
      # Description
      
      The `trigger_defensive` call has been added to the `root-testing`
      pallet. The idea is to have this pallet running on `Rococo/Westend` and
      use it to verify if the runtime monitoring works end-to-end.
      
      To accomplish this, `trigger_defensive` dispatches an event when it is
      called.
      
      Closes #1953
      
      # Checklist
      
      - [x] My PR includes a detailed description as outlined in the
      "Description" section above
      - [ ] My PR follows the [labeling requirements](CONTRIBUTING.md#Process)
      of this project (at minimum one label for `T`
        required)
      - [ ] I have made corresponding changes to the documentation (if
      applicable)
      - [ ] I have added tests that prove my fix is effective or that my
      feature works (if applicable)
      
      You can remove the "Checklist" section once all have been checked. Thank
      you for your contribution!
      
      ✄
      -----------------------------------------------------------------------------
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
      6e2f94f8
  20. Oct 27, 2023
    • Liam Aharon's avatar
      Automatically build and attach production and dev runtimes to GH releases (#2054) · a7061712
      Liam Aharon authored
      
      
      Closes https://github.com/paritytech/release-engineering/issues/6
      
      Adds a new Github Workflow which on a new release being created, builds
      and attaches all runtimes managed in this repository in two flavours:
      - `dev-debug-build`: Built with the `try-runtime` feature and has
      logging enabled
      - `on-chain-release`: Built with the regular old `on-chain-release`
      feature
      
      The new Github Workflow could be extended in the future by the
      @paritytech/release-engineering team to fully automate the release
      process if they choose to, similar to how it is fully automated in the
      Fellowship repo
      (https://github.com/polkadot-fellows/runtimes/blob/main/.github/workflows/release.yml).
      
      The `on-chain-release` did not exist for parachains, so I added it. 
      
      ---
      
      Tested on my fork: 
      - https://github.com/liamaharon/polkadot-sdk/actions/runs/6663773523
      - https://github.com/liamaharon/polkadot-sdk/releases/tag/test-6
      
      ---------
      
      Co-authored-by: default avatarChevdor <[email protected]>
      Co-authored-by: default avatarDónal Murray <[email protected]>
      a7061712
  21. Oct 24, 2023
    • georgepisaltu's avatar
      Make `IdentityInfo` generic in `pallet-identity` (#1661) · 91851951
      georgepisaltu authored
      Fixes #179 
      
      # Description
      
      This PR makes the structure containing identity information used in
      `pallet-identity` generic through the pallet `Config`. Additionally, the
      old structure is now available in a separate module called `simple`
      (pending rename) and is compatible with the new interface.
      
      Another change in this PR is that while the `additional` field in
      `IdentityInfo` stays for backwards compatibility reasons, the associated
      costs are stil present in the pallet through the `additional` function
      in the `IdentityInformationProvider` interface. This function is marked
      as deprecated as it is only a temporary solution to the backwards
      compatibility problem we had. In short, we could have removed the
      additional fields in the struct and done a migration, but we chose to
      wait and do it off-chain through the genesis of the system parachain.
      After we move the identity pallet to the parachain, additional fields
      will be migrated into the existing fields and the `additional` key-value
      store will be removed. Until that happens, this interface will provide
      the necessary information to properly account for the associated costs.
      
      Additionally, this PR fixes an unrelated issue; the `IdentityField` enum
      used to represent the fields as bitflags couldn't store more than 8
      fields, even though it was marked as `#[repr(u64)]`. This was because of
      the `derive` implementation of `TypeInfo`, which assumed `u8` semantics.
      The custom implementation of this trait in
      https://github.com/paritytech/polkadot-sdk/commit/0105cc03
      
      
      fixes the issue.
      
      ---------
      
      Signed-off-by: default avatargeorgepisaltu <[email protected]>
      Co-authored-by: default avatarSam Johnson <[email protected]>
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      91851951
    • Kian Paimani's avatar
      Ensure correct variant count in `Runtime[Hold/Freeze]Reason` (#1900) · 35eb133b
      Kian Paimani authored
      
      
      closes https://github.com/paritytech/polkadot-sdk/issues/1882
      
      ## Breaking Changes
      
      This PR introduces a new item to `pallet_balances::Config`:
      
      ```diff
      trait Config {
      ++    type RuntimeFreezeReasons;
      }
      ```
      
      This value is only used to check it against `type MaxFreeze`. A similar
      check has been added for `MaxHolds` against `RuntimeHoldReasons`, which
      is already given to `pallet_balances`.
      
      In all contexts, you should pass the real `RuntimeFreezeReasons`
      generated by `construct_runtime` to `type RuntimeFreezeReasons`. Passing
      `()` would also work, but it would imply that the runtime uses no
      freezes at all.
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
      35eb133b
  22. Oct 23, 2023
    • joe petrowski's avatar
      Re-enable Identity on Westend and Rococo (#1901) · 95052437
      joe petrowski authored
      Reverts https://github.com/paritytech/polkadot-sdk/pull/1476
      
      The `lock_pallet` / `unlock_pallet` additions in
      https://github.com/paritytech/polkadot-sdk/pull/1814 will result in less
      downtime for users than using runtime upgrades.
      95052437
    • Branislav Kontur's avatar
      Remove `(rococo/westend)-runtime` deps from testnet AssetHubs (#1979) · c284a931
      Branislav Kontur authored
      ## Problem
      
      This PR addresses the issue with testnet AssetHub builds, which was
      discovered during the execution of `bot bench`.
      
      https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/4038738
      ```
           Compiling asset-hub-rococo-runtime-wasm v1.0.0 (/builds/parity/mirrors/polkadot-sdk/target/production/wbuild/asset-hub-rococo-runtime)
        warning: Linking globals named 'Core_version': symbol multiply defined!
        error: failed to load bitcode of module "rococo_runtime-8799ee884447805a.rococo_runtime.0bc572b8-cgu.0.rcgu.o": 
        warning: `asset-hub-rococo-runtime-wasm` (lib) generated 1 warning
        error: could not compile `asset-hub-rococo-runtime-wasm` (lib) due to previous error; 1 warning emitted
      ```
      
      https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/4038739
      ```
      Compiling asset-hub-westend-runtime-wasm v1.0.0 (/builds/parity/mirrors/polkadot-sdk/target/production/wbuild/asset-hub-westend-runtime)
        warning: Linking globals named 'Core_version': symbol multiply defined!
        error: failed to load bitcode of module "westend_runtime-86d7844430f97d5c.westend_runtime.b7678d03-cgu.0.rcgu.o": 
        warning: `asset-hub-westend-runtime-wasm` (lib) generated 1 warning
        error: could not compile `asset-hub-westend-runtime-wasm` (lib) due to previous error; 1 warning emitted
      ```
      
      ## Solution
      
      - Removed dependencies on `rococo-runtime` and `westend-runtime`
      introduced by [this
      PR](https://github.com/paritytech/polkadot-sdk/pull/1234/files#diff-a86375df98e04ca3cce1ea35c40257a222e2d5087f5f528ff33307678b78dc2dR534-R550).
      - Replaced `<rococo_runtime::Treasury as PalletInfoAccess>::index()`
      with `rococo_runtime_constants::TREASURY_PALLET_ID`.
      - Added `check_treasury_pallet_id` to the relay runtimes to ensure that
      the constant is aligned with the pallet id.
      - Added "Rococo Treasury" to the waived locations (that will not be
      charged fees in the executor) for `BridgeHubRococo` (to be aligned with
      AssetHubs).
      
      ## References
      
      [Full element discussion
      here](https://matrix.to/#/!JUeaZUiYbdrvzvtwSL:parity.io/$2PnjYMsWRjR7M3oOfGuRI0XkjdoqJLtRcAPVcDLuLVg?via=parity.io&via=web3.foundation).
      
      ---------
      
      Co-authored-by: command-bot <>
      c284a931
  23. Oct 20, 2023
    • Bastian Köcher's avatar
      `xcm`: Change `TypeInfo::path` to not include `staging` (#1948) · f3bf5c1a
      Bastian Köcher authored
      
      
      The `xcm` crate was renamed to `staging-xcm` to be able to publish it to
      crates.io as someone as squatted `xcm`. The problem with this rename is
      that the `TypeInfo` includes the crate name which ultimately lands in
      the metadata. The metadata is consumed by downstream users like
      `polkadot-js` or people building on top of `polkadot-js`. These people
      are using the entire `path` to find the type in the type registry. Thus,
      their code would break as the type path would now be [`staging_xcm`,
      `VersionedXcm`] instead of [`xcm`, `VersionedXcm`]. This pull request
      fixes this by renaming the path segment `staging_xcm` to `xcm`.
      
      This requires: https://github.com/paritytech/scale-info/pull/197
      
      ---------
      
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      f3bf5c1a
  24. Oct 18, 2023
    • Keith Yeung's avatar
      Introduce XcmFeesToAccount fee manager (#1234) · 3dece311
      Keith Yeung authored
      
      
      Combination of paritytech/polkadot#7005, its addon PR
      paritytech/polkadot#7585 and its companion paritytech/cumulus#2433.
      
      This PR introduces a new XcmFeesToAccount struct which implements the
      `FeeManager` trait, and assigns this struct as the `FeeManager` in the
      XCM config for all runtimes.
      
      The struct simply deposits all fees handled by the XCM executor to a
      specified account. In all runtimes, the specified account is configured
      as the treasury account.
      
      XCM __delivery__ fees are now being introduced (unless the root origin
      is sending a message to a system parachain on behalf of the originating
      chain).
      
      # Note for reviewers
      
      Most file changes are tests that had to be modified to account for the
      new fees.
      Main changes are in:
      - cumulus/pallets/xcmp-queue/src/lib.rs <- To make it track the delivery
      fees exponential factor
      - polkadot/xcm/xcm-builder/src/fee_handling.rs <- Added. Has the
      FeeManager implementation
      - All runtime xcm_config files <- To add the FeeManager to the XCM
      configuration
      
      # Important note
      
      After this change, instructions that create and send a new XCM (Query*,
      Report*, ExportMessage, InitiateReserveWithdraw, InitiateTeleport,
      DepositReserveAsset, TransferReserveAsset, LockAsset and RequestUnlock)
      will require the corresponding origin account in the origin register to
      pay for transport delivery fees, and the onward message will fail to be
      sent if the origin account does not have the required amount. This
      delivery fee is on top of what we already collect as tx fees in
      pallet-xcm and XCM BuyExecution fees!
      
      Wallet UIs that want to expose the new delivery fee can do so using the
      formula:
      
      ```
      delivery_fee_factor * (base_fee + encoded_msg_len * per_byte_fee)
      ```
      
      where the delivery fee factor can be obtained from the corresponding
      pallet based on which transport you are using (UMP, HRMP or bridges),
      the base fee is a constant, the encoded message length from the message
      itself and the per byte fee is the same as the configured per byte fee
      for txs (i.e. `TransactionByteFee`).
      
      ---------
      
      Co-authored-by: default avatarBranislav Kontur <[email protected]>
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      Co-authored-by: default avatarGiles Cope <[email protected]>
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      Co-authored-by: default avatarKian Paimani <[email protected]>
      3dece311
    • joe petrowski's avatar
      Add Runtime Missing Crate Descriptions (#1909) · d3ea69b7
      joe petrowski authored
      Adds descriptions needed for publishing to crates.io.
      d3ea69b7
    • Adrian Catangiu's avatar
      cumulus: add asset-hub-rococo runtime based on asset-hub-kusama and add... · 8b3905d2
      Adrian Catangiu authored
      
      cumulus: add asset-hub-rococo runtime based on asset-hub-kusama and add asset-bridging support to it (#1215)
      
      This commit adds Rococo Asset Hub dedicated runtime so we can test new
      features here, before merging them in Kusama Asset Hub.
      Also adds one such feature: asset transfer over bridge (Rococo AssetHub
      <> Wococo AssetHub)
      
      - clone `asset-hub-kusama-runtime` -> `asset-hub-rococo-runtime`
      - make it use Rococo primitives, names, assets, constants, etc
      - add asset-transfer-over-bridge support to Rococo AssetHub <> Wococo
      AssetHub
      
      Fixes #1128
      
      ---------
      
      Co-authored-by: default avatarBranislav Kontur <[email protected]>
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      8b3905d2
  25. Oct 16, 2023
    • Alejandro Martinez Andres's avatar
      Adding migrations to clean Rococo Gov 1 storage & reserved funds (#1849) · 86fde367
      Alejandro Martinez Andres authored
      Following
      [polkadot#7314](https://github.com/paritytech/polkadot/pull/7314) and
      after merging https://github.com/paritytech/polkadot-sdk/pull/1177 this
      PR solves https://github.com/paritytech/polkadot-sdk/issues/1618
      
      The following is a summary of the outcome of the migration.
      
      | Module | Total Accounts | Total stake to unlock | Total deposit to
      unreserve |
      | ------- | --------------- | --------------------- |
      -------------------------- |
      | Elections Phragmen | 27 | 1,132.821063320441 ROC | 1.465386531600 ROC
      |
      | Democracy | 69 | 2733.923509345613 ROC | 0.166666665000 ROC |
      | Tips | 4 | N/A | 0.015099999849 ROC |
      
      The migrations will also remove the following amount of keys
      
      103 Democracy keys 🧹
      5 Council keys 🧹
      1 TechnicalCommittee keys 🧹
      25 PhragmenElection keys 🧹
      1 TechnicalMembership keys 🧹
      9 Tips keys 🧹
      86fde367
  26. Oct 12, 2023
  27. Oct 10, 2023
    • Branislav Kontur's avatar
      [xcm] Use `Weight::MAX` for `reserve_asset_deposited`,... · e3c97e48
      Branislav Kontur authored
      [xcm] Use `Weight::MAX` for `reserve_asset_deposited`, `receive_teleported_asset` benchmarks (#1726)
      
      # Description
      
      ## Summary
      
      Previously, the `pallet_xcm::do_reserve_transfer_assets` and
      `pallet_xcm::do_teleport_assets` functions relied on weight estimation
      for remote chain execution, which was based on guesswork derived from
      the local chain. This approach led to complications for runtimes that
      did not provide or support specific [XCM
      configurations](https://github.com/paritytech/polkadot-sdk/blob/7cbe0c76/polkadot/xcm/xcm-executor/src/config.rs#L43-L47)
      for `IsReserve` or `IsTeleporter`. Consequently, such runtimes had to
      resort to implementing hard-coded weights for XCM instructions like
      `reserve_asset_deposited` or `receive_teleported_asset` to support
      extrinsics such as `pallet_xcm::reserve_transfer_assets` and
      `pallet_xcm::teleport_assets`, which depended on remote weight
      estimation.
      
      The issue of remote weight estimation was addressed and resolved by
      [Pull Request
      #1645](https://github.com/paritytech/polkadot-sdk/pull/1645), which
      removed the need for remote weight estimation.
      
      ## Solution
      
      As a continuation of this improvement, the current PR proposes further
      cleanup by removing unnecessary hard-coded values and rectifying
      benchmark results with `Weight::MAX` that previously used
      `T::BlockWeights::get().max_block` as an override for unsupported XCM
      instructions like `ReserveAssetDeposited` and `ReceiveTeleportedAsset`.
      
      
      ## Questions
      
      - [x] Can we remove now also `Hardcoded till the XCM pallet is fixed`
      for `deposit_asset`? E.g. for AssetHubKusama
      [here](https://github.com/paritytech/polkadot-sdk/blob/7cbe0c76/cumulus/parachains/runtimes/assets/asset-hub-kusama/src/weights/xcm/mod.rs#L129-L134)
      - [x] Are comments like
      [this](https://github.com/paritytech/polkadot-sdk/blob/7cbe0c76/polkadot/runtime/kusama/src/weights/xcm/mod.rs#L94)
      `// Kusama doesn't support ReserveAssetDeposited, so this benchmark has
      a default weight` still relevant? Shouldnt be removed/changed?
      
      
      ## TODO
      
      - [x] `bench bot` regenerate xcm weights for all runtimes
      - [x] remove hard-coded stuff from system parachain weight files
      - [ ] when merged, open `polkadot-fellow/runtimes` PR
      
      ## References
      
      Fixes #1132
      Closes #1132
      Old polkadot repo [PR](https://github.com/paritytech/polkadot/pull/7546)
      
      ---------
      
      Co-authored-by: command-bot <>
      e3c97e48
  28. Oct 07, 2023
    • Muharem Ismailov's avatar
      Treasury spends various asset kinds (#1333) · cb944dc5
      Muharem Ismailov authored
      
      
      ### Summary 
      
      This PR introduces new dispatchables to the treasury pallet, allowing
      spends of various asset types. The enhanced features of the treasury
      pallet, in conjunction with the asset-rate pallet, are set up and
      enabled for Westend and Rococo.
      
      ### Westend and Rococo runtimes.
      
      Polkadot/Kusams/Rococo Treasury can accept proposals for `spends` of
      various asset kinds by specifying the asset's location and ID.
      
      #### Treasury Instance New Dispatchables:
      - `spend(AssetKind, AssetBalance, Beneficiary, Option<ValidFrom>)` -
      propose and approve a spend;
      - `payout(SpendIndex)` - payout an approved spend or retry a failed
      payout
      - `check_payment(SpendIndex)` - check the status of a payout;
      - `void_spend(SpendIndex)` - void previously approved spend;
      > existing spend dispatchable renamed to spend_local
      
      in this context, the `AssetKind` parameter contains the asset's location
      and it's corresponding `asset_id`, for example:
      `USDT` on `AssetHub`,
      ``` rust
      location = MultiLocation(0, X1(Parachain(1000)))
      asset_id = MultiLocation(0, X2(PalletInstance(50), GeneralIndex(1984)))
      ```
      
      the `Beneficiary` parameter is a `MultiLocation` in the context of the
      asset's location, for example
      ``` rust
      // the Fellowship salary pallet's location / account
      FellowshipSalaryPallet = MultiLocation(1, X2(Parachain(1001), PalletInstance(64)))
      // or custom `AccountId`
      Alice = MultiLocation(0, AccountId32(network: None, id: [1,...]))
      ```
      
      the `AssetBalance` represents the amount of the `AssetKind` to be
      transferred to the `Beneficiary`. For permission checks, the asset
      amount is converted to the native amount and compared against the
      maximum spendable amount determined by the commanding spend origin.
      
      the `spend` dispatchable allows for batching spends with different
      `ValidFrom` arguments, enabling milestone-based spending. If the
      expectations tied to an approved spend are not met, it is possible to
      void the spend later using the `void_spend` dispatchable.
      
      Asset Rate Pallet provides the conversion rate from the `AssetKind` to
      the native balance.
      
      #### Asset Rate Instance Dispatchables:
      - `create(AssetKind, Rate)` - initialize a conversion rate to the native
      balance for the given asset
      - `update(AssetKind, Rate)` - update the conversion rate to the native
      balance for the given asset
      - `remove(AssetKind)` - remove an existing conversion rate to the native
      balance for the given asset
      
      the pallet's dispatchables can be executed by the Root or Treasurer
      origins.
      
      ### Treasury Pallet
      
      Treasury Pallet can accept proposals for `spends` of various asset kinds
      and pay them out through the implementation of the `Pay` trait.
      
      New Dispatchables:
      - `spend(Config::AssetKind, AssetBalance, Config::Beneficiary,
      Option<ValidFrom>)` - propose and approve a spend;
      - `payout(SpendIndex)` - payout an approved spend or retry a failed
      payout;
      - `check_payment(SpendIndex)` - check the status of a payout;
      - `void_spend(SpendIndex)` - void previously approved spend;
      > existing spend dispatchable renamed to spend_local
      
      The parameters' types of the `spend` dispatchable exposed via the
      pallet's `Config` and allows to propose and accept a spend of a certain
      amount.
      
      An approved spend can be claimed via the `payout` within the
      `Config::SpendPeriod`. Clients provide an implementation of the `Pay`
      trait which can pay an asset of the `AssetKind` to the `Beneficiary` in
      `AssetBalance` units.
      
      The implementation of the Pay trait might not have an immediate final
      payment status, for example if implemented over `XCM` and the actual
      transfer happens on a remote chain.
      
      The `check_status` dispatchable can be executed to update the spend's
      payment state and retry the `payout` if the payment has failed.
      
      ---------
      
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      Co-authored-by: command-bot <>
      cb944dc5
  29. Sep 29, 2023
    • Bastian Köcher's avatar
      Remove kusama and polkadot runtime crates (#1731) · bf90cb0b
      Bastian Köcher authored
      This pull request is removing the Kusama and Polkadot runtime crates. As
      still some crates dependent on the runtime crates, this pull request is
      doing some more changes.
      
      - It removes the `hostperfcheck` CLI command. This CLI command could
      compare the current node against the standard hardware by doing some
      checks. Later we added the hardware benchmark feature to Substrate. This
      hardware benchmark is running on every node startup and prints a warning
      if the current node is too slow. This makes this CLI command a duplicate
      that was also depending on the kusama runtime.
      
      - The pull request is removing the emulated integration tests that were
      requiring the Kusama or Polkadot runtime crates.
      bf90cb0b
  30. Sep 28, 2023
    • Michal Kucharczyk's avatar
      rococo-runtime: `RococoGenesisExt` removed (#1490) · 50242a61
      Michal Kucharczyk authored
      [`RococoGenesisExt`](https://github.com/paritytech/polkadot-sdk/blob/a414ea75
      
      /polkadot/node/service/src/chain_spec.rs#L152-L171)
      is removed. It was the hack to allow overwriting
      `EpochDurationInBlocks`. Removal of `RococGenesisExt` prevents from
      manipulating the state to change the runtime constants.
      
      Changes:
      - Environment variable which controls the `time::EpochDurationInBlocks`
      value was added: `ROCOCO_EPOCH_DURATION` (epoch duration will be set to
      the value of env),
      - `10,100,600` versions of rococo-runtime are built in CI and put into `polkadot-debug` docker image.
      
      `rococo-runtime` building examples:
      - to build runtime for `versi_staging_testnet` which had
      EpochDurationInBlocks set to 100:
        ```
      ROCOCO_EPOCH_DURATION=100 cargo build --features=fast-runtime -p
      rococo-runtime
        ```
      - to build runtime for `wococo_development`
        ```
      ROCOCO_EPOCH_DURATION=10 cargo build --features=fast-runtime -p
      rococo-runtime
        ```
      - to build `versi-staging` chain spec:
        ```
      ROCOCO_EPOCH_DURATION=100 cargo run -p polkadot --features=fast-runtime
      -- build-spec --chain versi-staging --raw
        ```
      - to build `wococo-dev` chain spec:
        ```
      ROCOCO_EPOCH_DURATION=10 cargo run -p polkadot --features=fast-runtime
      -- build-spec --chain wococo-dev --raw
        ```
      
      It is also possible to change the epoch duration by replacing the `code` field in the chain spec with the hex dump of pre-built runtime wasm blob (because the epoch duration is hard-coded into wasm blob).
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      50242a61