diff --git a/bridges/bin/millau/runtime/src/lib.rs b/bridges/bin/millau/runtime/src/lib.rs index 8dc9fea6283a4f07f58a951a0a1d67f3deb31e71..24c379ffb20948e7b54939be74da6bb69be93b5a 100644 --- a/bridges/bin/millau/runtime/src/lib.rs +++ b/bridges/bin/millau/runtime/src/lib.rs @@ -317,6 +317,8 @@ parameter_types! { impl pallet_message_lane::Config for Runtime { type Event = Event; + // TODO: https://github.com/paritytech/parity-bridges-common/issues/390 + type WeightInfo = pallet_message_lane::weights::RialtoWeight<Runtime>; type MaxMessagesToPruneAtOnce = MaxMessagesToPruneAtOnce; type MaxUnrewardedRelayerEntriesAtInboundLane = MaxUnrewardedRelayerEntriesAtInboundLane; type MaxUnconfirmedMessagesAtInboundLane = MaxUnconfirmedMessagesAtInboundLane; diff --git a/bridges/bin/rialto/runtime/src/lib.rs b/bridges/bin/rialto/runtime/src/lib.rs index 31c08aba223bd85f11ee382808e0e619ff1a5bb4..89e9aea484957258b376d7a493137fb32f8c0274 100644 --- a/bridges/bin/rialto/runtime/src/lib.rs +++ b/bridges/bin/rialto/runtime/src/lib.rs @@ -425,6 +425,7 @@ parameter_types! { pub(crate) type WithMillauMessageLaneInstance = pallet_message_lane::DefaultInstance; impl pallet_message_lane::Config for Runtime { type Event = Event; + type WeightInfo = pallet_message_lane::weights::RialtoWeight<Runtime>; type MaxMessagesToPruneAtOnce = MaxMessagesToPruneAtOnce; type MaxUnrewardedRelayerEntriesAtInboundLane = MaxUnrewardedRelayerEntriesAtInboundLane; type MaxUnconfirmedMessagesAtInboundLane = MaxUnconfirmedMessagesAtInboundLane; diff --git a/bridges/modules/message-lane/src/lib.rs b/bridges/modules/message-lane/src/lib.rs index 267ad334398f2ef5108ac98d6bdf240e15449cd2..c93218cc809630aad1613b7796589705fe16398b 100644 --- a/bridges/modules/message-lane/src/lib.rs +++ b/bridges/modules/message-lane/src/lib.rs @@ -31,6 +31,7 @@ use crate::inbound_lane::{InboundLane, InboundLaneStorage}; use crate::outbound_lane::{OutboundLane, OutboundLaneStorage}; +use crate::weights::WeightInfo; use bp_message_lane::{ source_chain::{LaneMessageVerifier, MessageDeliveryAndDispatchPayment, TargetHeaderChain}, @@ -54,6 +55,7 @@ mod inbound_lane; mod outbound_lane; pub mod instant_payments; +pub mod weights; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; @@ -75,6 +77,8 @@ pub trait Config<I = DefaultInstance>: frame_system::Config { /// They overarching event type. type Event: From<Event<Self, I>> + Into<<Self as frame_system::Config>::Event>; + /// Benchmarks results from runtime we're plugged into. + type WeightInfo: WeightInfo; /// Maximal number of messages that may be pruned during maintenance. Maintenance occurs /// whenever new message is sent. The reason is that if you want to use lane, you should /// be ready to pay for its maintenance. diff --git a/bridges/modules/message-lane/src/mock.rs b/bridges/modules/message-lane/src/mock.rs index 8250b955be2db82d3fdb423fbdcdf76e8dfaa054..59ca1ab0b769cc583c69ac57e6d42f0f739cee74 100644 --- a/bridges/modules/message-lane/src/mock.rs +++ b/bridges/modules/message-lane/src/mock.rs @@ -101,6 +101,7 @@ parameter_types! { impl Config for TestRuntime { type Event = TestEvent; + type WeightInfo = (); type MaxMessagesToPruneAtOnce = MaxMessagesToPruneAtOnce; type MaxUnrewardedRelayerEntriesAtInboundLane = MaxUnrewardedRelayerEntriesAtInboundLane; type MaxUnconfirmedMessagesAtInboundLane = MaxUnconfirmedMessagesAtInboundLane; diff --git a/bridges/modules/message-lane/src/weights.rs b/bridges/modules/message-lane/src/weights.rs new file mode 100644 index 0000000000000000000000000000000000000000..d819e5d574433819c25e44401ae9e18e6cb2bc90 --- /dev/null +++ b/bridges/modules/message-lane/src/weights.rs @@ -0,0 +1,195 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of Parity Bridges Common. + +// Parity Bridges Common is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity Bridges Common is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>. + +//! Autogenerated weights for pallet_message_lane +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-12-22, STEPS: [50, ], REPEAT: 20 +//! LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled +//! CHAIN: Some("local"), DB CACHE: 128 + +// Executed Command: +// target/release/rialto-bridge-node +// benchmark +// --chain=local +// --steps=50 +// --repeat=20 +// --pallet=pallet_message_lane +// --extrinsic=* +// --execution=wasm +// --wasm-execution=Compiled +// --heap-pages=4096 +// --output=./modules/message-lane/src/weights.rs +// --template=./.maintain/rialto-weight-template.hbs + +#![allow(clippy::all)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{ + traits::Get, + weights::{constants::RocksDbWeight, Weight}, +}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_message_lane. +pub trait WeightInfo { + fn send_message_worst_case() -> Weight; + fn receive_single_message_proof() -> Weight; + fn receive_two_messages_proof() -> Weight; + fn receive_single_message_proof_with_outbound_lane_state() -> Weight; + fn receive_delivery_proof_for_single_message() -> Weight; + fn receive_delivery_proof_for_two_messages_by_single_relayer() -> Weight; + fn receive_delivery_proof_for_two_messages_by_two_relayers() -> Weight; + fn receive_multiple_messages_proof(i: u32) -> Weight; + fn receive_multiple_messages_proof_with_outbound_lane_state(i: u32) -> Weight; + fn receive_delivery_proof_for_multiple_messages_by_single_relayer(i: u32) -> Weight; + fn receive_delivery_proof_for_multiple_messages_by_multiple_relayers(i: u32) -> Weight; +} + +/// Weights for pallet_message_lane using the Rialto node and recommended hardware. +pub struct RialtoWeight<T>(PhantomData<T>); +impl<T: frame_system::Config> WeightInfo for RialtoWeight<T> { + fn send_message_worst_case() -> Weight { + (4_289_189_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(12 as Weight)) + } + fn receive_single_message_proof() -> Weight { + (186_909_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn receive_two_messages_proof() -> Weight { + (339_281_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn receive_single_message_proof_with_outbound_lane_state() -> Weight { + (215_607_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn receive_delivery_proof_for_single_message() -> Weight { + (202_085_000 as Weight) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_two_messages_by_single_relayer() -> Weight { + (213_142_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_two_messages_by_two_relayers() -> Weight { + (300_159_000 as Weight) + .saturating_add(T::DbWeight::get().reads(8 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn receive_multiple_messages_proof(i: u32) -> Weight { + (0 as Weight) + .saturating_add((150_558_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn receive_multiple_messages_proof_with_outbound_lane_state(i: u32) -> Weight { + (0 as Weight) + .saturating_add((204_949_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn receive_delivery_proof_for_multiple_messages_by_single_relayer(i: u32) -> Weight { + (79_087_000 as Weight) + .saturating_add((12_889_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_multiple_messages_by_multiple_relayers(i: u32) -> Weight { + (131_794_000 as Weight) + .saturating_add((108_620_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + fn send_message_worst_case() -> Weight { + (4_289_189_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(12 as Weight)) + } + fn receive_single_message_proof() -> Weight { + (186_909_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn receive_two_messages_proof() -> Weight { + (339_281_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn receive_single_message_proof_with_outbound_lane_state() -> Weight { + (215_607_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn receive_delivery_proof_for_single_message() -> Weight { + (202_085_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(6 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_two_messages_by_single_relayer() -> Weight { + (213_142_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_two_messages_by_two_relayers() -> Weight { + (300_159_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(8 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + fn receive_multiple_messages_proof(i: u32) -> Weight { + (0 as Weight) + .saturating_add((150_558_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn receive_multiple_messages_proof_with_outbound_lane_state(i: u32) -> Weight { + (0 as Weight) + .saturating_add((204_949_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn receive_delivery_proof_for_multiple_messages_by_single_relayer(i: u32) -> Weight { + (79_087_000 as Weight) + .saturating_add((12_889_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(RocksDbWeight::get().reads(5 as Weight)) + .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) + } + fn receive_delivery_proof_for_multiple_messages_by_multiple_relayers(i: u32) -> Weight { + (131_794_000 as Weight) + .saturating_add((108_620_000 as Weight).saturating_mul(i as Weight)) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + } +}