mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
* Add `run_benchmarks.sh` script to run runtime benchmarks
* Sets up benchmark configs and directory structure to store weights
(`operator/runtime/<RUNTIME>/weights`)
* (naive) fixes to some benchmarks:
* `pallet_datahaven_native_transfer`:
* use a mock for `NativeTokenId`
* look at the balance difference of the treasury instead of the total
(this makes the benchmark agnostic to genesis setup)
* `snowbridge_pallet_system` / `snowbridge_pallet_system_v2` use native
token xcm location vs relay chain one. Add missing benchmark methods and
update fixture with valid data.
* `snowbridge_pallet_ethereum_client`: update fixtures with valid data
* `snowbrige_pallet_inbound_queue_v2`: set EthereumGatewayAddress when
initializing storage on benchmark and use a mock message processor ( as
fixture has `CreateAsset` payload which is not supported in the
`EigenLayerMessageProcessor`)
* `snowbridge_pallet_outbound_queue_v2`: add missing
`submit_delivery_receipt` benchmark which required a dedicated fixture
(all copied from the upstream pallet)
* `pallet_treasury`: Use an `ExistentialDeposit` of `1` on benchmark,
else payout fails.
* `pallet_transaction_payment`: Use a custom `WeightToFee` that makes
the Fee small, else account in benchmark cannot pay for fees (It is
funded a multiplier of `ExistentialDeposit` and is expected for that to
be enough, but it's not in our particular setup).
* comment out `pallet_identity` and `pallet_im_online` due to
incompatibilities (to be addressed later)
* Basic benchmark run to set `WeightInfo` from `weights` in configs
(real run should be done later using target hardware)
---------
Co-authored-by: Ahmad Kaouk <ahmadkaouk.93@gmail.com>
Co-authored-by: Tobi Demeco <50408393+TDemeco@users.noreply.github.com>
Co-authored-by: undercover-cactus <lola@moonsonglabs.com>
Co-authored-by: TDemeco <tdemeco@itba.edu.ar>
78 lines
3.5 KiB
Handlebars
78 lines
3.5 KiB
Handlebars
{{header}}
|
|
|
|
//! Autogenerated weights for `{{pallet}}`
|
|
//!
|
|
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}}
|
|
//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}`
|
|
//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}`
|
|
//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}`
|
|
//! WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}}
|
|
|
|
// Executed Command:
|
|
{{#each args as |arg|}}
|
|
// {{arg}}
|
|
{{/each}}
|
|
|
|
#![cfg_attr(rustfmt, rustfmt_skip)]
|
|
#![allow(unused_parens)]
|
|
#![allow(unused_imports)]
|
|
|
|
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
|
|
use sp_std::marker::PhantomData;
|
|
|
|
/// Weights for `{{pallet}}`.
|
|
pub struct WeightInfo<T>(PhantomData<T>);
|
|
{{#if (eq pallet "frame_system_extensions")}}
|
|
impl<T: frame_system::Config> frame_system::ExtensionsWeightInfo for WeightInfo<T> {
|
|
{{else}}
|
|
impl<T: frame_system::Config> {{pallet}}::WeightInfo for WeightInfo<T> {
|
|
{{/if}}
|
|
{{#each benchmarks as |benchmark|}}
|
|
{{#each benchmark.comments as |comment|}}
|
|
/// {{comment}}
|
|
{{/each}}
|
|
{{#each benchmark.component_ranges as |range|}}
|
|
/// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`.
|
|
{{/each}}
|
|
fn {{benchmark.name~}}
|
|
(
|
|
{{~#each benchmark.components as |c| ~}}
|
|
{{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}}
|
|
) -> Weight {
|
|
// Proof Size summary in bytes:
|
|
// Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
|
|
// Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
|
|
// Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds.
|
|
Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}})
|
|
{{#each benchmark.component_weight as |cw|}}
|
|
// Standard Error: {{underscore cw.error}}
|
|
.saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into()))
|
|
{{/each}}
|
|
{{#if (ne benchmark.base_reads "0")}}
|
|
.saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64))
|
|
{{/if}}
|
|
{{#each benchmark.component_reads as |cr|}}
|
|
.saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into())))
|
|
{{/each}}
|
|
{{#if (ne benchmark.base_writes "0")}}
|
|
.saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64))
|
|
{{/if}}
|
|
{{#each benchmark.component_writes as |cw|}}
|
|
.saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into())))
|
|
{{/each}}
|
|
{{#each benchmark.component_calculated_proof_size as |cp|}}
|
|
.saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into()))
|
|
{{/each}}
|
|
{{#if (and (eq ../pallet "pallet_proxy") (eq benchmark.name "proxy"))}}
|
|
// 1 DB read that happen when filtering the proxy call transaction
|
|
.saturating_add(T::DbWeight::get().reads(1))
|
|
{{/if}}
|
|
{{#if (and (eq ../pallet "pallet_precompile_benchmarks") (eq benchmark.name "p256_verify"))}}
|
|
// TODO: Remove this multiplication once we are comfortable with the weight estimation
|
|
// Double the weight just to mitigate the possibility of having a signature that
|
|
// takes longer to verify
|
|
.saturating_mul(1u64)
|
|
{{/if}}
|
|
}
|
|
{{/each}}
|
|
}
|