Keystore overhaul (iter 2) (#13634)

* Remove bloat about remote keystore

* Update docs and remove unused 'KeystoreRef' trait

* Use wherever possible, MemoryKeystore for testing

* Remove unrequired fully qualified method syntax for Keystore
This commit is contained in:
Davide Galassi
2023-03-20 19:21:26 +01:00
committed by GitHub
parent faaa0c2851
commit 480396fe06
44 changed files with 312 additions and 457 deletions
@@ -18,7 +18,7 @@
use sp_application_crypto::RuntimeAppPublic;
use sp_core::keccak_256;
use sp_keystore::{Keystore, KeystorePtr};
use sp_keystore::KeystorePtr;
use log::warn;
@@ -50,7 +50,7 @@ impl BeefyKeystore {
// we do check for multiple private keys as a key store sanity check.
let public: Vec<Public> = keys
.iter()
.filter(|k| Keystore::has_keys(&*store, &[(k.to_raw_vec(), KEY_TYPE)]))
.filter(|k| store.has_keys(&[(k.to_raw_vec(), KEY_TYPE)]))
.cloned()
.collect();
@@ -77,7 +77,8 @@ impl BeefyKeystore {
let msg = keccak_256(message);
let public = public.as_ref();
let sig = Keystore::ecdsa_sign_prehashed(&*store, KEY_TYPE, public, &msg)
let sig = store
.ecdsa_sign_prehashed(KEY_TYPE, public, &msg)
.map_err(|e| error::Error::Keystore(e.to_string()))?
.ok_or_else(|| error::Error::Signature("ecdsa_sign_prehashed() failed".to_string()))?;
@@ -94,10 +95,8 @@ impl BeefyKeystore {
pub fn public_keys(&self) -> Result<Vec<Public>, error::Error> {
let store = self.0.clone().ok_or_else(|| error::Error::Keystore("no Keystore".into()))?;
let pk: Vec<Public> = Keystore::ecdsa_public_keys(&*store, KEY_TYPE)
.drain(..)
.map(Public::from)
.collect();
let pk: Vec<Public> =
store.ecdsa_public_keys(KEY_TYPE).drain(..).map(Public::from).collect();
Ok(pk)
}
@@ -118,18 +117,15 @@ impl From<Option<KeystorePtr>> for BeefyKeystore {
#[cfg(test)]
pub mod tests {
use std::sync::Arc;
use sc_keystore::LocalKeystore;
use sp_core::{ecdsa, Pair};
use sp_consensus_beefy::{crypto, Keyring};
use sp_core::{ecdsa, Pair};
use sp_keystore::testing::MemoryKeystore;
use super::*;
use crate::error::Error;
fn keystore() -> KeystorePtr {
Arc::new(LocalKeystore::in_memory())
MemoryKeystore::new().into()
}
#[test]
@@ -197,11 +193,11 @@ pub mod tests {
fn authority_id_works() {
let store = keystore();
let alice: crypto::Public =
Keystore::ecdsa_generate_new(&*store, KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let alice: crypto::Public = store
.ecdsa_generate_new(KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let bob = Keyring::Bob.public();
let charlie = Keyring::Charlie.public();
@@ -223,11 +219,11 @@ pub mod tests {
fn sign_works() {
let store = keystore();
let alice: crypto::Public =
Keystore::ecdsa_generate_new(&*store, KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let alice: crypto::Public = store
.ecdsa_generate_new(KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let store: BeefyKeystore = Some(store).into();
@@ -243,9 +239,7 @@ pub mod tests {
fn sign_error() {
let store = keystore();
let _ = Keystore::ecdsa_generate_new(&*store, KEY_TYPE, Some(&Keyring::Bob.to_seed()))
.ok()
.unwrap();
store.ecdsa_generate_new(KEY_TYPE, Some(&Keyring::Bob.to_seed())).ok().unwrap();
let store: BeefyKeystore = Some(store).into();
@@ -274,11 +268,11 @@ pub mod tests {
fn verify_works() {
let store = keystore();
let alice: crypto::Public =
Keystore::ecdsa_generate_new(&*store, KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let alice: crypto::Public = store
.ecdsa_generate_new(KEY_TYPE, Some(&Keyring::Alice.to_seed()))
.ok()
.unwrap()
.into();
let store: BeefyKeystore = Some(store).into();
@@ -300,9 +294,8 @@ pub mod tests {
let store = keystore();
let add_key = |key_type, seed: Option<&str>| {
Keystore::ecdsa_generate_new(&*store, key_type, seed).unwrap()
};
let add_key =
|key_type, seed: Option<&str>| store.ecdsa_generate_new(key_type, seed).unwrap();
// test keys
let _ = add_key(TEST_TYPE, Some(Keyring::Alice.to_seed().as_str()));