Skip to content
Snippets Groups Projects
  1. Jan 05, 2024
    • Bastian Köcher's avatar
      `cumulus-primitives-parachain-inherent`: Split into two crates (#2803) · 930c1519
      Bastian Köcher authored
      This splits `cumulus-primitives-parachain-inherent` into two crates, the
      previous `cumulus-primitives-parachain-inherent` and a new
      `cumulus-client-parachain-inherent`. The idea behind this is to move the
      `create_at` logic into the client crate. This removes quite a lot of
      unrelated dependencies from the runtime std build and thus, makes the
      compilation faster. On my Laptop the compilation is goes down by one
      minute for `asset-hub-rococo-runtime`. I also assume that the full build
      of the entire workspace probably can be speed-up a little bit, because
      more stuff can be compiled in parallel.
      
      ---------
      
      Co-authored-by: command-bot <>
  2. Nov 30, 2023
    • Sebastian Kunert's avatar
      PoV Reclaim (Clawback) Node Side (#1462) · 9a650c46
      Sebastian Kunert authored
      This PR provides the infrastructure for the pov-reclaim mechanism
      discussed in #209. The goal is to provide the current proof size to the
      runtime so it can be used to reclaim storage weight.
      
      ## New Host Function
      - A new host function is provided
      [here](https://github.com/skunert/polkadot-sdk/blob/5b317fda
      
      /cumulus/primitives/pov-reclaim/src/lib.rs#L23).
      It returns the size of the current proof size to the runtime. If
      recording is not enabled, it returns 0.
      
      ## Implementation Overview
      - Implement option to enable proof recording during import in the
      client. This is currently enabled for `polkadot-parachain`,
      `parachain-template` and the cumulus test node.
      - Make the proof recorder ready for no-std. It was previously only
      enabled for std environments, but we need to record the proof size in
      `validate_block` too.
      - Provide a recorder implementation that only the records the size of
      incoming nodes and does not store the nodes itself.
      - Fix benchmarks that were broken by async backing changes
      - Provide new externalities extension that is registered by default if
      proof recording is enabled.
      - I think we should discuss the naming, pov-reclaim was more intuitive
      to me, but we could also go with clawback like in the issue.
      
      ## Impact of proof recording during import
      With proof recording: 6.3058 Kelem/s
      Without proof recording: 6.3427 Kelem/s
      
      The measured impact on the importing performance is quite low on my
      machine using the block import benchmark. With proof recording I am
      seeing a performance hit of 0.585%.
      
      ---------
      
      Co-authored-by: command-bot <>
      Co-authored-by: default avatarDavide Galassi <davxy@datawok.net>
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
  3. Nov 03, 2023
    • 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 :sweat_smile:
      
      ). 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 <skunert49@gmail.com>
      Co-authored-by: command-bot <>
  4. Jun 13, 2023
  5. Jun 05, 2023