Skip to content
Snippets Groups Projects
  1. Aug 05, 2024
  2. Jul 25, 2024
  3. Jul 23, 2024
    • Alexandru Vasile's avatar
      network/metrics: Expose number of banned peers from peerstore and enable litep2p metrics (#4977) · 7f905e28
      Alexandru Vasile authored
      
      This PR extends the metrics exposed by the peerstore with the total
      number of banned peers.
      
      The new metric is exposed under
      `substrate_sub_libp2p_peerset_num_banned_peers`.
      
      To easily extend metrics in the future, the `fn num_known_peers` is
      removed in favor of `fn status`.
      
      While at it, enable the metrics for litep2p:
      - total number of peers from peerstore (needed to debug memory
      consumption)
      - total number of banned peers from peerstore (needed to debug
      reputation bans and disconnects)
      
      Have added a couple of tests to validate that the number of banned peers
      is exposed properly.
      
      Part of: https://github.com/paritytech/polkadot-sdk/issues/4681
      
      
      ### Testing Done
      Using [subp2p-explorer](https://github.com/lexnv/subp2p-explorer) have
      submitted random data on tx protocol.
      The peer gets banned, the num of banned peers is incremented then the
      peer is disconnected.
      
      cc @paritytech/networking
      
      ---------
      
      Signed-off-by: default avatarAlexandru Vasile <alexandru.vasile@parity.io>
      Co-authored-by: default avatarDmitry Markin <dmitry@markin.tech>
  4. Jul 15, 2024
    • Jun Jiang's avatar
      Remove most all usage of `sp-std` (#5010) · 7ecf3f75
      Jun Jiang authored
      
      This should remove nearly all usage of `sp-std` except:
      - bridge and bridge-hubs
      - a few of frames re-export `sp-std`, keep them for now
      - there is a usage of `sp_std::Writer`, I don't have an idea how to move
      it
      
      Please review proc-macro carefully. I'm not sure I'm doing it the right
      way.
      
      Note: need `/bot fmt`
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
      Co-authored-by: command-bot <>
  5. Jul 11, 2024
  6. Jul 10, 2024
  7. Jul 09, 2024
  8. Jul 05, 2024
    • Sebastian Kunert's avatar
      Introduce basic slot-based collator (#4097) · e44f61af
      Sebastian Kunert authored
      
      Part of #3168 
      On top of #3568
      
      ### Changes Overview
      - Introduces a new collator variant in
      `cumulus/client/consensus/aura/src/collators/slot_based/mod.rs`
      - Two tasks are part of that module, one for block building and one for
      collation building and submission.
      - Introduces a new variant of `cumulus-test-runtime` which has 2s slot
      duration, used for zombienet testing
      - Zombienet tests for the new collator
      
      **Note:** This collator is considered experimental and should only be
      used for testing and exploration for now.
      
      ### Comparison with `lookahead` collator
      - The new variant is slot based, meaning it waits for the next slot of
      the parachain, then starts authoring
      - The search for potential parents remains mostly unchanged from
      lookahead
      - As anchor, we use the current best relay parent
      - In general, the new collator tends to be anchored to one relay parent
      earlier. `lookahead` generally waits for a new relay block to arrive
      before it attempts to build a block. This means the actual timing of
      parachain blocks depends on when the relay block has been authored and
      imported. With the slot-triggered approach we are authoring directly on
      the slot boundary, were a new relay chain block has probably not yet
      arrived.
      
      ### Limitations
      - Overall, the current implementation focuses on the "happy path"
      - We assume that we want to collate close to the tip of the relay chain.
      It would be useful however to have some kind of configurable drift, so
      that we could lag behind a bit.
      https://github.com/paritytech/polkadot-sdk/issues/3965
      - The collation task is pretty dumb currently. It checks if we have
      cores scheduled and if yes, submits all the messages we have received
      from the block builder until we have something submitted for every core.
      Ideally we should do some extra checks, i.e. we do not need to submit if
      the built block is already too old (build on a out of range relay
      parent) or was authored with a relay parent that is not an ancestor of
      the relay block we are submitting at.
      https://github.com/paritytech/polkadot-sdk/issues/3966
      - There is no throttling, we assume that we can submit _velocity_ blocks
      every relay chain block. There should be communication between the
      collator task and block-builder task.
      - The parent search and ConsensusHook are not yet properly adjusted. The
      parent search makes assumptions about the pending candidate which no
      longer hold. https://github.com/paritytech/polkadot-sdk/issues/3967
      - Custom triggers for block building not implemented.
      
      ---------
      
      Co-authored-by: default avatarDavide Galassi <davxy@datawok.net>
      Co-authored-by: default avatarAndrei Sandu <54316454+sandreim@users.noreply.github.com>
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
      Co-authored-by: default avatarJavier Viola <363911+pepoviola@users.noreply.github.com>
      Co-authored-by: command-bot <>
  9. Jul 03, 2024
  10. Jul 01, 2024
  11. Jun 28, 2024
  12. Jun 25, 2024
    • gupnik's avatar
      Use real rust type for pallet alias in `runtime` macro (#4769) · 2f3a1bf8
      gupnik authored
      Fixes https://github.com/paritytech/polkadot-sdk/issues/4723. Also,
      closes https://github.com/paritytech/polkadot-sdk/issues/4622
      
      As stated in the linked issue, this PR adds the ability to use a real
      rust type for pallet alias in the new `runtime` macro:
      ```rust
      #[runtime::pallet_index(0)]
      pub type System = frame_system::Pallet<Runtime>;
      ```
      
      Please note that the current syntax still continues to be supported.
      
      CC: @shawntabrizi @Kianenigma
      
      
      
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
  13. Jun 24, 2024
    • Oliver Tale-Yazdi's avatar
      Lift all dependencies (the big one) (#4716) · 8efa0544
      Oliver Tale-Yazdi authored
      
      After preparing in https://github.com/paritytech/polkadot-sdk/pull/4633,
      we can lift also all internal dependencies up to the workspace.
      
      This does not actually change anything, but uses `workspace = true` for
      all dependencies. You can check it with:
      ```bash
      git checkout -q $(git merge-base oty-lift-all-deps origin/master)
      cargo tree -e features > master.out
      
      git checkout -q oty-lift-all-deps
      cargo tree -e features > new.out
      diff master.out new.out
      ```
      
      It did not yet lift 100% of dependencies, some inside of `target.*` or
      some that had conflicting aliases introduced recently. But i will do
      these together in a follow-up with CI checks.
      
      Can be reproduced with [zepter](https://github.com/ggwpez/zepter/):
      `zepter transpose d lift-to-workspace "regex:.*" --version-resolver
      highest --skip-package "polkadot-sdk" --ignore-errors --fix`.
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
  14. Jun 18, 2024
  15. Jun 13, 2024
    • Branislav Kontur's avatar
      Use aggregated types for `RuntimeFreezeReason` and better examples of `MaxFreezes` (#4615) · 988103d7
      Branislav Kontur authored
      This PR aligns the settings for `MaxFreezes`, `RuntimeFreezeReason`, and
      `FreezeIdentifier`.
      
      #### Future work and improvements
      https://github.com/paritytech/polkadot-sdk/issues/2997 (remove
      `MaxFreezes` and `FreezeIdentifier`)
    • Kian Paimani's avatar
      Update the pallet guide in `sdk-docs` (#4735) · eca1052e
      Kian Paimani authored
      After using this tutorial in PBA, there was a few areas to improve it.
      Moreover, I have:
      
      - Improve `your_first_pallet`, link it in README, improve the parent
      `guide` section.
      - Updated the templates page, in light of recent efforts related to in
      https://github.com/paritytech/polkadot-sdk/issues/3155
      - Added small ref docs about metadata, completed the one about native
      runtime, added one about host functions.
      - Remove a lot of unfinished stuff from sdk-docs
      - update diagram for `Hooks`
  16. Jun 10, 2024
    • Przemek Rzad's avatar
      Revamp the Readme of the parachain template (#4713) · 497d64ef
      Przemek Rzad authored
      - Addresses
      [this](https://github.com/paritytech/polkadot-sdk/issues/3155#issuecomment-2126934939).
      - Revamps the Readme, very similar to [the minimal
      template](https://github.com/paritytech/polkadot-sdk/pull/4649).
      - Changed `polkadot-launch` to `zombienet`, with instructions how to run
      it.
      - See the [rendered
      version](https://github.com/paritytech/polkadot-sdk/blob/rzadp/parachain-template-readme/templates/parachain/README.md).
  17. Jun 07, 2024
  18. Jun 05, 2024
    • Oliver Tale-Yazdi's avatar
      Unify dependency aliases (#4633) · d2fd5364
      Oliver Tale-Yazdi authored
      Inherited workspace dependencies cannot be renamed by the crate using
      them (see [1](https://github.com/rust-lang/cargo/issues/12546),
      [2](https://stackoverflow.com/questions/76792343/can-inherited-dependencies-in-rust-be-aliased-in-the-cargo-toml-file)).
      Since we want to use inherited workspace dependencies everywhere, we
      first need to unify all aliases that we use for a dependency throughout
      the workspace.
      The umbrella crate is currently excluded from this procedure, since it
      should be able to export the crates by their original name without much
      hassle.
      
      For example: one crate may alias `parity-scale-codec` to `codec`, while
      another crate does not alias it at all. After this change, all crates
      have to use `codec` as name. The problematic combinations were:
      - conflicting aliases: most crates aliases as `A` but some use `B`.
      - missing alias: most of the crates alias a dep but some dont.
      - superfluous alias: most crates dont alias a dep but some do.
      
      The script that i used ...
  19. Jun 04, 2024
  20. Jun 03, 2024
    • Przemek Rzad's avatar
      Add Dockerfiles to the templates (#4637) · 6ede7a05
      Przemek Rzad authored
      As requested
      [here](https://github.com/paritytech/polkadot-sdk/issues/3155#issuecomment-2126934939).
      
      The Dockerfiles are inspired by [this
      one](https://github.com/paritytech/polkadot-sdk/blob/aa32faae/docker/dockerfiles/polkadot/polkadot_builder.Dockerfile).
    • Przemek Rzad's avatar
      Revamp the Readme of the minimal template (#4649) · dfb01aaa
      Przemek Rzad authored
      
      - Addresses
      [this](https://github.com/paritytech/polkadot-sdk/issues/3155#issuecomment-2126934939).
      - Technical content got adopted from the existing [solochain
      readme](https://github.com/paritytech/polkadot-sdk/tree/master/templates/solochain).
        - Updated some broken links there.
      - The docker instructions will work after
      https://github.com/paritytech/polkadot-sdk/pull/4637.
      - See the [rendered
      version](https://github.com/paritytech/polkadot-sdk/blob/rzadp/minimal-template-readme/templates/minimal/README.md).
      
      ---------
      
      Co-authored-by: default avatargupnik <nikhilgupta.iitk@gmail.com>
  21. May 31, 2024
  22. May 28, 2024
    • Przemek Rzad's avatar
      Remove workspace lints from templates (#4598) · 09f07d54
      Przemek Rzad authored
      This detaches the templates from monorepo's workspace lints, so the
      lints for the templates can evolve separately as needed.
      
      Currently the templates [re-use the monorepo's
      lints](https://github.com/paritytech/polkadot-sdk-minimal-template/blob/bd8afe66ec566d61f36b0e3d731145741a9e9e19/Cargo.toml#L16-L43)
      which looks weird.
      
      cc @Kianenigma @gupnik
  23. May 27, 2024
    • Michal Kucharczyk's avatar
      `sc-chain-spec`: deprecated code removed (#4410) · 2d3a6932
      Michal Kucharczyk authored
      This PR removes deprecated code:
      - The `RuntimeGenesisConfig` generic type parameter in
      `GenericChainSpec` struct.
      - `ChainSpec::from_genesis` method allowing to create chain-spec using
      closure providing runtime genesis struct
      - `GenesisSource::Factory` variant together with no longer needed
      `GenesisSource`'s generic parameter `G` (which was intended to be a
      runtime genesis struct).
      
      
      https://github.com/paritytech/polkadot-sdk/blob/17b56fae/substrate/client/chain-spec/src/chain_spec.rs#L559-L563
  24. May 24, 2024
    • Branislav Kontur's avatar
      Attempt to avoid specifying `BlockHashCount` for different... · ef144b1a
      Branislav Kontur authored
      Attempt to avoid specifying `BlockHashCount` for different `mocking::{MockBlock, MockBlockU32, MockBlockU128}` (#4543)
      
      While doing some migration/rebase I came in to the situation, where I
      needed to change `mocking::MockBlock` to `mocking::MockBlockU32`:
      ```
      #[derive_impl(frame_system::config_preludes::TestDefaultConfig)]
      impl frame_system::Config for TestRuntime {
      	type Block = frame_system::mocking::MockBlockU32<TestRuntime>;
      	type AccountData = pallet_balances::AccountData<ThisChainBalance>;
      }
      ```
      But actual `TestDefaultConfig` for `frame_system` is using `ConstU64`
      for `type BlockHashCount = frame_support::traits::ConstU64<10>;`
      [here](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/system/src/lib.rs#L303).
      Because of this, it force me to specify and add override for `type
      BlockHashCount = ConstU32<10>`.
      
      This PR tries to fix this with `TestBlockHashCount` implementation for
      `TestDefaultConfig` which supports `u32`, `u64` and `u128` as a
      `BlockNumber`.
      
      ### How to simulate error
      Just by removing `type BlockHashCount = ConstU32<250>;`
      [here](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/multisig/src/tests.rs#L44)
      ```
      :~/parity/olkadot-sdk$ cargo test -p pallet-multisig
         Compiling pallet-multisig v28.0.0 (/home/bparity/parity/aaa/polkadot-sdk/substrate/frame/multisig)
      error[E0277]: the trait bound `ConstU64<10>: frame_support::traits::Get<u32>` is not satisfied
         --> substrate/frame/multisig/src/tests.rs:41:1
          |
      41  | #[derive_impl(frame_system::config_preludes::TestDefaultConfig)]
          | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `frame_support::traits::Get<u32>` is not implemented for `ConstU64<10>`
          |
          = help: the following other types implement trait `frame_support::traits::Get<T>`:
                    <ConstU64<T> as frame_support::traits::Get<u64>>
                    <ConstU64<T> as frame_support::traits::Get<std::option::Option<u64>>>
      note: required by a bound in `frame_system::Config::BlockHashCount`
         --> /home/bparity/parity/aaa/polkadot-sdk/substrate/frame/system/src/lib.rs:535:24
          |
      535 |         type BlockHashCount: Get<BlockNumberFor<Self>>;
          |                              ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Config::BlockHashCount`
          = note: this error originates in the attribute macro `derive_impl` which comes from the expansion of the macro `frame_support::macro_magic::forward_tokens_verbatim` (in Nightly builds, run with -Z macro-backtrace for more info)
      
      For more information about this error, try `rustc --explain E0277`.
      error: could not compile `pallet-multisig` (lib test) due to 1 previous error 
      ```
      
      
      
      
      ## For reviewers:
      
      (If there is a better solution, please let me know!)
      
      The first commit contains actual attempt to fix the problem:
      https://github.com/paritytech/polkadot-sdk/commit/3c5499e5
      
      .
      The second commit is just removal of `BlockHashCount` from all other
      places where not needed by default.
      
      Closes: https://github.com/paritytech/polkadot-sdk/issues/1657
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
  25. May 22, 2024
  26. May 16, 2024
    • Oliver Tale-Yazdi's avatar
      [Runtime] Bound XCMP queue (#3952) · 4adfa37d
      Oliver Tale-Yazdi authored
      
      Re-applying #2302 after increasing the `MaxPageSize`.  
      
      Remove `without_storage_info` from the XCMP queue pallet. Part of
      https://github.com/paritytech/polkadot-sdk/issues/323
      
      Changes:
      - Limit the number of messages and signals a HRMP channel can have at
      most.
      - Limit the number of HRML channels.
      
      A No-OP migration is put in place to ensure that all `BoundedVec`s still
      decode and not truncate after upgrade. The storage version is thereby
      bumped to 5 to have our tooling remind us to deploy that migration.
      
      ## Integration
      
      If you see this error in your try-runtime-cli:  
      ```pre
      Max message size for channel is too large. This means that the V5 migration can be front-run and an
      attacker could place a large message just right before the migration to make other messages un-decodable.
      Please either increase `MaxPageSize` or decrease the `max_message_size` for this channel. Channel max:
      102400, MaxPageSize: 65535
      ```
      
      Then increase the `MaxPageSize` of the `cumulus_pallet_xcmp_queue` to
      something like this:
      ```rust
      type MaxPageSize = ConstU32<{ 103 * 1024 }>;
      ```
      
      There is currently no easy way for on-chain governance to adjust the
      HRMP max message size of all channels, but it could be done:
      https://github.com/paritytech/polkadot-sdk/issues/3145.
      
      ---------
      
      Signed-off-by: default avatarOliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
      Co-authored-by: default avatarFrancisco Aguirre <franciscoaguirreperez@gmail.com>
  27. May 15, 2024
    • Alexandru Gheorghe's avatar
      Make vscode rustanalyzer fast again (#4470) · e31fcffb
      Alexandru Gheorghe authored
      
      This bump of versions:
      
      https://github.com/paritytech/polkadot-sdk/pull/4409/files#diff-13ee4b2252c9e516a0547f2891aa2105c3ca71c6d7a1e682c69be97998dfc87eR11936
      
      reintroduced a dependency to proc-macro-crate 2.0.0 which is suffering
      from: https://github.com/bkchr/proc-macro-crate/pull/42 this, so bump
      parity-scale-codec to a newer version to eliminate the bad
      proc-macro-crate 2.0.0 dependency.
      
      ---------
      
      Signed-off-by: default avatarAlexandru Gheorghe <alexandru.gheorghe@parity.io>
      Co-authored-by: command-bot <>
  28. May 14, 2024
  29. May 08, 2024
    • Francisco Aguirre's avatar
      XcmDryRunApi - Dry-running extrinsics to get their XCM effects (#3872) · 7213e363
      Francisco Aguirre authored
      
      # Context
      
      Estimating fees for XCM execution and sending has been an area with bad
      UX.
      The addition of the
      [XcmPaymentApi](https://github.com/paritytech/polkadot-sdk/pull/3607)
      exposed the necessary components to be able to estimate XCM fees
      correctly, however, that was not the full story.
      The `XcmPaymentApi` works for estimating fees only if you know the
      specific XCM you want to execute or send.
      This is necessary but most UIs want to estimate the fees for extrinsics,
      they don't necessarily know the XCM program that's executed by them.
      
      # Main addition
      
      A new runtime API is introduced, the `XcmDryRunApi`, that given an
      extrinsic, or an XCM program, returns its effects:
      - Execution result
      - Local XCM (in the case of an extrinsic)
      - Forwarded XCMs
      - List of events
      
      This API can be used on its own for dry-running purposes, for
      double-checking or testing, but it mainly shines when used in
      conjunction with the `XcmPaymentApi`.
      UIs can use these two APIs to estimate transfers.
      
      # How it works
      
      New tests are added to exemplify how to incorporate both APIs.
      There's a mock test just to make sure everything works under
      `xcm-fee-payment-runtime-api`.
      There's a real-world test using Westend and AssetHubWestend under
      `cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/xcm_fee_estimation.rs`.
      Added both a test for a simple teleport between chains and a reserve
      transfer asset between two parachains going through a reserve.
      
      The steps to follow:
      - Use `XcmDryRunApi::dry_run_extrinsic` to get local XCM program and
      forwarded messages
      - For each forwarded message
      - Use `XcmPaymentApi::query_delivery_fee` LOCALLY to get the delivery
      fees
      - Use `XcmPaymentApi::query_xcm_weight` ON THE DESTINATION to get the
      remote execution weight
      - (optional) Use `XcmPaymentApi::query_acceptable_payment_assets` ON THE
      DESTINATION to know on which assets the execution fees can be paid
      - Use `XcmPaymentApi::query_weight_to_asset_fee` ON THE DESTINATION to
      convert weight to the actual remote execution fees
      - Use `XcmDryRunApi::dry_run_xcm` ON THE DESTINATION to know if a new
      message will be forwarded, if so, continue
      
      # Dear reviewer
      
      The changes in this PR are grouped as follows, and in order of
      importance:
      - Addition of new runtime API
      - Definition, mock and simple tests:
      polkadot/xcm/xcm-fee-payment-runtime-api/*
      - Implemented on Westend, Asset Hub Westend and Penpal, will implement
      on every runtime in a following PR
      - Addition of a new config item to the XCM executor for recording xcms
      about to be executed
        - Definition: polkadot/xcm/xcm-executor/*
        - Implementation: polkadot/xcm/pallet-xcm/*
      - had to update all runtime xcm_config.rs files with `type XcmRecorder =
      XcmPallet;`
      - Addition of a new trait for inspecting the messages in queues
        - Definition: polkadot/xcm/xcm-builder/src/routing.rs
        - Implemented it on all routers:
          - ChildParachainRouter: polkadot/runtime/common/src/xcm_sender.rs
      - ParentAsUmp: cumulus/primitives/utility/src/lib.rs (piggybacked on
      implementation in cumulus/pallets/parachain-system/src/lib.rs)
          - XcmpQueue: cumulus/pallets/xcmp-queue/src/lib.rs
          - Bridge: bridges/modules/xcm-bridge-hub-router/src/lib.rs
      - More complicated and useful tests:
      -
      cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/xcm_fee_estimation.rs
      
      ## Next steps
      
      With this PR, Westend, AssetHubWestend, Rococo and AssetHubRococo have
      the new API.
      UIs can test on these runtimes to create better experiences around
      cross-chain operations.
      
      Next:
      - Add XcmDryRunApi to all system parachains
      - Integrate xcm fee estimation in all emulated tests
      - Get this on the fellowship runtimes
      
      ---------
      
      Co-authored-by: default avatarAdrian Catangiu <adrian@parity.io>
  30. May 02, 2024
  31. Apr 30, 2024
  32. Apr 26, 2024
  33. Apr 22, 2024