Skip to content
  • Branislav Kontur's avatar
    Fix `expect_pallet` benchmarks not relaying on hard-coded `frame_system` dependency version (#2288) · ae1bdcfb
    Branislav Kontur authored
    ## Problem/Motivation
    The benchmark for the `ExpectPallet` XCM instruction uses a hard-coded
    version `4.0.0` for the `frame_system` pallet. Unfortunately, this
    doesn't work for the `polkadot-fellows/runtimes` repository, where we
    use dependencies from `crates.io`, e.g.,
    [frame-system::23.0.0.0](https://github.com/polkadot-fellows/runtimes/blob/dd7f86f0d50064481ed0b7c0218494a5cfad997e/relay/kusama/Cargo.toml#L83).
    
    Closes: https://github.com/paritytech/polkadot-sdk/issues/2284 
    
    ## Solution
    This PR fixes the benchmarks that require pallet information and enables
    the runtime to provide the correct/custom pallet information. The
    default implementation provides `frame_system::Pallet` with index `0`,
    where the version is not hard-coded but read from the runtime.
    
    
    ## Local testing
    
    Added log for `T::valid_pallet` to the benchmarks like:
    ```
    let valid_pallet = T::valid_pallet();
    log::info!(
    	target: "frame::benchmark::pallet",
    	"valid_pallet: {}::{}::{}::{}::{}",
    	valid_pallet.index,
    	valid_pallet.module_name,
    	valid_pallet.crate_version.major,
    	valid_pallet.crate_version.minor,
    	valid_pallet.crate_version.patch,
    );
    ```
    
    Run benchmarks for `westend`:
    ```
    cargo run --bin=polkadot --features=runtime-benchmarks -- benchmark pallet --steps=2 --repeat=1 --extrinsic=* --heap-pages=4096 --json-file=./bench.json --chain=westend-dev --template=./polkadot/xcm/pallet-xcm-benchmarks/template.hbs --pallet=pallet_xcm_benchmarks::generic --output=./polkadot/runtime/westend/src/weights/xcm
    ```
    
    ---
    
    For actual `frame_system` version:
    ```
    [package]
    name = "frame-system"
    version = "4.0.0-dev"
    ```
    
    Log dump:
    ```
    2023-11-13 12:56:45 Starting benchmark: pallet_xcm_benchmarks::generic::query_pallet    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0    
    2023-11-13 12:56:45 Starting benchmark: pallet_xcm_benchmarks::generic::expect_pallet    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0    
    2023-11-13 12:56:45 valid_pallet: 0::frame_system::4::0::0 
    ```
    
    
    For changed `frame_system` version:
    ```
    [package]
    name = "frame-system"
    version = "5.1.3-dev"
    ```
    
    Log dump:
    ```
    2023-11-13 12:51:51 Starting benchmark: pallet_xcm_benchmarks::generic::query_pallet    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3    
    2023-11-13 12:51:51 Starting benchmark: pallet_xcm_benchmarks::generic::expect_pallet    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3    
    2023-11-13 12:51:51 valid_pallet: 0::frame_system::5::1::3
    ```
    
    ## References
    
    Closes: https://github.com/paritytech/polkadot-sdk/issues/2284
    ae1bdcfb