Skip to content
  1. Mar 01, 2024
    • Francisco Aguirre's avatar
      Add `claim_assets` extrinsic to `pallet-xcm` (#3403) · 65088668
      Francisco Aguirre authored
      
      
      If an XCM execution fails or ends with leftover assets, these will be
      trapped.
      In order to claim them, a custom XCM has to be executed, with the
      `ClaimAsset` instruction.
      However, arbitrary XCM execution is not allowed everywhere yet and XCM
      itself is still not easy enough to use for users out there with trapped
      assets.
      This new extrinsic in `pallet-xcm` will allow these users to easily
      claim their assets, without concerning themselves with writing arbitrary
      XCMs.
      
      Part of fixing https://github.com/paritytech/polkadot-sdk/issues/3495
      
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      65088668
  2. Feb 29, 2024
  3. Feb 28, 2024
    • Alexandru Gheorghe's avatar
      Fixup multi-collator parachain transition to async backing (#3510) · 833bafdb
      Alexandru Gheorghe authored
      
      
      Fixing: 
      ```
      Verification failed for block 0x07bbf1e04121d70a4bdb21cc055132b53ac2390fa95c4d05497fc91b1e8bf7f5 received from (12D3KooWJzLd8skcAgA24EcJey7aJAhYctfUxWGjSP5Usk9wbpPZ): "Header 0x07bbf1e04121d70a4bdb21cc055132b53ac2390fa95c4d05497fc91b1e8bf7f5 rejected: too far in the future"   
      ```
      
      ---------
      
      Signed-off-by: default avatarAlexandru Gheorghe <[email protected]>
      Co-authored-by: default avatarDmitry Sinyavin <[email protected]>
      Co-authored-by: default avatars0me0ne-unkn0wn <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      833bafdb
    • Oliver Tale-Yazdi's avatar
      Multi-Block-Migrations, `poll` hook and new System callbacks (#1781) · eefd5fe4
      Oliver Tale-Yazdi authored
      
      
      This MR is the merge of
      https://github.com/paritytech/substrate/pull/14414 and
      https://github.com/paritytech/substrate/pull/14275. It implements
      [RFC#13](https://github.com/polkadot-fellows/RFCs/pull/13), closes
      https://github.com/paritytech/polkadot-sdk/issues/198.
      
      ----- 
      
      This Merge request introduces three major topicals:
      
      1. Multi-Block-Migrations
      1. New pallet `poll` hook for periodic service work
      1. Replacement hooks for `on_initialize` and `on_finalize` in cases
      where `poll` cannot be used
      
      and some more general changes to FRAME.  
      The changes for each topical span over multiple crates. They are listed
      in topical order below.
      
      # 1.) Multi-Block-Migrations
      
      Multi-Block-Migrations are facilitated by creating `pallet_migrations`
      and configuring `System::Config::MultiBlockMigrator` to point to it.
      Executive picks this up and triggers one step of the migrations pallet
      per block.
      The chain is in lockdown mode for as long as an MBM is ongoing.
      Executive does this by polling `MultiBlockMigrator::ongoing` and not
      allowing any transaction in a block, if true.
      
      A MBM is defined through trait `SteppedMigration`. A condensed version
      looks like this:
      ```rust
      /// A migration that can proceed in multiple steps.
      pub trait SteppedMigration {
      	type Cursor: FullCodec + MaxEncodedLen;
      	type Identifier: FullCodec + MaxEncodedLen;
      
      	fn id() -> Self::Identifier;
      
      	fn max_steps() -> Option<u32>;
      
      	fn step(
      		cursor: Option<Self::Cursor>,
      		meter: &mut WeightMeter,
      	) -> Result<Option<Self::Cursor>, SteppedMigrationError>;
      }
      ```
      
      `pallet_migrations` can be configured with an aggregated tuple of these
      migrations. It then starts to migrate them one-by-one on the next
      runtime upgrade.
      Two things are important here:
      - 1. Doing another runtime upgrade while MBMs are ongoing is not a good
      idea and can lead to messed up state.
      - 2. **Pallet Migrations MUST BE CONFIGURED IN `System::Config`,
      otherwise it is not used.**
      
      The pallet supports an `UpgradeStatusHandler` that can be used to notify
      external logic of upgrade start/finish (for example to pause XCM
      dispatch).
      
      Error recovery is very limited in the case that a migration errors or
      times out (exceeds its `max_steps`). Currently the runtime dev can
      decide in `FailedMigrationHandler::failed` how to handle this. One
      follow-up would be to pair this with the `SafeMode` pallet and enact
      safe mode when an upgrade fails, to allow governance to rescue the
      chain. This is currently not possible, since governance is not
      `Mandatory`.
      
      ## Runtime API
      
      - `Core`: `initialize_block` now returns `ExtrinsicInclusionMode` to
      inform the Block Author whether they can push transactions.
      
      ### Integration
      
      Add it to your runtime implementation of `Core` and `BlockBuilder`:
      ```patch
      diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs
      @@ impl_runtime_apis! {
      	impl sp_block_builder::Core<Block> for Runtime {
      -		fn initialize_block(header: &<Block as BlockT>::Header) {
      +		fn initialize_block(header: &<Block as BlockT>::Header) -> RuntimeExecutiveMode {
      			Executive::initialize_block(header)
      		}
      
      		...
      	}
      ```
      
      # 2.) `poll` hook
      
      A new pallet hook is introduced: `poll`. `Poll` is intended to replace
      mostly all usage of `on_initialize`.
      The reason for this is that any code that can be called from
      `on_initialize` cannot be migrated through an MBM. Currently there is no
      way to statically check this; the implication is to use `on_initialize`
      as rarely as possible.
      Failing to do so can result in broken storage invariants.
      
      The implementation of the poll hook depends on the `Runtime API` changes
      that are explained above.
      
      # 3.) Hard-Deadline callbacks
      
      Three new callbacks are introduced and configured on `System::Config`:
      `PreInherents`, `PostInherents` and `PostTransactions`.
      These hooks are meant as replacement for `on_initialize` and
      `on_finalize` in cases where the code that runs cannot be moved to
      `poll`.
      The reason for this is to make the usage of HD-code (hard deadline) more
      explicit - again to prevent broken invariants by MBMs.
      
      # 4.) FRAME (general changes)
      
      ## `frame_system` pallet
      
      A new memorize storage item `InherentsApplied` is added. It is used by
      executive to track whether inherents have already been applied.
      Executive and can then execute the MBMs directly between inherents and
      transactions.
      
      The `Config` gets five new items:
      - `SingleBlockMigrations` this is the new way of configuring migrations
      that run in a single block. Previously they were defined as last generic
      argument of `Executive`. This shift is brings all central configuration
      about migrations closer into view of the developer (migrations that are
      configured in `Executive` will still work for now but is deprecated).
      - `MultiBlockMigrator` this can be configured to an engine that drives
      MBMs. One example would be the `pallet_migrations`. Note that this is
      only the engine; the exact MBMs are injected into the engine.
      - `PreInherents` a callback that executes after `on_initialize` but
      before inherents.
      - `PostInherents` a callback that executes after all inherents ran
      (including MBMs and `poll`).
      - `PostTransactions` in symmetry to `PreInherents`, this one is called
      before `on_finalize` but after all transactions.
      
      A sane default is to set all of these to `()`. Example diff suitable for
      any chain:
      ```patch
      @@ impl frame_system::Config for Test {
       	type MaxConsumers = ConstU32<16>;
      +	type SingleBlockMigrations = ();
      +	type MultiBlockMigrator = ();
      +	type PreInherents = ();
      +	type PostInherents = ();
      +	type PostTransactions = ();
       }
      ```
      
      An overview of how the block execution now looks like is here. The same
      graph is also in the rust doc.
      
      <details><summary>Block Execution Flow</summary>
      <p>
      
      ![Screenshot 2023-12-04 at 19 11
      29](https://github.com/paritytech/polkadot-sdk/assets/10380170/e88a80c4-ef11-4faa-8df5-8b33a724c054)
      
      </p>
      </details> 
      
      ## Inherent Order
      
      Moved to https://github.com/paritytech/polkadot-sdk/pull/2154
      
      ---------------
      
      
      ## TODO
      
      - [ ] Check that `try-runtime` still works
      - [ ] Ensure backwards compatibility with old Runtime APIs
      - [x] Consume weight correctly
      - [x] Cleanup
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      Co-authored-by: default avatarJuan Girini <[email protected]>
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      Co-authored-by: default avatarGavin Wood <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      eefd5fe4
    • Clara van Staden's avatar
      Snowbridge - Extract Ethereum Chain ID (#3501) · 576681b8
      Clara van Staden authored
      While adding runtime tests to
      https://github.com/polkadot-fellows/runtimes/pull/130, I noticed the
      Ethereum chain ID was hardcoded. For Kusama + Polkadot, the Ethereum
      chain ID should 1 (Mainnet), whereas on Rococo it is 11155111 (Sepolia).
      
      This PR also updates the Snowbridge crates versions to the current
      versions on crates.io.
      
      ---------
      
      Co-authored-by: claravanstaden <Cats 4 life!>
      576681b8
    • maksimryndin's avatar
      PVF: re-preparing artifact on failed runtime construction (#3187) · 42613667
      maksimryndin authored
      
      
      resolve https://github.com/paritytech/polkadot-sdk/issues/3139
      
      - [x] use a distinguishable error for `execute_artifact`
      - [x] remove artifact in case of a `RuntimeConstruction` error during
      the execution
      - [x] augment the `validate_candidate_with_retry` of `ValidationBackend`
      with the case of retriable `RuntimeConstruction` error during the
      execution
      - [x] update the book
      (https://paritytech.github.io/polkadot-sdk/book/node/utility/pvf-host-and-workers.html#retrying-execution-requests)
      - [x] add a test
      - [x] run zombienet tests
      
      ---------
      
      Co-authored-by: default avatars0me0ne-unkn0wn <[email protected]>
      42613667
    • Kian Paimani's avatar
      Add documentation around FRAME Offchain workers (#3463) · 14530269
      Kian Paimani authored
      
      
      - deprecation companion:
      https://github.com/substrate-developer-hub/substrate-docs/pull/2136
      - inspired by
      https://substrate.stackexchange.com/questions/11058/how-can-i-create-ocw-that-wont-activates-every-block-but-will-activates-only-w/11060#11060
      
      ---------
      
      Co-authored-by: default avatarSergej Sakac <[email protected]>
      14530269
    • Oliver Tale-Yazdi's avatar
      [prdoc] Optional SemVer bumps and Docs (#3441) · f4eedceb
      Oliver Tale-Yazdi authored
      
      
      Changes:
      - Add an optional `bump` field to the crates in a prdoc.
      - Explain the cargo semver interpretation for <1 versions in the release
      doc.
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      f4eedceb
    • Alexandru Vasile's avatar
      rpc-v2/tx/tests: Add transaction broadcast tests and check propagated tx status (#3193) · f1b2189e
      Alexandru Vasile authored
      
      
      This PR adds tests for the `transaction_broadcast` method.
      
      
      The testing needs to coordinate the following components:
      - The `TestApi` marks transactions as invalid and implements
      `ChainApi::validate_transaction`
      - this is what dictates if a transaction is valid or not and is called
      from within the `BasicPool`
      - The `BasicPool` which maintains the transactions and implements
      `submit_and_watch` needed by the tx broadcast to submit the transaction
      - The status of the transaction pool is exposed by mocking the BasicPool
      - The `ChainHeadMockClient` which mocks the
      `BlockchainEvents::import_notification_stream` needed by the tx
      broadcast to know to which blocks the transaction is submitted
      
      The following changes have been added to the substrate testing to
      accommodate this:
      - `TestApi` gets ` remove_invalid`, counterpart to `add_invalid` to
      ensure an invalid transaction can become valid again; as well as a
      priority setter for extrinsics
      - `BasicPool` test constructor is extended with options for the
      `PoolRotator`
      - this mechanism is needed because transactions are banned for 30mins
      (default) after they are declared invalid
        - testing bypasses this by providing a `Duration::ZERO`
      
      ### Testing Scenarios
      
      - Capture the status of the transaction as it is normally broadcasted
      - `transaction_stop` is valid while the transaction is in progress
      - A future transaction is handled when the dependencies are completed
      - Try to resubmit the transaction at a later block (currently invalid)
      - An invalid transaction status is propagated; the transaction is marked
      as temporarily banned; then the ban expires and transaction is
      resubmitted
        
      This builds on top of:
      https://github.com/paritytech/polkadot-sdk/pull/3079
      Part of: https://github.com/paritytech/polkadot-sdk/issues/3084
      
      cc @paritytech/subxt-team
      
      ---------
      
      Signed-off-by: default avatarAlexandru Vasile <[email protected]>
      Co-authored-by: default avatarJames Wilson <[email protected]>
      f1b2189e
    • Liam Aharon's avatar
      Runtime Upgrade ref docs and Single Block Migration example pallet (#1554) · 12ce4f7d
      Liam Aharon authored
      Closes https://github.com/paritytech/polkadot-sdk-docs/issues/55
      
      - Changes 'current storage version' terminology to less ambiguous
      'in-code storage version' (suggestion by @ggwpez
      
      )
      - Adds a new example pallet `pallet-example-single-block-migrations`
      - Adds a new reference doc to replace
      https://docs.substrate.io/maintain/runtime-upgrades/ (temporarily living
      in the pallet while we wait for developer hub PR to merge)
      - Adds documentation for the `storage_alias` macro
      - Improves `trait Hooks` docs 
      - Improves `trait GetStorageVersion` docs
      - Update the suggested patterns for using `VersionedMigration`, so that
      version unchecked migrations are never exported
      - Prevents accidental usage of version unchecked migrations in runtimes
      
      https://github.com/paritytech/substrate/pull/14421#discussion_r1255467895
      - Unversioned migration code is kept inside `mod version_unchecked`,
      versioned code is kept in `pub mod versioned`
      - It is necessary to use modules to limit visibility because the inner
      migration must be `pub`. See
      https://github.com/rust-lang/rust/issues/30905 and
      
      https://internals.rust-lang.org/t/lang-team-minutes-private-in-public-rules/4504/40
      for more.
      
      ### todo
      
      - [x] move to reference docs to proper place within sdk-docs (now that
      https://github.com/paritytech/polkadot-sdk/pull/2102 is merged)
      - [x] prdoc
      
      ---------
      
      Co-authored-by: default avatarKian Paimani <[email protected]>
      Co-authored-by: default avatarJuan <[email protected]>
      Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: command-bot <>
      Co-authored-by: default avatargupnik <[email protected]>
      12ce4f7d
    • maksimryndin's avatar
      Collator overseer builder unification (#3335) · 7ec0b874
      maksimryndin authored
      
      
      resolve https://github.com/paritytech/polkadot-sdk/issues/3116
      
      a follow-up on
      https://github.com/paritytech/polkadot-sdk/pull/3061#pullrequestreview-1847530265:
      
      - [x] reuse collator overseer builder for polkadot-node and collator
      - [x] run zombienet test (0001-parachains-smoke-test.toml)
      - [x] make wasm build errors more user-friendly for an easier problem
      detection when using different toolchains in Rust
      
      ---------
      
      Co-authored-by: default avatarordian <[email protected]>
      Co-authored-by: default avatars0me0ne-unkn0wn <[email protected]>
      7ec0b874
    • Liam Aharon's avatar
      Introduce storage attr macro `#[disable_try_decode_storage]` and set it on... · 95da6583
      Liam Aharon authored
      Introduce storage attr macro `#[disable_try_decode_storage]` and set it on `System::Events` and `ParachainSystem::HostConfiguration` (#3454)
      
      Closes https://github.com/paritytech/polkadot-sdk/issues/2560
      
      Allows marking storage items with `#[disable_try_decode_storage]`, and
      uses it with `System::Events`.
      
      Question: what's the recommended way to write a test for this? I
      couldn't find a test for similar existing macro `#[whitelist_storage]`.
      95da6583
  4. Feb 27, 2024
    • Petr Mensik's avatar
      Add Polkadotters bootnoders per IBP application (#3423) · 0cc9b900
      Petr Mensik authored
      Hey everyone,
      
      this PR will replace existing Polkadotters bootnodes for Polkadot,
      Kusama and Westend and add Paseo bootnode to the relay chain suite. At
      the same time, it will add new bootnodes for all the system parachains,
      including People on Westend. This PR is a part of our membership in the
      IBP, meaning that all the bootnodes are hosted on our hardware housed in
      the data center in Christchurch, New Zealand.
      All the bootnodes were tested with an empty chain spec file with the
      following command yielding 1 peer.
      
      The test commands used are as follows:
      ```
      ./polkadot --base-path /tmp/node --reserved-only --chain paseo --reserved-nodes "/dns/paseo.bootnodes.polkadotters.com/tcp/30540/wss/p2p/12D3KooWPbbFy4TefEGTRF5eTYhq8LEzc4VAHdNUVCbY4nAnhqPP"
      ./polkadot --base-path /tmp/node --reserved-only --chain westend --reserved-nodes "/dns/westend.bootnodes.polkadotters.com/tcp/30310/wss/p2p/12D3KooWHPHb64jXMtSRJDrYFATWeLnvChL8NtWVttY67DCH1eC5"
      ./polkadot --base-path /tmp/node --reserved-only --chain kusama --reserved-nodes "/dns/kusama.bootnodes.polkadotters.com/tcp/30313/wss/p2p/12D3KooWHB5rTeNkQdXNJ9ynvGz8Lpnmsctt7Tvp7mrYv6bcwbPG"
      ./polkadot --base-path /tmp/node --no-hardware-benchmarks --reserved-only --chain polkadot --reserved-nodes "/dns/polkadot.bootnodes.polkadotters.com/tcp/30316/wss/p2p/12D3KooWPAVUgBaBk6n8SztLrMk8ESByncbAfRKUdxY1nygb9zG3"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain asset-hub-kusama --reserved-nodes "/dns/asset-hub-kusama.bootnodes.polkadotters.com/tcp/30513/wss/p2p/12D3KooWDpk7wVH7RgjErEvbvAZ2kY5VeaAwRJP5ojmn1e8b8UbU"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain asset-hub-polkadot --reserved-nodes "/dns/asset-hub-polkadot.bootnodes.polkadotters.com/tcp/30510/wss/p2p/12D3KooWKbfY9a9oywxMJKiALmt7yhrdQkjXMtvxhhDDN23vG93R"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain asset-hub-westend --reserved-nodes "/dns/asset-hub-westend.bootnodes.polkadotters.com/tcp/30516/wss/p2p/12D3KooWNFYysCqmojxqjjaTfD2VkWBNngfyUKWjcR4WFixfHNTk"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain bridge-hub-kusama --reserved-nodes "/dns/bridge-hub-kusama.bootnodes.polkadotters.com/tcp/30522/wss/p2p/12D3KooWH3pucezRRS5esoYyzZsUkKWcPSByQxEvmM819QL1HPLV"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain bridge-hub-kusama --reserved-nodes "/dns/bridge-hub-kusama.bootnodes.polkadotters.com/tcp/30522/wss/p2p/12D3KooWH3pucezRRS5esoYyzZsUkKWcPSByQxEvmM819QL1HPLV"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain bridge-hub-westend --reserved-nodes "/dns/bridge-hub-westend.bootnodes.polkadotters.com/tcp/30525/wss/p2p/12D3KooWPkwgJofp4GeeRwNgXqkp2aFwdLkCWv3qodpBJLwK43Jj"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain collectives-polkadot --reserved-nodes "/dns/collectives-polkadot.bootnodes.polkadotters.com/tcp/30528/wss/p2p/12D3KooWNohUjvJtGKUa8Vhy8C1ZBB5N8JATB6e7rdLVCioeb3ff"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain collectives-westend --reserved-nodes "/dns/collectives-westend.bootnodes.polkadotters.com/tcp/30531/wss/p2p/12D3KooWAFkXNSBfyPduZVgfS7pj5NuVpbU8Ee5gHeF8wvos7Yqn"
      ./polkadot-parachain --base-path /tmp/node --reserved-only --chain people-westend --reserved-nodes "/dns/identity-westend.bootnodes.polkadotters.com/tcp/30534/wss/p2p/12D3KooWKr9San6KTM7REJ95cBaDoiciGcWnW8TTftEJgxGF5Ehb"
      ```
      
      Best regards,
      
      Petr, Polkadotters
      0cc9b900
    • Kian Paimani's avatar
      Add documentation around FRAME Origin (#3362) · 29369a4e
      Kian Paimani authored
      Does the following: 
      
      - Add a reference doc page named `frame_runtime_types`, which explains
      what types like `RuntimeOrigin`, `RuntimeCall` etc are.
      - On top of it, it adds a reference doc page called `frame_origin` which
      explains a few important patterns that we use around origins
      - And finally brushes up `#[frame::origin]` docs. 
      - Updates the theme, sidebar and favicon to look like: 
      
      <img width="1728" alt="Screenshot 2024-02-20 at 12 16 00"
      src="https://github.com/paritytech/polkadot-sdk/assets/5588131/6d60a16b-2081-411b-8869-43b91920cca9">
      
      
      All of this was inspired by
      https://substrate.stackexchange.com/questions/10992/how-do-you-find-the-public-key-for-the-medium-spender-track-origin/10993
      
      closes https://github.com/paritytech/polkadot-sdk-docs/issues/45
      closes https://github.com/paritytech/polkadot-sdk-docs/issues/43
      contributes / overlaps with
      https://github.com/paritytech/polkadot-sdk/pull/2638 cc @liamaharon
      
      
      deprecation companion:
      https://github.com/substrate-developer-hub/substrate-docs/pull/2131
      pba-content companion:
      https://github.com/Polkadot-Blockchain-Academy/pba-content/pull/977
      
      ---------
      
      Co-authored-by: default avatarRadha <[email protected]>
      Co-authored-by: default avatarSebastian Kunert <[email protected]>
      Co-authored-by: default avatarGonçalo Pestana <[email protected]>
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      29369a4e
    • Serban Iorga's avatar
      Bridge zombienet tests: Check amount received at destination (#3490) · 2cdda0e6
      Serban Iorga authored
      Related to https://github.com/paritytech/polkadot-sdk/issues/3475
      2cdda0e6
    • Clara van Staden's avatar
      Snowbridge benchmark tests fix (#3424) · 94c54d50
      Clara van Staden authored
      When running `cargo test -p bridge-hub-rococo-runtime --features
      runtime-benchmarks`, two of the Snowbridge benchmark tests fails. The
      reason is that when the runtime-benchmarks feature is enabled, the
      `NoopMessageProcessor` message processor is used. The Snowbridge tests
      rely on the outbound messages to be processed using the message queue,
      so that we can check the expected nonce and block digest logs.
      
      This PR changes the conditional compilation to only use
      `NoopMessageProcessor` when compiling the executable to run benchmarks
      against, not when running tests.
      
      ---------
      
      Co-authored-by: claravanstaden <Cats 4 life!>
      94c54d50
    • Javier Viola's avatar
      fix(zombienet): increase timeout in download artifacts (#3376) · f5de090a
      Javier Viola authored
      
      
      Fix timeouts downloading the artifacts (e.g
      https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/5246040)
      Thx!
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      f5de090a
  5. Feb 26, 2024
    • philoniare's avatar
      Cleanup String::from_utf8 (#3446) · 81d447a8
      philoniare authored
      # Description
      
      *Refactors `String::from_utf8` usage in the pallet benchmarking
      
      Fixes #389
      
      ---------
      
      Co-authored-by: command-bot <>
      81d447a8
    • Oliver Tale-Yazdi's avatar
      [prdoc] Validate crate names (#3467) · 4080632e
      Oliver Tale-Yazdi authored
      Changes:
      - Add CI script to check that the `crate` names that are mentioned in
      prdocs are valid.
      
      We can extend it lateron to also validate the correct SemVer bumps as
      introduced in https://github.com/paritytech/polkadot-sdk/pull/3441.
      
      Example output:
      ```pre
      $ python3 .github/scripts/check-prdoc.py Cargo.toml prdoc/*.prdoc
      
      🔎 Reading workspace polkadot-sdk/Cargo.toml.
      📦 Checking 36 prdocs against 494 crates.
       All prdocs are valid.
      ```
      
      Note that not all old prdocs pass the check since crates have been
      renamed:
      ```pre
      $ python3 .github/scripts/check-prdoc.py Cargo.toml prdoc/**/*.prdoc
      
      🔎 Reading workspace polkadot-sdk/Cargo.toml.
      📦 Checking 186 prdocs against 494 crates.
       Some prdocs are invalid.
      💥 prdoc/1.4.0/pr_1926.prdoc lists invalid crate: node-cli
      💥 prdoc/1.4.0/pr_2086.prdoc lists invalid crate: xcm-executor
      💥 prdoc/1.4.0/pr_2107.prdoc lists invalid crate: xcm
      💥
      
       prdoc/1.6.0/pr_2684.prdoc lists invalid crate: xcm-builder
      
      ```
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      4080632e
    • Vladimir Istyufeev's avatar
      Limit max execution time for `test-linux-stable` CI jobs (#3483) · d05f8c57
      Vladimir Istyufeev authored
      Tests run as part of the `test-linux-stable` jobs could hang as shown
      [here](https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/5341393).
      This PR adds a failsafe for such cases.
      d05f8c57
    • Sebastian Kunert's avatar
      Introduce Notification block pinning limit (#2935) · 6c5a42a6
      Sebastian Kunert authored
      
      
      While investigating some pruning issues I found some room for
      improvement in the notification pin handling.
      
      **Problem:** It was not possible to define an upper limit on
      notification pins. The block pinning cache has a limit, but only handles
      bodies and justifications.
      
      After this PR, bookkeeping for notifications is managed in the pinning
      worker. A limit can be defined in the worker. If that limit is crossed,
      blocks that were pinned for that notification are unpinned, which now
      affects the state as well as bodies and justifications. The pinned
      blocks cache still has a limit, but should never be hit.
      
      closes #19
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      Co-authored-by: default avatarAndré Silva <[email protected]>
      6c5a42a6
    • Bastian Köcher's avatar
      frame-support: Improve error reporting when having too many pallets (#3478) · 0893ca15
      Bastian Köcher authored
      Instead of only generating the error, we now generate the actual code
      and the error. This generates in total less errors and helps the user to
      identify the actual problem and not being confronted with tons of
      errors.
      0893ca15
    • brenzi's avatar
      add Encointer as trusted teleporter for Westend (#3411) · 49266f10
      brenzi authored
      with the deprecation of Rococo, Encointer needs a new staging
      environment. Paseo will be Polkadot-focused and westend Kusama-focused,
      so we propose to use Westend
      49266f10
    • Branislav Kontur's avatar
      [pallet-xcm] Adjust benchmarks (teleport_assets/reserve_transfer_assets) not relying on ED (#3464) · 3d9439f6
      Branislav Kontur authored
      
      
      ## Problem
      During the bumping of the `polkadot-fellows` repository to
      `[email protected]`, I encountered a situation where the benchmarks
      `teleport_assets` and `reserve_transfer_assets` in AssetHubKusama
      started to fail. This issue arose due to a decreased ED balance for
      AssetHubs introduced
      [here](https://github.com/polkadot-fellows/runtimes/pull/158/files#diff-80668ff8e793b64f36a9a3ec512df5cbca4ad448c157a5d81abda1b15f35f1daR213),
      and also because of a [missing CI
      pipeline](https://github.com/polkadot-fellows/runtimes/issues/197) to
      check the benchmarks, which went unnoticed.
      
      These benchmarks expect the `caller` to have enough:
      1. balance to transfer (BTT)
      2. balance for paying delivery (BFPD).
       
      So the initial balance was calculated as `ED * 100`, which seems
      reasonable:
      ```
      const ED_MULTIPLIER: u32 = 100;
      let balance = existential_deposit.saturating_mul(ED_MULTIPLIER.into());`
      ```
      The problem arises when the price for delivery is 100 times higher than
      the existential deposit. In other words, when `ED * 100` does not cover
      `BTT` + `BFPD`.
      
      I check AHR/AHW/AHK/AHP and this problem has only AssetHubKusama
      ```
      ED: 3333333
      calculated price to parent delivery:  1031666634  (from xcm logs from the benchmark)
      ---
      
      3333333 * 100 - BTT(3333333) - BFPD(1031666634) = −701666667
      ```
      which results in the error;
      ```
      2024-02-23 09:19:42 Unable to charge fee with error Module(ModuleError { index: 31, error: [17, 0, 0, 0], message: Some("FeesNotMet") })
      Error: Input("Benchmark pallet_xcm::reserve_transfer_assets failed: FeesNotMet")
           
      ```
      
      ## Solution
      
      The benchmarks `teleport_assets` and `reserve_transfer_assets` were
      fixed by removing `ED * 100` and replacing it with `DeliveryHelper`
      logic, which calculates the (almost real) price for delivery and sets it
      along with the existential deposit as the initial balance for the
      account used in the benchmark.
      
      
      ## TODO
      
      - [ ] patch for 1.6 -
      https://github.com/paritytech/polkadot-sdk/pull/3466
      - [ ] patch for 1.7 -
      https://github.com/paritytech/polkadot-sdk/pull/3465
      - [ ] patch for 1.8 - TODO: PR
      
      ---------
      
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      3d9439f6
    • Alexandru Gheorghe's avatar
      Add more debug logs to understand if statement-distribution misbehaving (#3419) · b9c792a4
      Alexandru Gheorghe authored
      
      
      Add more debug logs to understand if statement-distribution is in a bad
      state, should be useful for debugging
      https://github.com/paritytech/polkadot-sdk/issues/3314 on production
      networks.
      
      Additionally, increase the number of parallel requests should make,
      since I notice that requests take around 100ms on kusama, and the 5
      parallel request was picked mostly random, no reason why we can do more
      than that.
      
      ---------
      
      Signed-off-by: default avatarAlexandru Gheorghe <[email protected]>
      Co-authored-by: default avatarordian <[email protected]>
      b9c792a4
    • eskimor's avatar
      Remove redundant parachains assigner pallet. (#3457) · ce5de995
      eskimor authored
      
      
      from Westend and Rococo.
      
      ---------
      
      Co-authored-by: default avatareskimor <[email protected]>
      Co-authored-by: command-bot <>
      ce5de995
  6. Feb 24, 2024
    • tmpolaczyk's avatar
      Use generic hash for runtime wasm in resolve_state_version_from_wasm (#3447) · de6d0259
      tmpolaczyk authored
      
      
      Changes the runtime hash algorithm used in
      `resolve_state_version_from_wasm` from `DefaultHasher` to a
      caller-provided one (usually `HashingFor<Block>`), to match the one used
      elsewhere.
      
      This fixes an issue where the runtime wasm is compiled 3 times when
      starting the `tanssi-node` with `--dev`. With this fix, the runtime wasm
      is only compiled 2 times. The other redundant compilation is caused by
      the `GenesisConfigBuilderRuntimeCaller` struct, which ignores the
      runtime cache.
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      de6d0259
  7. Feb 23, 2024
    • Andrei Sandu's avatar
      Runtime: allow backing multiple candidates of same parachain on different cores (#3231) · 2431001e
      Andrei Sandu authored
      
      
      Fixes https://github.com/paritytech/polkadot-sdk/issues/3144
      
      Builds on top of https://github.com/paritytech/polkadot-sdk/pull/3229
      
      ### Summary
      Some preparations for Runtime to support elastic scaling, guarded by
      config node features bit `FeatureIndex::ElasticScalingMVP`. This PR
      introduces a per-candidate `CoreIndex` but does it in a hacky way to
      avoid changing `CandidateCommitments`, `CandidateReceipts` primitives
      and networking protocols.
      
      #### Including `CoreIndex` in `BackedCandidate`
      If the `ElasticScalingMVP` feature bit is enabled then
      `BackedCandidate::validator_indices` is extended by 8 bits.
      The value stored in these bits represents the assumed core index for the
      candidate.
      
      It is temporary solution which works by creating a mapping from
      `BackedCandidate` to `CoreIndex` by assuming the `CoreIndex` can be
      discovered by checking in which validator group the validator that
      signed the statement is.
      
      TODO:
      - [x] fix tests
      - [x] add new tests
      - [x] Bump runtime API for Kusama, so we have that node features thing!
      -> https://github.com/polkadot-fellows/runtimes/pull/194
      
      ---------
      
      Signed-off-by: default avatarAndrei Sandu <[email protected]>
      Signed-off-by: default avataralindima <[email protected]>
      Co-authored-by: default avataralindima <[email protected]>
      2431001e
    • Serban Iorga's avatar
      Bridge zombienet tests: move all "framework" files under one folder (#3462) · 6fc1d41d
      Serban Iorga authored
      Related to https://github.com/paritytech/polkadot-sdk/issues/3400
      
      Moving all bridges testing "framework" files under one folder in order
      to be able to download the entire folder when we want to add tests in
      other repos
      
      No significant functional changes
      6fc1d41d
    • Sebastian Kunert's avatar
      PoV Reclaim Runtime Side (#3002) · 3386377b
      Sebastian Kunert authored
      
      
      # Runtime side for PoV Reclaim
      
      ## Implementation Overview
      - Hostfunction to fetch the storage proof size has been added to the
      PVF. It uses the size tracking recorder that was introduced in my
      previous PR.
      - Mechanisms to use the reclaim HostFunction have been introduced.
      - 1. A SignedExtension that checks the node-reported proof size before
      and after application of an extrinsic. Then it reclaims the difference.
      - 2. A manual helper to make reclaiming easier when manual interaction
      is required, for example in `on_idle` or other hooks.
      - In order to utilize the manual reclaiming, I modified `WeightMeter` to
      support the reduction of consumed weight, at least for storage proof
      size.
      
      ## How to use
      To enable the general functionality for a parachain:
      1. Add the SignedExtension to your parachain runtime. 
      2. Provide the HostFunction to the node
      3. Enable proof recording during block import
      
      ## TODO
      - [x] PRDoc
      
      ---------
      
      Co-authored-by: default avatarDmitry Markin <[email protected]>
      Co-authored-by: default avatarDavide Galassi <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      3386377b
    • Dino Pačandi's avatar
      pallet-membership weights (#3324) · 5fc6d67b
      Dino Pačandi authored
      
      
      ## Summary
      * use benchamarked weights instead of hardcoded ones for
      `pallet-membership`
      * rename benchmark to match extrinsic name
      * remove unnecessary dependency from `clear_prime`
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
      5fc6d67b
    • PG Herveou's avatar
      Contracts Add new version for marking new stable API (#3415) · f2645eec
      PG Herveou authored
      Add a `ApiVersion` constant to the pallet-contracts Config to
      communicate with developers the current state of the host functions
      exposed by the pallet
      f2645eec
    • Sebastian Kunert's avatar
      prdoc: Print errors on CI (#3459) · 64050cf3
      Sebastian Kunert authored
      By passing `RUST_LOG=info` to the check command, we will be able to see
      the exact problem with a given prdoc.
      
      Before:
      ```
      PR #3243 -> ERR
      ```
      
      After:
      ```
      [2024-02-23T12:53:55Z INFO  prdoclib::commands::check] Checking directory prdoc
      [2024-02-23T12:53:55Z INFO  prdoclib::commands::check] Using schema: /Users/sebastian/work/repos/polkadot-sdk/prdoc/schema_user.json
      [2024-02-23T12:53:55Z WARN  prdoclib::schema] validation_result: false
      [2024-02-23T12:53:55Z WARN  prdoclib::schema] validation_result_strict: false
      [2024-02-23T12:53:55Z WARN  prdoclib::schema] errors: [
              Required {
                  path: "/title",
              },
          ]
      [2024-02-23T12:53:55Z WARN  prdoclib::schema] missing: []
      [2024-02-23T12:53:55Z ERROR prdoclib::commands::check] Loading the schema failed:
      [2024-02-23T12:53:55Z ERROR prdoclib::commands::check] ValidationErrors(ValidationState { errors: [Required { path: "/title" }], missing: [], replacement: None, evaluated: {"/doc/0/description", "/crates/0/name", "/doc/0", "/crates", "/crates/0", "", "/doc", "/doc/0/audience"} })
      PR #3243 -> ERR
      ```
      64050cf3
    • Ignacio Palacios's avatar
      Fix `DepositReserveAsset` fees payment (#3340) · 11b5354f
      Ignacio Palacios authored
      The `fee` should be calculated with the reanchored asset, otherwise it
      could lead to a failure where the set aside fee ends up not being
      enough.
      
      @acatangiu
      
      
      
      ---------
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      11b5354f
    • Serban Iorga's avatar
      Add support for BHP local and BHK local (#3443) · e4b6b8cd
      Serban Iorga authored
      Related to https://github.com/paritytech/polkadot-sdk/issues/3400
      
      Extracting small parts of
      https://github.com/paritytech/polkadot-sdk/pull/3429 into separate PR:
      
      - Add support for BHP local and BHK local
      - Increase the timeout for the bridge zomienet tests
      e4b6b8cd