Add baseline benchmark for sr25519 verification (#10414)

* Add baseline benchmark for sr25519 verification

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=frame_benchmarking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/benchmarking/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* Register keystore for correct test externalities

* Update frame/benchmarking/src/baseline.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* fix build

Co-authored-by: Parity Bot <admin@parity.io>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Zeke Mostov
2021-12-06 13:31:16 -08:00
committed by GitHub
parent b5b3e827ab
commit e65caa56d4
4 changed files with 77 additions and 22 deletions
+39 -2
View File
@@ -23,9 +23,23 @@
use crate::benchmarks;
use codec::Encode;
use frame_system::Pallet as System;
use sp_runtime::traits::Hash;
use sp_application_crypto::KeyTypeId;
use sp_runtime::{
traits::{AppVerify, Hash},
RuntimeAppPublic,
};
use sp_std::prelude::*;
pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test");
mod app_sr25519 {
use super::TEST_KEY_TYPE_ID;
use sp_application_crypto::{app_crypto, sr25519};
app_crypto!(sr25519, TEST_KEY_TYPE_ID);
}
type SignerId = app_sr25519::Public;
pub struct Pallet<T: Config>(System<T>);
pub trait Config: frame_system::Config {}
@@ -75,6 +89,23 @@ benchmarks! {
assert!(hash != T::Hash::default());
}
sr25519_verification {
let i in 1 .. 100;
let public = SignerId::generate_pair(None);
let sigs_count: u8 = i.try_into().unwrap();
let msg_and_sigs: Vec<_> = (0..sigs_count).map(|j| {
let msg = vec![j, j];
(msg.clone(), public.sign(&msg).unwrap())
})
.collect();
}: {
msg_and_sigs.iter().for_each(|(msg, sig)| {
assert!(sig.verify(&msg[..], &public));
});
}
#[skip_meta]
storage_read {
let i in 0 .. 1_000;
@@ -169,7 +200,13 @@ pub mod mock {
impl super::Config for Test {}
pub fn new_test_ext() -> sp_io::TestExternalities {
use sp_keystore::{testing::KeyStore, KeystoreExt, SyncCryptoStorePtr};
use sp_std::sync::Arc;
let t = frame_system::GenesisConfig::default().build_storage::<Test>().unwrap();
sp_io::TestExternalities::new(t)
let mut ext = sp_io::TestExternalities::new(t);
ext.register_extension(KeystoreExt(Arc::new(KeyStore::new()) as SyncCryptoStorePtr));
ext
}
}