Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
18c7d88
adding boilerplate for adding bls crypto
drskalman Dec 9, 2021
b86768c
First scratches to add bls crypto to primities/core and beefy.
drskalman Dec 10, 2021
fd75c93
suggested solution during BEEFY meeting for making BEEFY BLS compatible
drskalman Feb 15, 2022
322ad00
Merge remote-tracking branch 'origin/master' into skalman-bls-beefy
drskalman Feb 15, 2022
f7fca6d
- fix dependencies on arkwork and bls library.
drskalman Mar 10, 2022
5e8f2ea
to discuss HKDK with Al
drskalman May 9, 2022
2912fa1
resolve compilation errors for primitives/core/src/bls.rs
drskalman May 26, 2022
86b1e3a
resolve bls test compilation error, 6 tests still failing
drskalman May 31, 2022
2b59fa0
- change dependancy patches to repos available on github.
drskalman Jun 1, 2022
b602e7a
Merge branch 'master' of https://github.com/paritytech/substrate into…
drskalman Jun 1, 2022
68fd3a2
overwrite Cargo.lock from upstream and cargo-update to reslove Cargo.…
drskalman Jun 1, 2022
59d665e
add `bls_generate_new` and `bls_public_keys` to CryptoStore
drskalman Jun 14, 2022
857f85e
- implement host api `bls_public_keys, bls_generate, bls_sign,
drskalman Jun 14, 2022
a1ed112
- Adapt `primitives/beefy/src/commitment.rs and witness.rs` to have
drskalman Jun 28, 2022
b936150
implement TestNOPAggregatableSignature for Merkle based commitment.
drskalman Jul 4, 2022
1df925c
adapt an pass test for merkle root aggregator
drskalman Jul 5, 2022
28596f2
rust-fmtize
drskalman Jul 5, 2022
577cc68
add test for commitment containing aggregated bls signature.
drskalman Jul 7, 2022
0f53f28
make different traits for keystore for ecdsa-only and ecdsa-bls beefy…
drskalman Jul 18, 2022
fed0bbc
reverse the idea of validator aggregating received bls signature
drskalman Jul 21, 2022
7de89ae
make beefy primitve test compile and pass
drskalman Jul 23, 2022
5379e62
implement `should_convert_dually_signed_commitment_to_witness` test
drskalman Jul 25, 2022
7bdb082
Merge branch 'skalman-bls-beefy' into skalman-bls-beefy-client
drskalman Jul 25, 2022
1661c19
separate impl for ECDSA and BLS keystore
drskalman Aug 5, 2022
6a1c26f
Merge branch 'skalman-bls-beefy-client' of https://github.com/drskalm…
drskalman Aug 11, 2022
ab682ce
add bls support to LocalKeyStore
drskalman Aug 16, 2022
231a38e
implement `BeefyBLSKeystore` and `BeefyBLSnECDSAKeystore`
drskalman Aug 16, 2022
1847516
Make BeefyKeyStore generic for Beefy Worker
drskalman Aug 24, 2022
cc3a9d6
add BeefyKeystore generic type to GossipValidator so it can turn
drskalman Aug 30, 2022
e0d8740
adapt BEEFY GossipValidator to a generic Keystore
drskalman Sep 1, 2022
ea40ab9
- resolve errors in ECDSAnBLSKeystore implementation.
drskalman Sep 9, 2022
9349cac
clone keys on the fly while iterating.
drskalman Sep 12, 2022
787f80d
- rename `beefy::crypto` to `beefy:ecdsa_crypto`.
drskalman Sep 16, 2022
ab1c2f3
Merge branch 'skalman-bls-beefy' into skalman-bls-beefy-client
drskalman Sep 16, 2022
f48c8eb
- Make `BeefyApi` trait to distinguish between AuthorityId and PublicKey
drskalman Sep 19, 2022
d7044f8
share changes to beefy client to find solution to authority id problem
drskalman Sep 21, 2022
524debf
adapt Beefy Worker, GossipValidator and Round to Generic AuthId and T…
drskalman Sep 22, 2022
c8db18f
- Resolve conflict between Public and AuthId
drskalman Sep 24, 2022
95f6845
Merge branch 'master' into skalman-beefy-authority-id-adventures
drskalman Sep 26, 2022
50b2f9b
- updated tests to new bls library changes.
drskalman Oct 17, 2022
4c905a8
Merge branch 'master' into skalman-beefy-authority-id-adventures
drskalman Oct 18, 2022
5c89709
make all new Network and Communication objects depends on `AuthId` a…
drskalman Oct 18, 2022
782734d
- do not depend on rand default features (std).
drskalman Oct 26, 2022
2b9cc3c
minor changes and remove patching parity common.
drskalman Oct 27, 2022
8ebb239
move bls-like branch specification from patch to dep due to the cargo
drskalman Oct 29, 2022
a147238
- make all beefy tests generic over AuthityId, Signature and Keystore.
drskalman Oct 31, 2022
6cdc680
make `create_worker` generic on Keystore
drskalman Nov 4, 2022
95e283a
make Keyring generic over key type - down to 97 errors
drskalman Nov 25, 2022
d93fca0
implement keyring enum instead of wrapping it in a struct
drskalman Dec 8, 2022
accfaf7
- Re-apply BeefyVerify changes.
drskalman Dec 8, 2022
61d5168
First step in implementing Pair trait for ECDSAnBLS crypto
drskalman Dec 11, 2022
b03a4ce
- introduce `SimpleKeyPair` to make `Keyring` generic over key pair type
drskalman Dec 16, 2022
015e2a9
fix over hashing for bls_sign in the keystore
drskalman Dec 16, 2022
5022b7e
beefy `public_keys_works` test fails because the keystore forgets the…
drskalman Dec 19, 2022
2add57c
make testing infrastructure in `client/beefy/src/tests.rs` generic ov…
drskalman Jan 11, 2023
670c0cf
implement `beefy_finalizing_blocks_using_ecdsa_signature` though it o…
drskalman Jan 16, 2023
c6acac6
- implement beefy_finalizing_blocks_using_ecdsa_n_bls_signature
drskalman Jan 17, 2023
789a5a8
- making `new_finality_proof`,`lagging_validators`,`correct_beefy_pay…
drskalman Jan 17, 2023
1165d7c
make `voter_initialization`, `on_demand_beefy_justification_sync` gen…
drskalman Jan 17, 2023
1aaf6be
- Re-active tests and make helpers in beefy/worker.rs to crypto
drskalman Jan 18, 2023
59f10a4
implement keystore_vs_validator_set test for ecdsa and ecdsa_n_bls pa…
drskalman Jan 18, 2023
84a9902
depends on arkworks 0.4.0
drskalman Jan 25, 2023
744fe42
- use `store.authority_id` istead of key.contains in `keystore::publi…
drskalman Jan 29, 2023
6eaa95d
make beefy justification tests generic over keytype
drskalman Jan 30, 2023
18d5a59
- make rounds tests generic over key type
drskalman Jan 30, 2023
a010852
Merge branch 'master' into skalman-beefy-authority-id-adventures
drskalman Jan 31, 2023
d323ca7
make beefy client build after merging with master.
drskalman Feb 2, 2023
e53c9c8
adapt old test to new tokio style. new tests has been commented out.
drskalman Feb 3, 2023
d0c790a
new beefy tests in worker and tests adapted to generic key model
drskalman Feb 3, 2023
e08387f
- specify `AuthId` and `TSignature` when calling `load_persitent` oth…
drskalman Feb 4, 2023
3be0a82
get rid of redundant imports and fix all warnings.
drskalman Feb 4, 2023
42c894b
cargo fmt beefy primitives
drskalman Feb 4, 2023
469aadb
cargo fmt beefy client, keystore client and primitives, primitives
drskalman Feb 4, 2023
73657c5
Add `AuthoritySetCommitment` field to `BeefyAuthoritySet` needed by A…
drskalman Feb 24, 2023
096f94d
- depend on default branch of bls-like and apk-proofs.
drskalman Mar 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
make beefy client build after merging with master.
  • Loading branch information
drskalman committed Feb 2, 2023
commit d323ca7673b669226cd2d9b6ef8dd207eea64405
9 changes: 5 additions & 4 deletions client/beefy/src/aux_schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

use crate::{worker::PersistedState, LOG_TARGET};
use codec::{Decode, Encode};
use std::fmt::Debug;
use log::{info, trace};
use sc_client_api::{backend::AuxStore, Backend};
use sp_blockchain::{Error as ClientError, Result as ClientResult};
Expand All @@ -36,9 +37,9 @@ pub(crate) fn write_current_version<B: AuxStore>(backend: &B) -> ClientResult<()
}

/// Write voter state.
pub(crate) fn write_voter_state<Block: BlockT, B: AuxStore>(
pub(crate) fn write_voter_state<Block: BlockT, B: AuxStore, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send>(
backend: &B,
state: &PersistedState<Block>,
state: &PersistedState<Block, AuthId, TSignature>,
) -> ClientResult<()> {
trace!(target: LOG_TARGET, "🥩 persisting {:?}", state);
backend.insert_aux(&[(WORKER_STATE, state.encode().as_slice())], &[])
Expand All @@ -54,7 +55,7 @@ fn load_decode<B: AuxStore, T: Decode>(backend: &B, key: &[u8]) -> ClientResult<
}

/// Load or initialize persistent data from backend.
pub(crate) fn load_persistent<B, BE>(backend: &BE) -> ClientResult<Option<PersistedState<B>>>
pub(crate) fn load_persistent<B, BE, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send>(backend: &BE) -> ClientResult<Option<PersistedState<B, AuthId, TSignature>>>
where
B: BlockT,
BE: Backend<B>,
Expand All @@ -63,7 +64,7 @@ where

match version {
None => (),
Some(1) => return load_decode::<_, PersistedState<B>>(backend, WORKER_STATE),
Some(1) => return load_decode::<_, PersistedState<B, AuthId, TSignature>>(backend, WORKER_STATE),
other =>
return Err(ClientError::Backend(format!("Unsupported BEEFY DB version: {:?}", other))),
}
Expand Down
6 changes: 3 additions & 3 deletions client/beefy/src/communication/gossip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ pub(crate) struct GossipValidator<B, AuthId, TSignature, BKS>
where
B: Block,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
{
topic: B::Hash,
Expand All @@ -117,7 +117,7 @@ impl<B, AuthId, TSignature, BKS> GossipValidator<B, AuthId, TSignature, BKS>
where
B: Block,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
{
pub fn new(known_peers: Arc<Mutex<KnownPeers<B>>>) -> GossipValidator<B, AuthId, TSignature, BKS> {
Expand Down Expand Up @@ -153,7 +153,7 @@ impl<B, AuthId, TSignature, BKS> Validator<B> for GossipValidator<B, AuthId, TSi
where
B: Block,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
{
fn peer_disconnected(&self, _context: &mut dyn ValidatorContext<B>, who: &PeerId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use sc_network_common::{
request_responses::{IfDisconnected, RequestFailure},
service::NetworkRequest,
};
use sp_api::ProvideRuntimeApi;
use sp_runtime::traits::{Block, NumberFor};
use std::{collections::VecDeque, result::Result, sync::Arc};

Expand All @@ -45,38 +46,36 @@ type Response = Result<Vec<u8>, RequestFailure>;
type ResponseReceiver = oneshot::Receiver<Response>;

#[derive(Clone, Debug)]
struct RequestInfo<B: Block> {
struct RequestInfo<B: Block, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send> {
block: NumberFor<B>,
active_set: ValidatorSet<AuthorityId>,
active_set: ValidatorSet<AuthId>,
}

enum State<B: Block> {
enum State<B: Block, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send> {
Idle,
AwaitingResponse(PeerId, RequestInfo<B>, ResponseReceiver),
AwaitingResponse(PeerId, RequestInfo<B, AuthId>, ResponseReceiver),
}

pub struct OnDemandJustificationsEngine<B: Block, R, AuthId: Encode + Decode + Debug + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> {
pub struct OnDemandJustificationsEngine<B: Block, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> {
network: Arc<dyn NetworkRequest + Send + Sync>,
protocol_name: ProtocolName,

live_peers: Arc<Mutex<KnownPeers<B>>>,
peers_cache: VecDeque<PeerId>,

state: State<B>,
state: State<B, AuthId>,
_auth_id : PhantomData::<AuthId>,
_signature: PhantomData::<TSignature>,
_keystor: PhantomData::<BKS>,

}

impl<B, R, AuthId, TSignature, BKS> OnDemandJustificationsEngine<B, R, AuthId, TSignature, BKS>
impl<B, AuthId, TSignature, BKS> OnDemandJustificationsEngine<B, AuthId, TSignature, BKS>
where
B: Block,
R: ProvideRuntimeApi<B>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
R::Api: BeefyApi<B, AuthId>,
{
pub fn new(
network: Arc<dyn NetworkRequest + Send + Sync>,
Expand Down Expand Up @@ -111,7 +110,7 @@ where
None
}

fn request_from_peer(&mut self, peer: PeerId, req_info: RequestInfo<B>) {
fn request_from_peer(&mut self, peer: PeerId, req_info: RequestInfo<B, AuthId>) {
debug!(
target: BEEFY_SYNC_LOG_TARGET,
"🥩 requesting justif #{:?} from peer {:?}", req_info.block, peer,
Expand All @@ -135,7 +134,7 @@ where
/// Start new justification request for `block`, if no other request is in progress.
///
/// `active_set` will be used to verify validity of potential responses.
pub fn request(&mut self, block: NumberFor<B>, active_set: ValidatorSet<AuthorityId>) {
pub fn request(&mut self, block: NumberFor<B>, active_set: ValidatorSet<AuthId>) {
// ignore new requests while there's already one pending
if matches!(self.state, State::AwaitingResponse(_, _, _)) {
return
Expand Down Expand Up @@ -171,7 +170,7 @@ where
fn process_response(
&mut self,
peer: PeerId,
req_info: &RequestInfo<B>,
req_info: &RequestInfo<B, AuthId>,
response: Result<Response, Canceled>,
) -> Result<BeefyVersionedFinalityProof<B, TSignature>, Error> {
response
Expand Down
10 changes: 5 additions & 5 deletions client/beefy/src/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ use crate::{
/// Wraps a `inner: BlockImport` and ultimately defers to it.
///
/// When using BEEFY, the block import worker should be using this block import object.
pub struct BeefyBlockImport<Block: BlockT, Backend, RuntimeApi, I, AuthId: Encode + Decode + Debug + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> {
pub struct BeefyBlockImport<Block: BlockT, Backend, RuntimeApi, I, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> {
backend: Arc<Backend>,
runtime: Arc<RuntimeApi>,
inner: I,
Expand All @@ -57,7 +57,7 @@ pub struct BeefyBlockImport<Block: BlockT, Backend, RuntimeApi, I, AuthId: Encod
_keystore: PhantomData::<BKS>
}

impl<Block: BlockT, BE, Runtime, I: Clone, AuthId: Encode + Decode + Debug + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> Clone for BeefyBlockImport<Block, BE, Runtime, I, AuthId, TSignature, BKS> {
impl<Block: BlockT, BE, Runtime, I: Clone, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> Clone for BeefyBlockImport<Block, BE, Runtime, I, AuthId, TSignature, BKS> {
fn clone(&self) -> Self {
BeefyBlockImport {
backend: self.backend.clone(),
Expand All @@ -70,7 +70,7 @@ impl<Block: BlockT, BE, Runtime, I: Clone, AuthId: Encode + Decode + Debug + Ord
}
}

impl<Block: BlockT, BE, Runtime, I, AuthId: Encode + Decode + Debug + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> BeefyBlockImport<Block, BE, Runtime, I, AuthId, TSignature, BKS> {
impl<Block: BlockT, BE, Runtime, I, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>> BeefyBlockImport<Block, BE, Runtime, I, AuthId, TSignature, BKS> {
/// Create a new BeefyBlockImport.
pub fn new(
backend: Arc<BE>,
Expand All @@ -88,7 +88,7 @@ where
BE: Backend<Block>,
Runtime: ProvideRuntimeApi<Block>,
Runtime::Api: BeefyApi<Block, AuthId> + Send,
AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
{
Expand Down Expand Up @@ -123,7 +123,7 @@ where
+ Sync,
Runtime: ProvideRuntimeApi<Block> + Send + Sync,
Runtime::Api: BeefyApi<Block, AuthId>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
{
Expand Down
8 changes: 4 additions & 4 deletions client/beefy/src/justification.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ pub type BeefyVersionedFinalityProof<Block, TSignature> =
beefy_primitives::VersionedFinalityProof<NumberFor<Block>, TSignature>;

/// Decode and verify a Beefy FinalityProof.
pub(crate) fn decode_and_verify_finality_proof<Block: BlockT, AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>>(
pub(crate) fn decode_and_verify_finality_proof<Block: BlockT, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>>(
encoded: &[u8],
target_number: NumberFor<Block>,
validator_set: &ValidatorSet<AuthId>,
Expand All @@ -41,7 +41,7 @@ pub(crate) fn decode_and_verify_finality_proof<Block: BlockT, AuthId: Encode + D
}

/// Verify the Beefy finality proof against the validator set at the block it was generated.
fn verify_with_validator_set<Block: BlockT, AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,>(
fn verify_with_validator_set<Block: BlockT, AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash, TSignature: Encode + Decode + Debug + Clone + Sync + Send, BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,>(
target_number: NumberFor<Block>,
validator_set: &ValidatorSet<AuthId>,
proof: &BeefyVersionedFinalityProof<Block, TSignature>,
Expand Down Expand Up @@ -111,7 +111,7 @@ pub(crate) mod tests {
fn should_verify_with_validator_set<TKeyPair, AuthId, TSignature, BKS>()
where
TKeyPair : SimpleKeyPair + SimpleKeyPair<Public = AuthId, Signature = TSignature>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash + BeefyAuthIdMaker,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash + BeefyAuthIdMaker,
TSignature: Encode + Decode + Debug + Clone + Sync + Send + std::cmp::PartialEq + 'static,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>,
{
Expand Down Expand Up @@ -193,7 +193,7 @@ pub(crate) mod tests {
()
where
TKeyPair : SimpleKeyPair + SimpleKeyPair<Public = AuthId, Signature = TSignature>,
AuthId: Encode + Decode + Debug + Ord + Sync + Send + std::hash::Hash + BeefyAuthIdMaker,
AuthId: Encode + Decode + Debug + Clone + Ord + Sync + Send + std::hash::Hash + BeefyAuthIdMaker,
TSignature: Encode + Decode + Debug + Clone + Sync + Send + std::cmp::PartialEq + 'static,
BKS: BeefyKeystore<AuthId, TSignature, Public = AuthId>
{
Expand Down
2 changes: 1 addition & 1 deletion client/beefy/src/keystore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ use sp_application_crypto::Pair as app_crypto_Pair;
/// wrapper around [`sp_keystore::SyncCryptoStore`] and allows to customize
/// common cryptographic functionality.
pub trait BeefyKeystore<AuthorityId, TSignature> : From<Option<SyncCryptoStorePtr>> + Sync + Send where
AuthorityId: Encode + Decode + Debug + Ord + Sync + Send,
AuthorityId: Encode + Decode + Debug + Clone + Ord + Sync + Send,
TSignature: Encode + Decode + Debug + Clone + Sync + Send,
{
type Public : Encode + Decode + Debug + From<AuthorityId> + Into<AuthorityId>;
Expand Down
Loading