1. Nov 06, 2023
  2. Nov 05, 2023
  3. Nov 04, 2023
  4. 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
    • Bastian Köcher's avatar
      `sc-block-builder`: Remove `BlockBuilderProvider` (#2099) · ca5f1056
      Bastian Köcher authored
      The `BlockBuilderProvider` was a trait that was defined in
      `sc-block-builder`. The trait was implemented for `Client`. This
      basically meant that you needed to import `sc-block-builder` any way to
      have access to the block builder. So, this trait was not providing any
      real value. This pull request is removing the said trait. Instead of the
      trait it introduces a builder for creating a `BlockBuilder`. The builder
      currently has the quite fabulous name `BlockBuilderBuilder` (I'm open to
      any better name 😅
      
      ). The rest of the pull request is about
      replacing the old trait with the new builder.
      
      # Downstream code changes
      
      If you used `new_block` or `new_block_at` before you now need to switch
      it over to the new `BlockBuilderBuilder` pattern:
      
      ```rust
      // `new` requires a type that implements `CallApiAt`. 
      let mut block_builder = BlockBuilderBuilder::new(client)
                      // Then you need to specify the hash of the parent block the block will be build on top of
      		.on_parent_block(at)
                      // The block builder also needs the block number of the parent block. 
                      // Here it is fetched from the given `client` using the `HeaderBackend`
                      // However, there also exists `with_parent_block_number` for directly passing the number
      		.fetch_parent_block_number(client)
      		.unwrap()
                      // Enable proof recording if required. This call is optional.
      		.enable_proof_recording()
                      // Pass the digests. This call is optional.
                      .with_inherent_digests(digests)
      		.build()
      		.expect("Creates new block builder");
      ```
      
      ---------
      
      Co-authored-by: default avatarSebastian Kunert <[email protected]>
      Co-authored-by: command-bot <>
      ca5f1056
    • s0me0ne-unkn0wn's avatar
      cd2d5d25
    • juangirini's avatar
      Add deprecation checklist document for Substrate (#1583) · 8cfbee70
      juangirini authored
      fixes https://github.com/paritytech/polkadot-sdk/issues/182
      
      This PR adds a document with recommendations of how deprecations should
      be handled. Initiated within FRAME, this checklist could be extended to
      the rest of the repo.
      
      I want to quote here a comment from @Kianenigma
      
       that summarizes the
      spirit of this new document:
      > I would see it as a guideline of "what an extensive deprecation
      process looks like". As the author of a PR, you should match this
      against your "common sense" and see if it is needed or not. Someone else
      can nudge you to "hey, this is an important PR, you should go through
      the deprecation process".
      > 
      > For some trivial things, all the steps might be an overkill.
      
      ---------
      
      Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
      8cfbee70
    • Dmitry Markin's avatar
    • Dmitry Markin's avatar
      Do not request blocks below the common number when syncing (#2045) · 8dc41ba4
      Dmitry Markin authored
      This changes `BlockCollection` logic so we don't download block ranges
      from peers with which we have these ranges already in sync.
      
      Improves situation with
      https://github.com/paritytech/polkadot-sdk/issues/1915.
      8dc41ba4
    • Anthony Lazam's avatar
      Update Kusama Parachains Bootnode (#2148) · f6f4c5aa
      Anthony Lazam authored
      # Description
      
      Update the bootnode of kusama parachains before decommissioning the
      nodes. This will avoid connecting to non-existing bootnodes.
      f6f4c5aa
    • Alexandru Gheorghe's avatar
      substrate: sysinfo: Expose failed hardware requirements (#2144) · dca14239
      Alexandru Gheorghe authored
      
      
      The check_hardware functions does not give us too much information as to
      what is failing, so let's return the list of failed metrics, so that callers can print 
      it.
      
      This would make debugging easier, rather than try to guess which
      dimension is actually failing.
      
      Signed-off-by: default avatarAlexandru Gheorghe <[email protected]>
      dca14239
    • Javyer's avatar
      skip trigger for review bot on draft PRs (#2145) · e9987401
      Javyer authored
      Added if condition on review-bot's trigger so it does not trigger in
      `draft` PRs.
      e9987401
    • Svyatoslav Nikolsky's avatar
      [testnet] Allow governance to control fees for Rococo <> Westend bridge (#2139) · 0d3c67d9
      Svyatoslav Nikolsky authored
      Right now governance could only control byte-fee component of Rococo <>
      Westend message fees (paid at Asset Hubs). This PR changes it a bit:
      1) governance now allowed to control both fee components - byte fee and
      base fee;
      2) base fee now includes cost of "default" delivery and confirmation
      transactions, in addition to `ExportMessage` instruction cost.
      0d3c67d9
  5. Nov 02, 2023
    • Richard Melkonian's avatar
      Create new trait for non-dedup storage decode (#1932) · 15a34838
      Richard Melkonian authored
      - This adds the new trait `StorageDecodeNonDedupLength` and implements
      them for `BTreeSet` and its bounded types.
      - New unit test has been added to cover the case.  
      - See linked
      [issue](https://github.com/paritytech/polkadot-sdk/issues/126
      
      ) which
      outlines the original issue.
      
      Note that the added trait here doesn't add new logic but improves
      semantics.
      
      ---------
      
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      Co-authored-by: default avatarKian Paimani <[email protected]>
      Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: command-bot <>
      15a34838
    • Oliver Tale-Yazdi's avatar
      Use `Message Queue` as DMP and XCMP dispatch queue (#1246) · e1c033eb
      Oliver Tale-Yazdi authored
      (imported from https://github.com/paritytech/cumulus/pull/2157)
      
      ## Changes
      
      This MR refactores the XCMP, Parachains System and DMP pallets to use
      the [MessageQueue](https://github.com/paritytech/substrate/pull/12485)
      for delayed execution of incoming messages. The DMP pallet is entirely
      replaced by the MQ and thereby removed. This allows for PoV-bounded
      execution and resolves a number of issues that stem from the current
      work-around.
      
      All System Parachains adopt this change.  
      The most important changes are in `primitives/core/src/lib.rs`,
      `parachains/common/src/process_xcm_message.rs`,
      `pallets/parachain-system/src/lib.rs`, `pallets/xcmp-queue/src/lib.rs`
      and the runtime configs.
      
      ### DMP Queue Pallet
      
      The pallet got removed and its logic refactored into parachain-system.
      Overweight message management can be done directly through the MQ
      pallet.
      
      Final undeployment migrations are provided by
      `cumulus_pallet_dmp_queue::UndeployDmpQueue` and `DeleteDmpQueue` that
      can be configured with an aux config trait like:
      
      ```rust
      parameter_types! {
      	pub const DmpQueuePalletName: &'static str = \"DmpQueue\" < CHANGE ME;
      	pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent;
      }
      
      impl cumulus_pallet_dmp_queue::MigrationConfig for Runtime {
      	type PalletName = DmpQueuePalletName;
      	type DmpHandler = frame_support::traits::EnqueueWithOrigin<MessageQueue, RelayOrigin>;
      	type DbWeight = <Runtime as frame_system::Config>::DbWeight;
      }
      
      // And adding them to your Migrations tuple:
      pub type Migrations = (
      	...
      	cumulus_pallet_dmp_queue::UndeployDmpQueue<Runtime>,
      	cumulus_pallet_dmp_queue::DeleteDmpQueue<Runtime>,
      );
      ```
      
      ### XCMP Queue pallet
      
      Removed all dispatch queue functionality. Incoming XCMP messages are now
      either: Immediately handled if they are Signals, enqueued into the MQ
      pallet otherwise.
      
      New config items for the XCMP queue pallet:
      ```rust
      /// The actual queue implementation that retains the messages for later processing.
      type XcmpQueue: EnqueueMessage<ParaId>;
      
      /// How a XCM over HRMP from a sibling parachain should be processed.
      type XcmpProcessor: ProcessMessage<Origin = ParaId>;
      
      /// The maximal number of suspended XCMP channels at the same time.
      #[pallet::constant]
      type MaxInboundSuspended: Get<u32>;
      ```
      
      How to configure those:
      
      ```rust
      // Use the MessageQueue pallet to store messages for later processing. The `TransformOrigin` is needed since
      // the MQ pallet itself operators on `AggregateMessageOrigin` but we want to enqueue `ParaId`s.
      type XcmpQueue = TransformOrigin<MessageQueue, AggregateMessageOrigin, ParaId, ParaIdToSibling>;
      
      // Process XCMP messages from siblings. This is type-safe to only accept `ParaId`s. They will be dispatched
      // with origin `Junction::Sibling(…)`.
      type XcmpProcessor = ProcessFromSibling<
      	ProcessXcmMessage<
      		AggregateMessageOrigin,
      		xcm_executor::XcmExecutor<xcm_config::XcmConfig>,
      		RuntimeCall,
      	>,
      >;
      
      // Not really important what to choose here. Just something larger than the maximal number of channels.
      type MaxInboundSuspended = sp_core::ConstU32<1_000>;
      ```
      
      The `InboundXcmpStatus` storage item was replaced by
      `InboundXcmpSuspended` since it now only tracks inbound queue suspension
      and no message indices anymore.
      
      Now only sends the most recent channel `Signals`, as all prio ones are
      out-dated anyway.
      
      ### Parachain System pallet
      
      For `DMP` messages instead of forwarding them to the `DMP` pallet, it
      now pushes them to the configured `DmpQueue`. The message processing
      which was triggered in `set_validation_data` is now being done by the MQ
      pallet `on_initialize`.
      
      XCMP messages are still handed off to the `XcmpMessageHandler`
      (XCMP-Queue pallet) - no change here.
      
      New config items for the parachain system pallet:
      ```rust
      /// Queues inbound downward messages for delayed processing. 
      ///
      /// Analogous to the `XcmpQueue` of the XCMP queue pallet.
      type DmpQueue: EnqueueMessage<AggregateMessageOrigin>;
      ``` 
      
      How to configure:
      ```rust
      /// Use the MQ pallet to store DMP messages for delayed processing.
      type DmpQueue = MessageQueue;
      ``` 
      
      ## Message Flow
      
      The flow of messages on the parachain side. Messages come in from the
      left via the `Validation Data` and finally end up at the `Xcm Executor`
      on the right.
      
      ![Untitled
      (1)](https://github.com/paritytech/cumulus/assets/10380170/6cf8b377-88c9-4aed-96df-baace266e04d)
      
      ## Further changes
      
      - Bumped the default suspension, drop and resume thresholds in
      `QueueConfigData::default()`.
      - `XcmpQueue::{suspend_xcm_execution, resume_xcm_execution}` errors when
      they would be a noop.
      - Properly validate the `QueueConfigData` before setting it.
      - Marked weight files as auto-generated so they wont auto-expand in the
      MR files view.
      - Move the `hypothetical` asserts to `frame_support` under the name
      `experimental_hypothetically`
      
      Questions:
      - [ ] What about the ugly `#[cfg(feature = \"runtime-benchmarks\")]` in
      the runtimes? Not sure how to best fix. Just having them like this makes
      tests fail that rely on the real message processor when the feature is
      enabled.
      - [ ] Need a good weight for `MessageQueueServiceWeight`. The scheduler
      already takes 80% so I put it to 10% but that is quite low.
      
      TODO:
      - [x] Remove c&p code after
      https://github.com/paritytech/polkadot/pull/6271
      - [x] Use `HandleMessage` once it is public in Substrate
      - [x] fix `runtime-benchmarks` feature
      https://github.com/paritytech/polkadot/pull/6966
      
      
      - [x] Benchmarks
      - [x] Tests
      - [ ] Migrate `InboundXcmpStatus` to `InboundXcmpSuspended`
      - [x] Possibly cleanup Migrations (DMP+XCMP)
      - [x] optional: create `TransformProcessMessageOrigin` in Substrate and
      replace `ProcessFromSibling`
      - [ ] Rerun weights on ref HW
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      Co-authored-by: default avatarKian Paimani <[email protected]>
      Co-authored-by: command-bot <>
      e1c033eb
    • Serban Iorga's avatar
    • yjh's avatar
      impl Clone for `MemoryKeystore` (#2131) · 29b4bd42
      yjh authored
      29b4bd42
    • Piotr Mikołajczyk's avatar
      Make `ExecResult` encodable (#1809) · 10857d0b
      Piotr Mikołajczyk authored
      # Description
      We derive few useful traits on `ErrorOrigin` and `ExecError`, including
      `codec::Encode` and `codec::Decode`, so that `ExecResult` is
      en/decodable as well. This is required for a contract mocking feature
      (already prepared in drink:
      https://github.com/Cardinal-Cryptography/drink/pull/61). In more detail:
      `ExecResult` must be passed from runtime extension, through runtime
      interface, back to the pallet, which requires that it is serializable to
      bytes in some form (or implements some rare, auxiliary traits).
      
      **Impact on runtime size**: Since most of these traits is used directly
      in the pallet now, compiler should be able to throw it out (and thus we
      bring no new overhead). However, they are very useful in secondary tools
      like drink or other testing libraries.
      
      # 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)
      - [x] I have made corresponding changes to the documentation (if
      applicable)
      - [x] I have added tests that prove my fix is effective or that my
      feature works (if applicable)
      10857d0b
    • Branislav Kontur's avatar
    • Davide Galassi's avatar
    • Branislav Kontur's avatar
  6. Nov 01, 2023
    • Branislav Kontur's avatar
      [testnet] Add `AssetHubRococo` <-> `AssetHubWestend` asset bridging support (#1967) · 1b1fab0d
      Branislav Kontur authored
      ## Summary
      
      Asset bridging support for AssetHub**Rococo** <-> AssetHub**Wococo** was
      added [here](https://github.com/paritytech/polkadot-sdk/pull/1215), so
      now we aim to bridge AssetHub**Rococo** and AssetHub**Westend**. (And
      perhaps retire AssetHubWococo and the Wococo chains).
      
      ## Solution
      
      **bridge-hub-westend-runtime**
      - added new runtime as a copy of `bridge-hub-rococo-runtime`
      - added support for bridging to `BridgeHubRococo`
      - added tests and benchmarks
      
      **bridge-hub-rococo-runtime**
      - added support for bridging to `BridgeHubWestend`
      - added tests and benchmarks
      - internal refactoring by splitting bridge configuration per network,
      e.g., `bridge_to_whatevernetwork_config.rs`.
      
      **asset-hub-rococo-runtime**
      - added support for asset bridging to `AssetHubWestend` (allows to
      receive only WNDs)
      - added new xcm router for `Westend`
      - added tests and benchmarks
      
      **asset-hub-westend-runtime**
      - added support for asset bridging to `AssetHubRococo` (allows to
      receive only ROCs)
      - added new xcm router for `Rococo`
      - added tests and benchmarks
      
      ## Deployment
      
      All changes will be deployed as a part of
      https://github.com/paritytech/polkadot-sdk/issues/1988.
      
      ## TODO
      
      - [x] benchmarks for all pallet instances
      - [x] integration tests
      - [x] local run scripts
      
      
      Relates to:
      https://github.com/paritytech/parity-bridges-common/issues/2602
      Relates to: https://github.com/paritytech/polkadot-sdk/issues/1988
      
      
      
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      Co-authored-by: default avatarjoe petrowski <[email protected]>
      1b1fab0d
    • Oliver Tale-Yazdi's avatar
      [FRAME] Short-circuit fungible self transfer (#2118) · c66ae375
      Oliver Tale-Yazdi authored
      
      
      Changes:
      - Change the fungible(s) logic to treat a self-transfer as No-OP (as
      long as all pre-checks pass).
      
      Note that the self-transfer case will not emit an event since no state
      was changed.
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
      c66ae375
    • Julian Eager's avatar
      Build workers for testing on demand (#2018) · 4f05f9a6
      Julian Eager authored
      4f05f9a6
    • Daniel Moos's avatar
      fix substrate-node-template generation (#2050) · 49c0f33b
      Daniel Moos authored
      # Description
      
      This PR updates the node-template-release generation binary as well as
      the `node-template-release.sh` file so that we can automatically push
      updates to the [substrate-node-template
      repository](https://github.com/substrate-developer-hub/substrate-node-template).
      I assume this part was not updated after the substrate project has been
      moved into the polkadot-sdk mono repo.
      
      # Adjustments
      - extend the `node-template-release.sh` to support the substrate
      child-folder
      - update the `SUBSTRATE_GIT_URL`
      - fix the Cargo.toml filter (so that it does not include any
      non-relevant .toml files)
      - set the workspace-edition to 2021
      
      # Note
      In order to auto-generate the artifacts [this
      line](https://github.com/paritytech/polkadot-sdk/blob/master/.gitlab/pipeline/build.yml#L320C15-L320C15
      
      )
      needs to be included in the build.yml script again. Since I do not have
      access to the (probably) internal gitlab environment I hope that someone
      with actual access can introduce that change.
      I also do not know how the auto-publish feature works so that would be
      another thing to add later on.
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      49c0f33b
    • jserrat's avatar
      9987bbb1
    • Kevin Krone's avatar
      Improve FRAME storage docs (#1714) · b6965af4
      Kevin Krone authored
      This is a port (and hopefully a small improvement) of @Kianenigma's PR
      from the old Substrate repo:
      https://github.com/paritytech/substrate/pull/13987. Following #1689 I
      moved the documentation of all macros relevant to this PR from
      `frame_support_procedural` to `pallet_macros` while including a hint for
      RA users.
      
      Question: Again with respect to #1689: Is there a good reason why we
      should *not* enhance paths with links to our current rustdocs? For
      example, instead of
      ```rust
      /// **Rust-Analyzer users**: See the documentation of the Rust item in
      /// `frame_support::pallet_macros::storage`.
      ```
      we could write
      ```rust
      /// **Rust-Analyzer users**: See the documentation of the Rust item in
      /// [`frame_support::pallet_macros::storage`](https://paritytech.github.io/polkadot-sdk/master/frame_support/pallet_macros/attr.storage.html).
      ```
      This results in a clickable link like this:
      <img width="674" alt="image"
      src="https://github.com/paritytech/polkadot-sdk/assets/10713977/c129e622-3942-4eeb-8acf-93ee4efdc99d
      
      ">
      I don't really expect the links to become outdated any time soon, but I
      think this would be a great UX improvement over just having paths.
      
      TODOs:
      - [ ] Add documentation for `constant_name` macro
      - [x] Add proper documentation for different `QueryKinds`, i.e.
      `OptionQuery`, `ValueQuery`, `ResultQuery`. One example for each. Custom
      `OnEmpty` should be moved to `QueryKinds` trait doc page.
      - [ ] Rework `type_value` docs
      
      ---------
      
      Co-authored-by: default avatarkianenigma <[email protected]>
      b6965af4
    • Javyer's avatar
      review-bot: prevent request review of core-devs (#2121) · b2bb8cbc
      Javyer authored
      This will remove `core-devs` from being required reviewers of PRs,
      b2bb8cbc
    • Serban Iorga's avatar
    • Alexander Samusev's avatar
      [ci] Revert CI_IMAGE variable (#2120) · 8507f45c
      Alexander Samusev authored
      CI image has been updated in the shared snippet, reverting the variable
      back.
      8507f45c
    • jserrat's avatar
      remove gum dependency on jaeger (#2106) · 2726d5af
      jserrat authored
      
      
      Co-authored-by: default avatarMarcin S <[email protected]>
      2726d5af
    • Ankan's avatar
      [NPoS] Paging reward payouts in order to scale rewardable nominators (#1189) · 00b85c51
      Ankan authored
      helps https://github.com/paritytech/polkadot-sdk/issues/439.
      closes https://github.com/paritytech/polkadot-sdk/issues/473.
      
      PR link in the older substrate repository:
      https://github.com/paritytech/substrate/pull/13498.
      
      # Context
      Rewards payout is processed today in a single block and limited to
      `MaxNominatorRewardedPerValidator`. This number is currently 512 on both
      Kusama and Polkadot.
      
      This PR tries to scale the nominators payout to an unlimited count in a
      multi-block fashion. Exposures are stored in pages, with each page
      capped to a certain number (`MaxExposurePageSize`). Starting out, this
      number would be the same as `MaxNominatorRewardedPerValidator`, but
      eventually, this number can be lowered through new runtime upgrades to
      limit the rewardeable nominators per dispatched call instruction.
      
      The changes in the PR are backward compatible.
      
      ## How payouts would work like after this change
      Staking exposes two calls, 1) the existing `payout_stakers` and 2)
      `payout_stakers_by_page`.
      
      ### payout_stakers
      This remains backward compatible with no signature change. If for a
      given era a validator has multiple pages, they can call `payout_stakers`
      multiple times. The pages are executed in an ascending sequence and the
      runtime takes care of preventing double claims.
      
      ### payout_stakers_by_page
      Very similar to `payout_stakers` but also accepts an extra param
      `page_index`. An account can choose to payout rewards only for an
      explicitly passed `page_index`.
      
      **Lets look at an example scenario**
      Given an active validator on Kusama had 1100 nominators,
      `MaxExposurePageSize` set to 512 for Era e. In order to pay out rewards
      to all nominators, the caller would need to call `payout_stakers` 3
      times.
      
      - `payout_stakers(origin, stash, e)` => will pay the first 512
      nominators.
      - `payout_stakers(origin, stash, e)` => will pay the second set of 512
      nominators.
      - `payout_stakers(origin, stash, e)` => will pay the last set of 76
      nominators.
      ...
      - `payout_stakers(origin, stash, e)` => calling it the 4th time would
      return an error `InvalidPage`.
      
      The above calls can also be replaced by `payout_stakers_by_page` and
      passing a `page_index` explicitly.
      
      ## Commission note
      Validator commission is paid out in chunks across all the pages where
      each commission chunk is proportional to the total stake of the current
      page. This implies higher the total stake of a page, higher will be the
      commission. If all the pages of a validator's single era are paid out,
      the sum of commission paid to the validator across all pages should be
      equal to what the commission would have been if we had a non-paged
      exposure.
      
      ### Migration Note
      Strictly speaking, we did not need to bump our storage version since
      there is no migration of storage in this PR. But it is still useful to
      mark a storage upgrade for the following reasons:
      
      - New storage items are introduced in this PR while some older storage
      items are deprecated.
      - For the next `HistoryDepth` eras, the exposure would be incrementally
      migrated to its corresponding paged storage item.
      - Runtimes using staking pallet would strictly need to wait at least
      `HistoryDepth` eras with current upgraded version (14) for the migration
      to complete. At some era `E` such that `E >
      era_at_which_V14_gets_into_effect + HistoryDepth`, we will upgrade to
      version X which will remove the deprecated storage items.
      In other words, it is a strict requirement that E<sub>x</sub> -
      E<sub>14</sub> > `HistoryDepth`, where
      E<sub>x</sub> = Era at which deprecated storages are removed from
      runtime,
      E<sub>14</sub> = Era at which runtime is upgraded to version 14.
      - For Polkadot and Kusama, there is a [tracker
      ticket](https://github.com/paritytech/polkadot-sdk/issues/433) to clean
      up the deprecated storage items.
      
      ### Storage Changes
      
      #### Added
      - ErasStakersOverview
      - ClaimedRewards
      - ErasStakersPaged
      
      #### Deprecated
      The following can be cleaned up after 84 eras which is tracked
      [here](https://github.com/paritytech/polkadot-sdk/issues/433).
      
      - ErasStakers.
      - ErasStakersClipped.
      - StakingLedger.claimed_rewards, renamed to
      StakingLedger.legacy_claimed_rewards.
      
      ### Config Changes
      - Renamed MaxNominatorRewardedPerValidator to MaxExposurePageSize.
      
      ### TODO
      - [x] Tracker ticket for cleaning up the old code after 84 eras.
      - [x] Add companion.
      - [x] Redo benchmarks before merge.
      - [x] Add Changelog for pallet_staking.
      - [x] Pallet should be configurable to enable/disable paged rewards.
      - [x] Commission payouts are distributed across pages.
      - [x] Review documentation thoroughly.
      - [x] Rename `MaxNominatorRewardedPerValidator` ->
      `MaxExposurePageSize`.
      - [x] NMap for `ErasStakersPaged`.
      - [x] Deprecate ErasStakers.
      - [x] Integrity tests.
      
      ### Followup issues
      [Runtime api for deprecated ErasStakers storage
      item](https://github.com/paritytech/polkadot-sdk/issues/426
      
      )
      
      ---------
      
      Co-authored-by: default avatarJavier Viola <[email protected]>
      Co-authored-by: default avatarRoss Bulat <[email protected]>
      Co-authored-by: command-bot <>
      00b85c51
    • Alexander Samusev's avatar