-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add beefy light client tests and benchamarks #13
base: develop
Are you sure you want to change the base?
Changes from all commits
b8c380e
a138afd
ae175eb
ec3170f
88fdd42
f54ef0e
c792abd
86367aa
87d3b1e
4500c73
0a98d6c
76626cb
58b61a7
a7884d8
9841fb8
c3be388
9d511a6
8199c9d
c033163
9551865
c3fe9f9
be37673
88d2807
983bacb
d74b89c
f865071
3c608c2
280b11b
a956ab9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,7 +30,232 @@ | |
|
||
use super::*; | ||
|
||
// #[allow(unused)] | ||
// use crate::Pallet as BeefyLightClient; | ||
// use frame_benchmarking::{benchmarks, impl_benchmark_test_suite, whitelisted_caller}; | ||
// use frame_system::RawOrigin; | ||
use crate::benchmark_features::*; | ||
use crate::test_helpers::*; | ||
use crate::Pallet as BeefyLightClient; | ||
use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; | ||
use frame_system::RawOrigin; | ||
use hex_literal::hex; | ||
|
||
benchmarks! { | ||
initialize { | ||
let root = hex!("36ee7c9903f810b22f7e6fca82c1c0cd6a151eca01f087683d92333094d94dc1"); | ||
let curr_val_set = ValidatorSet { | ||
id: 0, | ||
len: 3, | ||
root: root.into(), | ||
}; | ||
let next_val_set = ValidatorSet { | ||
id: 1, | ||
len: 3, | ||
root: root.into(), | ||
}; | ||
}: _(RawOrigin::Root, SubNetworkId::Mainnet, 1, curr_val_set, next_val_set) | ||
verify { | ||
assert!(BeefyLightClient::<T>::current_validator_set(SubNetworkId::Mainnet).is_some()); | ||
assert!(BeefyLightClient::<T>::next_validator_set(SubNetworkId::Mainnet).is_some()); | ||
} | ||
|
||
|
||
submit_signature_commitment_10_128 { | ||
let validators = 10; | ||
let tree_size = 128; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_10_128); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_20_256 { | ||
let validators = 20; | ||
let tree_size = 256; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Never used |
||
|
||
let fixture = load_slice_fixture(FIXTURE_20_256); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_40_512 { | ||
let validators = 40; | ||
let tree_size = 512; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_40_512); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_80_1024 { | ||
let validators = 80; | ||
let tree_size = 1024; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_80_1024); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_160_2048 { | ||
let validators = 160; | ||
let tree_size = 2048; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_160_2048); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_200_4096 { | ||
let validators = 200; | ||
let tree_size = 4096; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_200_4096); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
|
||
submit_signature_commitment_300_8192 { | ||
let validators = 300; | ||
let tree_size = 8192; | ||
|
||
let fixture = load_slice_fixture(FIXTURE_300_8192); | ||
let validator_set = fixture.validator_set.clone().into(); | ||
let next_validator_set = fixture.next_validator_set.clone().into(); | ||
|
||
BeefyLightClient::<T>::initialize( | ||
RawOrigin::Root.into(), | ||
SubNetworkId::Mainnet, | ||
0, | ||
validator_set, | ||
next_validator_set | ||
).expect("Error while initializing pallet"); | ||
|
||
let signed_commitment: beefy_primitives::SignedCommitment< | ||
u32, | ||
beefy_primitives::crypto::Signature, | ||
> = Decode::decode(&mut &fixture.commitment[..]).unwrap(); | ||
let commitment = signed_commitment.commitment.clone(); | ||
let validator_proof = validator_proof::<T>(&fixture, signed_commitment.signatures, validators); | ||
let leaf: BeefyMMRLeaf = Decode::decode(&mut &fixture.leaf[..]).unwrap(); | ||
}: submit_signature_commitment(RawOrigin::Signed(alice::<T>()), SubNetworkId::Mainnet, commitment, validator_proof, leaf, fixture.leaf_proof.into()) | ||
verify { | ||
assert!(BeefyLightClient::<T>::latest_mmr_roots(SubNetworkId::Mainnet).len() > 0); | ||
} | ||
} | ||
|
||
impl_benchmark_test_suite!( | ||
BeefyLightClient, | ||
crate::mock::new_test_ext(), | ||
crate::mock::Test, | ||
); |
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -69,6 +69,21 @@ mod tests; | |||||||||||
#[cfg(feature = "runtime-benchmarks")] | ||||||||||||
mod benchmarking; | ||||||||||||
|
||||||||||||
#[cfg(feature = "runtime-benchmarks")] | ||||||||||||
mod benchmark_features; | ||||||||||||
|
||||||||||||
#[cfg(any(test, feature = "runtime-benchmarks"))] | ||||||||||||
// #[cfg(test)] | ||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you need this commented code? |
||||||||||||
mod test_helpers; | ||||||||||||
|
||||||||||||
pub mod weights; | ||||||||||||
|
||||||||||||
pub trait WeightInfo { | ||||||||||||
fn initialize() -> Weight; | ||||||||||||
|
||||||||||||
fn submit_signature_commitment() -> Weight; | ||||||||||||
Comment on lines
+82
to
+84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||
} | ||||||||||||
|
||||||||||||
#[derive(Clone, RuntimeDebug, Encode, Decode, PartialEq, Eq, scale_info::TypeInfo)] | ||||||||||||
pub struct ProvedSubstrateBridgeMessage<Message> { | ||||||||||||
pub message: Message, | ||||||||||||
|
@@ -115,6 +130,7 @@ pub mod pallet { | |||||||||||
#[pallet::config] | ||||||||||||
pub trait Config: frame_system::Config { | ||||||||||||
type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>; | ||||||||||||
type WeightInfo: WeightInfo; | ||||||||||||
type Randomness: frame_support::traits::Randomness<Self::Hash, Self::BlockNumber>; | ||||||||||||
type Message: Parameter; | ||||||||||||
} | ||||||||||||
|
@@ -202,7 +218,7 @@ pub mod pallet { | |||||||||||
// Dispatchable functions must be annotated with a weight and must return a DispatchResult. | ||||||||||||
#[pallet::call] | ||||||||||||
impl<T: Config> Pallet<T> { | ||||||||||||
#[pallet::weight(0)] | ||||||||||||
#[pallet::weight(<T as Config>::WeightInfo::initialize())] | ||||||||||||
pub fn initialize( | ||||||||||||
origin: OriginFor<T>, | ||||||||||||
network_id: SubNetworkId, | ||||||||||||
|
@@ -217,7 +233,7 @@ pub mod pallet { | |||||||||||
Ok(().into()) | ||||||||||||
} | ||||||||||||
|
||||||||||||
#[pallet::weight(0)] | ||||||||||||
#[pallet::weight(<T as Config>::WeightInfo::submit_signature_commitment())] | ||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looking at your benchmarks I think you need to rework the weight of submit_signature_commitment() |
||||||||||||
#[frame_support::transactional] | ||||||||||||
pub fn submit_signature_commitment( | ||||||||||||
origin: OriginFor<T>, | ||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is output of your benchmarks?
As I see the result is not mapped to WeightInfo trait.
Also how did you get submit_signature_commitment() weight? Because you will get of methods submit_signature_commitment_x_y() with different weights?