Skip to content
  1. Mar 03, 2024
  2. Mar 02, 2024
    • gupnik's avatar
      Remove `as frame_system::DefaultConfig` from the required syntax in `derive_impl` (#3505) · cdc8d197
      gupnik authored
      Step in https://github.com/paritytech/polkadot-sdk/issues/171
      
      This PR removes the need to specify `as [disambiguation_path]` for cases
      where the trait definition resides within the same scope as default impl
      path.
      
      For example, in the following macro invocation
      ```rust
      #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)]
      impl frame_system::Config for Runtime {
         ...
      }
      ```
      the trait `DefaultConfig` lies within the `frame_system` scope and
      `TestDefaultConfig` impls the `DefaultConfig` trait. Using this
      information, we can compute the disambiguation path internally, thus
      removing the need of an explicit specification.
      
      In cases where the trait lies outside this scope, we would still need to
      specify it explicitly, but this should take care of most (if not all)
      uses of `derive_impl` within FRAME's context.
      cdc8d197
  3. Mar 01, 2024
  4. Feb 29, 2024
    • Kian Paimani's avatar
      Fix call enum's metadata regression (#3513) · c0e52a9e
      Kian Paimani authored
      This fixes an issue introduced in
      https://github.com/paritytech/substrate/pull/14101, in which I removed
      the `Call` enum's documentation and replaced it with a link to the
      `Pallet` struct, but this also removed any docs related to call from the
      metadata.
      
      I tried to add a regression test for this, but it seems to me that this
      is not possible, given that using `type-info` we only assert in type-ids
      for `Call`, `Event` and `Error`. I removed some doc comments from a test
      setup in `frame-support-test` to demonstrate the issue there. @jsdw do
      you have any comments on this?
      
      I also fixed a small issue in the custom html/css of `polkadot-sdk-doc`
      crate, making sure it does not affect the rust-doc page of all other
      crates.
      
      - [x] Investigate a regression test
      - [x] prdoc
      c0e52a9e
    • philoniare's avatar
      [Deprecation] Remove sp_weights::OldWeight (#3491) · a22319cd
      philoniare authored
      
      
      # Description
      
      *Removes `sp_weights::OldWeight` and its usage*
      
      Fixes #144
      
      ---------
      
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      a22319cd
  5. 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
    • 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
    • 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
  6. Feb 27, 2024
    • 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
  7. 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
    • 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
  8. 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
  9. Feb 23, 2024
    • 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
  10. Feb 22, 2024
    • Adrian Catangiu's avatar
      sc-consensus-beefy: pump gossip engine while waiting for initialization conditions (#3435) · 31546c8d
      Adrian Catangiu authored
      
      
      As part of BEEFY worker/voter initialization the task waits for certain
      chain and backend conditions to be fulfilled:
      - BEEFY consensus enabled on-chain & GRANDPA best finalized higher than
      on-chain BEEFY genesis block,
      - backend has synced headers for BEEFY mandatory blocks between best
      BEEFY and best GRANDPA.
      
      During this waiting time, any messages gossiped on the BEEFY topic for
      current chain get enqueued in the gossip engine, leading to RAM bloating
      and output warning/error messages when the wait time is non-negligible
      (like during a clean sync).
      
      This PR adds logic to pump the gossip engine while waiting for other
      things to make sure gossiped messages get consumed (practically
      discarded until worker is fully initialized).
      
      Also raises the warning threshold for enqueued messages from 10k to
      100k. This is in line with the other gossip protocols on the node.
      
      Fixes https://github.com/paritytech/polkadot-sdk/issues/3390
      
      ---------
      
      Signed-off-by: default avatarAdrian Catangiu <[email protected]>
      31546c8d
    • Koute's avatar
      Fix `wasm-builder` not exiting if compilation fails (#3439) · 82208280
      Koute authored
      This PR fixes a subtle bug in `wasm-builder` first introduced in
      https://github.com/paritytech/polkadot-sdk/pull/1851 (sorry, my bad! I
      should have caught this during review) where the status code of the
      `cargo` subprocess is not properly checked, which results in builds
      silently succeeding when they shouldn't (that is: if we successfully
      build a runtime blob, and then modify the code so that it won't compile,
      and recompile it again, then the build will succeed and silently use the
      *old* blob).
      
      cc @athei This is the bug you were seeing.
      
      [edit]Also fixes a similar PolkaVM-specific bug where I accidentally
      used the wrong comparison operator.[/edit]
      82208280
    • Oliver Tale-Yazdi's avatar
      [FRAME] Test for sane genesis default (#3412) · e76b2448
      Oliver Tale-Yazdi authored
      
      
      Closes https://github.com/paritytech/polkadot-sdk/issues/2713
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarAndré Silva <[email protected]>
      e76b2448
  11. Feb 21, 2024
    • Matteo Muraca's avatar
      cd91c6b7
    • tmpolaczyk's avatar
      ProposerFactory impl Clone (#3389) · 318fed32
      tmpolaczyk authored
      In Tanssi, we need a way to stop the collator code and then start it
      again. This is to support rotating the same collator between different
      runtimes. Currently, this works very well, except for the proposer
      metrics, because they only get registered the first time they are
      started. Afterwards, we see this warning log:
      
      > Failed to register proposer prometheus metrics: Duplicate metrics
      collector registration attempted
      
      
      ~~So this PR adds a method to set metrics, to allow us to register
      metrics manually before creating the `ProposerFactory`, and then clone
      the same metrics every time we need to start the collator.~~ Implemented
      Clone instead
      318fed32
    • Alexandru Vasile's avatar
      rpc-v2/tx: Remove the broadcast event from `transaction_submitAndWatch` (#3321) · 1b624c50
      Alexandru Vasile authored
      
      
      This PR backports the changes from the rpc-v2 spec:
      https://github.com/paritytech/json-rpc-interface-spec/pull/134
      
      The `Broadcasted` event has been removed:
      - it is hard to enforce a `Dropped { broadcasted: bool }` event in cases
      of a load-balancer being placed in front of an RPC server
      - when the server exists, it is impossible to guarantee this field if
      the server did not previously send a `Broadcasted` event
      - the number of peers reported by this event does not guarantee that
      peers are unique
      - the same peer can disconnect and reconnect, increasing this metric
      number
      - the number of peers that receive this transaction offers no guarantee
      about the transaction being included in the chain at a later time
      
      
      cc @paritytech/subxt-team
      
      ---------
      
      Signed-off-by: default avatarAlexandru Vasile <[email protected]>
      Co-authored-by: default avatarJames Wilson <[email protected]>
      1b624c50
    • Dastan's avatar
      benchmarking-cli: add --list-pallets and --all options (#3395) · 165d075a
      Dastan authored
      
      
      closes #2844 
      
      - adds `list-pallets` option which prints all unique available pallets
      for benchmarking
      ```bash
      ./target/release/node benchmark pallet --list=pallets
      ```
      - adds `all` option which runs benchmarks for all available pallets and
      extrinsics (equivalent to `--pallet * --extrinsic *`)
      ```bash
      ./target/release/node benchmark pallet --all
      ```
      
      - use the `list=pallets` syntax in `run_all_benchmarks.sh` script
      
      cc ggwpez
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      165d075a
    • Adrian Catangiu's avatar
      sc-consensus-beefy: reduce log levels (#3418) · cbeccad6
      Adrian Catangiu authored
      fixes https://github.com/paritytech/polkadot-sdk/issues/3407
      cbeccad6
    • Alexander Theißen's avatar
      contracts: Fix double charge of gas for host functions (#3361) · f3a6b6dc
      Alexander Theißen authored
      
      
      This PR is fixing a bug in the sync mechanism between wasmi and
      pallet-contracts. This bug leads to essentially double charging all the
      gas that was used during the execution of the host function. When the
      `call` host function is used for recursion this will lead to a quadratic
      amount of gas consumption with regard to the nesting depth.We also took
      the chance to refactor the code in question and improve the rust docs.
      
      The bug was caused by not updating `GasMeter::executor_consumed`
      (previously `engine_consumed`) when leaving the host function. This lead
      to the value being stale (too low) when entering another host function.
      
      ---------
      
      Co-authored-by: default avatarPG Herveou <[email protected]>
      f3a6b6dc
  12. Feb 20, 2024
    • Branislav Kontur's avatar
      b77b3a2d
    • Niklas Adolfsson's avatar
      rpc server: make possible to disable/enable batch requests (#3364) · fee810a5
      Niklas Adolfsson authored
      The rationale behind this, is that it may be useful for some users
      actually disable RPC batch requests or limit them by length instead of
      the total size bytes of the batch.
      
      This PR adds two new CLI options:
      
      ```
      --rpc-disable-batch-requests - disable batch requests on the server
      --rpc-max-batch-request-len <LEN> - limit batches to LEN on the server.
      ```
      fee810a5
    • PG Herveou's avatar
      Contracts: Stabilize APIs (#3384) · d250a6e4
      PG Herveou authored
      Remove `#[unstable]` on `call_v2`, `instantiate_v2`,
      `lock_delegate_dependency` and `unlock_delegate_dependency`.
      See ink! integrations: 
      - call_v2: https://github.com/paritytech/ink/pull/2077
      - instantiate_v2: <TODO>
      - lock/unlock dependency: https://github.com/paritytech/ink/pull/2076
      d250a6e4
    • Oliver Tale-Yazdi's avatar
      Lift dependencies to the workspace (Part 2/x) (#3366) · e89d0fca
      Oliver Tale-Yazdi authored
      
      
      Lifting some more dependencies to the workspace. Just using the
      most-often updated ones for now.
      It can be reproduced locally.
      
      ```sh
      # First you can check if there would be semver incompatible bumps (looks good in this case):
      $ zepter transpose dependency lift-to-workspace --ignore-errors syn quote thiserror "regex:^serde.*"
      
      # Then apply the changes:
      $ zepter transpose dependency lift-to-workspace --version-resolver=highest syn quote thiserror "regex:^serde.*" --fix
      
      # And format the changes:
      $ taplo format --config .config/taplo.toml
      ```
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      e89d0fca
    • girazoki's avatar
      implement ConversionToAssetBalance in asset-rate (#2903) · 5f8b6f38
      girazoki authored
      Implements the `ConversionToAssetBalance` trait to asset-rate by doing
      `1/rate*(balance)`.
      5f8b6f38
  13. Feb 19, 2024
    • PG Herveou's avatar
      Contracts: xcm host fn fixes (#3086) · ca382f32
      PG Herveou authored
      ## Xcm changes:
      - Fix `pallet_xcm::execute`, move the logic into The `ExecuteController`
      so it can be shared with anything that implement that trait.
      - Make `ExecuteController::execute` retursn `DispatchErrorWithPostInfo`
      instead of `DispatchError`, so that we don't charge the full
      `max_weight` provided if the execution is incomplete (useful for
      force_batch or contracts calls)
      - Fix docstring for `pallet_xcm::execute`, to reflect the changes from
      #2405
      - Update the signature for `ExecuteController::execute`, we don't need
      to return the `Outcome` anymore since we only care about
      `Outcome::Complete`
      
      ## Contracts changes:
      
      - Update host fn `xcm_exexute`, we don't need to write the `Outcome` to
      the sandbox memory anymore. This was also not charged as well before so
      it if fixes this too.
      - One of the issue was that the dry_run of a contract that call
      `xcm_execute` would exhaust the `gas_limit`.
      
      This is because `XcmExecuteController::execute` takes a `max_weight`
      argument, and since we don't want the user to specify it manually we
      were passing everything left by pre-charghing
      `ctx.ext.gas_meter().gas_left()`
      
      - To fix it I added a `fn influence_lowest_limit` on the `Token` trait
      and make it return false for `RuntimeCost::XcmExecute`.
      - Got rid of the `RuntimeToken` indirection, we can just use
      `RuntimeCost` directly.
      
      ---------
      
      Co-authored-by: command-bot <>
      ca382f32
    • Matteo Muraca's avatar
      435e3392
    • Gilt0's avatar
      [FRAME Core] remove unnecessary overrides while using derive_impl for frame_system (#3317) · b78c72cf
      Gilt0 authored
      
      
      # Description
      
      This PR removes redundant type definition from test definition config
      implementations like
      ```
      #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)]
      impl frame_system::Config for Test {
          type A = A;
          ...
      }
      ```
      
      This changes avoid redundancies in the code as the macro `derive_impl`
      defines the relevant types. To implement the changes, it was a simple
      fact of running tests and making sure that the tests would still run
      while the definition would be removed.
      
      Closes #3237
      
      As a note, here is a brief account of things done from the Issue's
      description statement
      ```
      alliance migrate alliance, fast-unstake and bags list to use derive-impl #1636
      asset-conversion                                                                                            DONE
      asset-rate                                                                                                  DONE
      assets                                                                                                      DONE
      atomic-swap                                                                                                 DONE
      aura                                                                                                        DONE
      authority-discovery                                                                                         DONE                                                                     
      authorship  migrate babe and authorship to use derive-impl #1790
      babe  migrate babe and authorship to use derive-impl #1790
      bags-list migrate alliance, fast-unstake and bags list to use derive-impl #1636
      balances                                                                                                    DONE
      beefy                                                                                                       NOTHING TO DO --- also noted this error without failing tests Feb 13 13:49:08.941 ERROR runtime::timestamp: `pallet_timestamp::UnixTime::now` is called at genesis, invalid value returned: 0
      beefy-mmr                                                                                                   NOTHING TO DO
      bounties                                                                                                    DONE
      child-bounties                                                                                              DONE
      collective                                                                                                  DONE
      contracts                                                                                                   DONE
      conviction-voting                                                                                           DONE
      core-fellowship                                                                                             NOTHING TO DO
      democracy                                                                                                   DONE
      election-provider-multi-phase                                                                               NOTHING TO DO
      elections-phragmen                                                                                          DONE
      executive                                                                                                   NOTHING TO DO
      fast-unstake migrate alliance, fast-unstake and bags list to use derive-impl #1636
      glutton                                                                                                     DONE
      grandpa                                                                                                     DONE
      identity                                                                                                    DONE
      im-online                                                                                                   NOTHING TO DO
      indices Refactor indices pallet #1789
      insecure-randomness-collective-flip                                                                         DONE
      lottery                                                                                                     DONE
      membership                                                                                                  DONE
      merkle-mountain-range                                                                                       NOTHING TO DO
      message-queue                                                                                               DONE
      multisig add frame_system::DefaultConfig to individual pallet DefaultConfigs substrate#14453
      nft-fractionalization                                                                                       DONE
      nfts                                                                                                        DONE
      nicks Refactor pallet-state-trie-migration to fungible::* traits #1801                                      NOT IN REPO
      nis                                                                                                         DONE
      node-authorization                                                                                          DONE
      nomination-pools                                                                                            NOTHING TO DO -- ONLY impl for Runtime
      offences                                                                                                    DELETED EVERYTHING -- IS THAT CORRECT??
      preimage                                                                                                    DONE
      proxy add frame_system::DefaultConfig to individual pallet DefaultConfigs substrate#14453
      ranked-collective                                                                                           NOTHING TO DO
      recovery                                                                                                    DONE
      referenda                                                                                                   DONE
      remark                                                                                                      DONE
      root-offences                                                                                               DONE
      root-testing                                                                                                NOTHING TO DO
      salary                                                                                                      NOTHING TO DO
      scheduler                                                                                                   DONE
      scored-pool                                                                                                 DONE
      session                                                                                                     DONE -- substrate/frame/session/benchmarking/src/mock.rs untouched
      society                                                                                                     NOTHING TO DO
      staking                                                                                                     DONE
      staking-bags-benchmarks                                                                                     NOT IN REPO
      state-trie-migration                                                                                        NOTHING TO DO
      statement                                                                                                   DONE
      sudo                                                                                                        DONE
      system                                                                                                      DONE
      timestamp                                                                                                   DONE
      tips                                                                                                        DONE
      transaction-payment                                                                                         NOTHING TO DO
      transaction-storage                                                                                         NOTHING TO DO
      treasury                                                                                                    DONE
      try-runtime                                                                                                 NOTHING TO DO -- no specific mention of 'for Test'
      uniques                                                                                                     DONE
      utility                                                                                                     DONE
      vesting                                                                                                     DONE
      whitelist                                                                                                   DONE
      ```
      
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatargupnik <[email protected]>
      b78c72cf
    • s0me0ne-unkn0wn's avatar
      `im-online` removal cleanup: remove off-chain storage (#2290) · a5492dc6
      s0me0ne-unkn0wn authored
      
      
      This is a follow-up for `im-online` pallet removal that is cleaning up
      its off-chain storage. Must be merged no earlier than #2265 is enacted.
      Related: #1964
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      a5492dc6
    • dependabot[bot]'s avatar
      Bump the known_good_semver group with 1 update (#3379) · 3168ed4d
      dependabot[bot] authored
      
      
      Bumps the known_good_semver group with 1 update:
      [clap](https://github.com/clap-rs/clap).
      
      Updates `clap` from 4.5.0 to 4.5.1
      <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.5.1</h2>
      <h2>[4.5.1] - 2024-02-16</h2>
      <h3>Fixes</h3>
      <ul>
      <li><em>(error)</em> Include suggestion to add <code>--</code> even if
      there is a &quot;did you mean&quot; so long as <code>last</code> or
      <code>trailing_var_arg</code> is used</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.5.1] - 2024-02-16</h2>
      <h3>Fixes</h3>
      <ul>
      <li><em>(error)</em> Include suggestion to add <code>--</code> even if
      there is a &quot;did you mean&quot; so long as <code>last</code> or
      <code>trailing_var_arg</code> is used</li>
      </ul>
      </blockquote>
      </details>
      <details>
      <summary>Commits</summary>
      <ul>
      <li><a
      href="https://github.com/clap-rs/clap/commit/0c01b5558de0a1a513a2af429981099e550d1a78"><code>0c01b55</code></a>
      chore: Release</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/08e0b5bde4b45567be98d12e7d394762fa8da6a4"><code>08e0b5b</code></a>
      docs: Update changelog</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/f2c4e6ec740cce29cea3fd7232e4d2716f089fc2"><code>f2c4e6e</code></a>
      Merge pull request <a
      href="https://redirect.github.com/clap-rs/clap/issues/5359">#5359</a>
      from poliorcetics/ab/push-szymvyzpmnqx</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/e782775229081697e47d340a155d6b087eeb46f8"><code>e782775</code></a>
      fix(complete): Handle newlines in command/arg descriptions</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/fba7c8597bf3028400d6f6a22d83cedb7a2bd5a5"><code>fba7c85</code></a>
      test(complete): Show newline issue</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/8a7a13a5618cfdc4ff328624a5266e7b4d88649a"><code>8a7a13a</code></a>
      chore: Release</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/7b3a3e1e5eee57fc37110343b980cbe8170d20ad"><code>7b3a3e1</code></a>
      docs: Update changelog</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/7b624ca74336f6f14f01007b9039990d53acda0f"><code>7b624ca</code></a>
      Merge pull request <a
      href="https://redirect.github.com/clap-rs/clap/issues/5356">#5356</a>
      from epage/escape</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/446328a8d3cdaac28884bf8fdfcc85f35c8b5134"><code>446328a</code></a>
      fix(error): Include -- in more cases</li>
      <li><a
      href="https://github.com/clap-rs/clap/commit/7de6df878238ca8e3d9723bb9650f7fe9470d8bd"><code>7de6df8</code></a>
      test(error): Show existing last behavior</li>
      <li>Additional commits viewable in <a
      href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.0...clap_complete-v4.5.1">compare
      view</a></li>
      </ul>
      </details>
      <br />
      
      
      [![Dependabot compatibility
      score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.0&new-version=4.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
      
      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>
      3168ed4d
  14. Feb 18, 2024