diff --git a/Cargo.lock b/Cargo.lock index 9edcfedc7..3be89b028 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2007,6 +2007,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "delegate" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e018fccbeeb50ff26562ece792ed06659b9c2dae79ece77c4456bb10d9bf79b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + [[package]] name = "der" version = "0.7.9" @@ -3048,8 +3059,8 @@ dependencies = [ [[package]] name = "hotshot" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-broadcast", @@ -3096,7 +3107,7 @@ dependencies = [ [[package]] name = "hotshot-builder-api" version = "0.1.7" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "async-trait", "clap", @@ -3114,8 +3125,8 @@ dependencies = [ [[package]] name = "hotshot-example-types" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-broadcast", @@ -3147,8 +3158,8 @@ dependencies = [ [[package]] name = "hotshot-fakeapi" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-lock 2.8.0", @@ -3166,8 +3177,8 @@ dependencies = [ [[package]] name = "hotshot-macros" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "derive_builder", "proc-macro2", @@ -3177,8 +3188,8 @@ dependencies = [ [[package]] name = "hotshot-orchestrator" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-compatibility-layer", @@ -3266,8 +3277,8 @@ dependencies = [ [[package]] name = "hotshot-task" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-broadcast", @@ -3281,8 +3292,8 @@ dependencies = [ [[package]] name = "hotshot-task-impls" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-broadcast", @@ -3318,8 +3329,8 @@ dependencies = [ [[package]] name = "hotshot-testing" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-broadcast", @@ -3365,7 +3376,7 @@ dependencies = [ [[package]] name = "hotshot-types" version = "0.1.11" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "ark-bn254", @@ -3398,11 +3409,13 @@ dependencies = [ "jf-utils", "jf-vid", "lazy_static", + "libp2p", "memoize", "rand 0.8.5", "rand_chacha 0.3.1", "reqwest", "serde", + "serde_bytes", "sha2 0.10.8", "snafu 0.8.4", "tagged-base64", @@ -4536,8 +4549,8 @@ dependencies = [ [[package]] name = "libp2p-networking" -version = "0.5.69" -source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.70#3e38cdf852816d73a3b4ffc58c5ccd3a0c6e8028" +version = "0.5.71" +source = "git+https://github.com/EspressoSystems/HotShot.git?tag=0.5.71#4058349be9bd021f8e78f4e1b71327ee61c588de" dependencies = [ "anyhow", "async-compatibility-layer", @@ -4547,6 +4560,7 @@ dependencies = [ "bincode", "blake3", "custom_debug 0.5.1", + "delegate", "derive_builder", "either", "futures", diff --git a/Cargo.toml b/Cargo.toml index 8fc4166fd..2ee190f7a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,9 +75,9 @@ derivative = "2.2" derive_more = "0.99" either = "1.12" futures = "0.3" -hotshot = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.70" } -hotshot-testing = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.70" } -hotshot-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.70" } +hotshot = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.71" } +hotshot-testing = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.71" } +hotshot-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.71" } itertools = "0.12.1" jf-merkle-tree = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [ "std", @@ -119,7 +119,7 @@ tokio-postgres = { version = "0.7", optional = true, default-features = false, f # Dependencies enabled by feature "testing". espresso-macros = { git = "https://github.com/EspressoSystems/espresso-macros.git", tag = "0.1.0", optional = true } -hotshot-example-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.70", optional = true } +hotshot-example-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.71", optional = true } portpicker = { version = "0.1", optional = true } rand = { version = "0.8", optional = true } spin_sleep = { version = "1.2", optional = true } @@ -140,7 +140,7 @@ backtrace-on-stack-overflow = { version = "0.3", optional = true } clap = { version = "4.5", features = ["derive", "env"] } espresso-macros = { git = "https://github.com/EspressoSystems/espresso-macros.git", tag = "0.1.0" } generic-array = "0.14" -hotshot-example-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.70" } +hotshot-example-types = { git = "https://github.com/EspressoSystems/HotShot.git", tag = "0.5.71" } portpicker = "0.1" rand = "0.8" reqwest = "0.12.3" diff --git a/examples/simple-server.rs b/examples/simple-server.rs index 164ab054c..125d50385 100644 --- a/examples/simple-server.rs +++ b/examples/simple-server.rs @@ -26,8 +26,8 @@ use hotshot::{ HotShotInitializer, MarketplaceConfig, Memberships, SystemContext, }; use hotshot_example_types::{ - auction_results_provider_types::TestAuctionResultsProvider, node_types::TestVersions, - state_types::TestInstanceState, storage_types::TestStorage, + auction_results_provider_types::TestAuctionResultsProvider, state_types::TestInstanceState, + storage_types::TestStorage, }; use hotshot_query_service::{ data_source, @@ -36,7 +36,7 @@ use hotshot_query_service::{ status::UpdateStatusData, testing::{ consensus::DataSourceLifeCycle, - mocks::{MockBase, MockMembership, MockNodeImpl, MockTypes}, + mocks::{MockBase, MockMembership, MockNodeImpl, MockTypes, MockVersions}, }, Error, }; @@ -143,7 +143,7 @@ async fn main() -> Result<(), Error> { async fn init_consensus( data_sources: &[DataSource], -) -> Vec> { +) -> Vec> { let (pub_keys, priv_keys): (Vec<_>, Vec<_>) = (0..data_sources.len()) .map(|i| BLSPubKey::generated_from_seed_indexed([0; 32], i as u64)) .unzip(); @@ -270,11 +270,9 @@ async fn init_consensus( config, memberships, network, - HotShotInitializer::from_genesis(TestInstanceState { - delay_config: Default::default(), - }) - .await - .unwrap(), + HotShotInitializer::from_genesis(TestInstanceState::default()) + .await + .unwrap(), ConsensusMetricsValue::new(&*data_source.populate_metrics()), storage, MarketplaceConfig { diff --git a/src/availability.rs b/src/availability.rs index e4d58f3c6..6f329e6a8 100644 --- a/src/availability.rs +++ b/src/availability.rs @@ -863,9 +863,7 @@ mod test { // mock up some consensus data. let leaf = Leaf::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; diff --git a/src/data_source.rs b/src/data_source.rs index ac698266b..2f05145dc 100644 --- a/src/data_source.rs +++ b/src/data_source.rs @@ -465,16 +465,12 @@ pub mod persistence_tests { // Mock up some consensus data. let mut qc = QuorumCertificate::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; let mut leaf = Leaf::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; // Increment the block number, to distinguish this block from the genesis block, which @@ -520,16 +516,12 @@ pub mod persistence_tests { // Mock up some consensus data. let mut qc = QuorumCertificate::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; let mut leaf = Leaf::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; // Increment the block number, to distinguish this block from the genesis block, which @@ -614,18 +606,14 @@ pub mod node_tests { let mut leaves = vec![ LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await, ]; let mut blocks = vec![ BlockQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await, ]; @@ -764,9 +752,7 @@ pub mod node_tests { >::from_transactions( [mock_transaction(vec![i as u8 % 2])], &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await .unwrap(); @@ -784,9 +770,7 @@ pub mod node_tests { let mut leaf = LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; *leaf.leaf.block_header_mut() = header.clone(); @@ -842,9 +826,7 @@ pub mod node_tests { // Insert test data with VID common and a share. let leaf = LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; let common = VidCommonQueryData::new(leaf.header().clone(), disperse.common); diff --git a/src/data_source/fs.rs b/src/data_source/fs.rs index 6d1ef2c09..34aa4928a 100644 --- a/src/data_source/fs.rs +++ b/src/data_source/fs.rs @@ -97,7 +97,7 @@ use std::path::Path; /// # }; /// # use hotshot_query_service::fetching::provider::NoFetching; /// # use hotshot_query_service::testing::mocks::{ -/// # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, +/// # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, MockVersions as AppVersions /// # }; /// # use hotshot_example_types::node_types::TestVersions; /// # use std::path::Path; @@ -112,7 +112,7 @@ use std::path::Path; /// /// async fn init_server( /// storage_path: &Path, -/// hotshot: SystemContextHandle, +/// hotshot: SystemContextHandle, /// ) -> Result>, Error>, Error> { /// let mut loader = AtomicStoreLoader::create(storage_path, "my_app") // or `open` /// .map_err(Error::internal)?; diff --git a/src/data_source/metrics.rs b/src/data_source/metrics.rs index 1a91a7838..b15a08842 100644 --- a/src/data_source/metrics.rs +++ b/src/data_source/metrics.rs @@ -35,14 +35,14 @@ use async_trait::async_trait; /// # use hotshot_query_service::{ /// # data_source::MetricsDataSource, /// # status::UpdateStatusData, -/// # testing::mocks::{MockNodeImpl as AppNodeImpl, MockTypes as AppTypes}, +/// # testing::mocks::{MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, MockVersions as AppVersions}, /// # Error, /// # }; /// # use hotshot_types::consensus::ConsensusMetricsValue; /// # use hotshot_example_types::node_types::TestVersions; /// # async fn doc() -> Result<(), hotshot_query_service::Error> { /// let data_source = MetricsDataSource::default(); -/// let hotshot = SystemContext::::init( +/// let hotshot = SystemContext::::init( /// # panic!(), panic!(), panic!(), panic!(), panic!(), panic!(), panic!(), /// ConsensusMetricsValue::new(&*data_source.populate_metrics()), panic!(), /// panic!(), diff --git a/src/data_source/sql.rs b/src/data_source/sql.rs index d25b97243..43c6e7fb4 100644 --- a/src/data_source/sql.rs +++ b/src/data_source/sql.rs @@ -261,7 +261,7 @@ impl Config { /// # }; /// # use hotshot_query_service::fetching::provider::NoFetching; /// # use hotshot_query_service::testing::mocks::{ -/// # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, +/// # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, MockVersions as AppVersions /// # }; /// # use hotshot_example_types::node_types::TestVersions; /// # use tide_disco::App; @@ -273,7 +273,7 @@ impl Config { /// /// async fn init_server( /// config: Config, -/// hotshot: SystemContextHandle, +/// hotshot: SystemContextHandle, /// ) -> Result>, Error>, Error> { /// let mut hotshot_qs = config.connect(NoFetching).await.map_err(Error::internal)?; /// // Initialize storage for other modules, using `hotshot_qs` to access the database. @@ -445,9 +445,7 @@ mod test { // Insert test data with VID common but no share. let leaf = LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; let common = VidCommonQueryData::new(leaf.header().clone(), disperse.common); diff --git a/src/data_source/storage/sql.rs b/src/data_source/storage/sql.rs index 5e741f56b..a7154fbfb 100644 --- a/src/data_source/storage/sql.rs +++ b/src/data_source/storage/sql.rs @@ -3341,9 +3341,7 @@ mod test { let mut storage = SqlStorage::connect(cfg).await.unwrap(); let mut leaf = LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; // insert some mock data @@ -3426,9 +3424,7 @@ mod test { let mut storage = SqlStorage::connect(db.config()).await.unwrap(); let mut leaf = LeafQueryData::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; // insert some mock data diff --git a/src/lib.rs b/src/lib.rs index 1b3491bc7..889ed1362 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,7 +22,7 @@ //! ``` //! # use hotshot::types::SystemContextHandle; //! # use hotshot_query_service::testing::mocks::{ -//! # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, +//! # MockNodeImpl as AppNodeImpl, MockTypes as AppTypes, MockVersions as AppVersions, //! # }; //! # use hotshot_example_types::node_types::TestVersions; //! # use hotshot_types::consensus::ConsensusMetricsValue; @@ -50,7 +50,7 @@ //! .map_err(Error::internal)?; //! //! // Create hotshot, giving it a handle to the status metrics. -//! let hotshot = SystemContext::::init( +//! let hotshot = SystemContext::::init( //! # panic!(), panic!(), panic!(), panic!(), panic!(), panic!(), panic!(), //! ConsensusMetricsValue::new(&*data_source.populate_metrics()), panic!(), //! panic!() @@ -102,10 +102,9 @@ //! # use vbs::version::StaticVersionType; //! # use hotshot_query_service::{data_source::FileSystemDataSource, Error, Options}; //! # use hotshot_query_service::fetching::provider::NoFetching; -//! # use hotshot_query_service::testing::mocks::{MockBase, MockNodeImpl, MockTypes}; -//! # use hotshot_example_types::node_types::TestVersions; +//! # use hotshot_query_service::testing::mocks::{MockBase, MockNodeImpl, MockTypes, MockVersions}; //! # use std::path::Path; -//! # async fn doc(storage_path: &Path, options: Options, hotshot: SystemContextHandle) -> Result<(), Error> { +//! # async fn doc(storage_path: &Path, options: Options, hotshot: SystemContextHandle) -> Result<(), Error> { //! use hotshot_query_service::run_standalone_service; //! //! let data_source = FileSystemDataSource::create(storage_path, NoFetching).await.map_err(Error::internal)?; @@ -493,13 +492,13 @@ pub async fn run_standalone_service< Types: NodeType, I: NodeImplementation, D, - Ver, - V: Versions, + ApiVer, + HsVer: Versions, >( options: Options, data_source: D, - hotshot: SystemContextHandle, - bind_version: Ver, + hotshot: SystemContextHandle, + bind_version: ApiVer, ) -> Result<(), Error> where Payload: availability::QueryablePayload, @@ -512,7 +511,7 @@ where + Send + Sync + 'static, - Ver: StaticVersionType + 'static, + ApiVer: StaticVersionType + 'static, { // Create API modules. let availability_api = @@ -724,9 +723,7 @@ mod test { // Mock up some data and add a block to the store. let leaf = Leaf::::genesis( &TestValidatedState::default(), - &TestInstanceState { - delay_config: Default::default(), - }, + &TestInstanceState::default(), ) .await; let block = BlockQueryData::new(leaf.block_header().clone(), MockPayload::genesis()); diff --git a/src/testing/consensus.rs b/src/testing/consensus.rs index 4c8f06228..dbdc6c291 100644 --- a/src/testing/consensus.rs +++ b/src/testing/consensus.rs @@ -10,7 +10,7 @@ // You should have received a copy of the GNU General Public License along with this program. If not, // see . -use super::mocks::{MockMembership, MockNodeImpl, MockTransaction, MockTypes}; +use super::mocks::{MockMembership, MockNodeImpl, MockTransaction, MockTypes, MockVersions}; use crate::{ availability::AvailabilityDataSource, data_source::{FileSystemDataSource, SqlDataSource, UpdateDataSource, VersionedDataSource}, @@ -32,8 +32,8 @@ use hotshot::{ HotShotInitializer, MarketplaceConfig, Memberships, SystemContext, }; use hotshot_example_types::{ - auction_results_provider_types::TestAuctionResultsProvider, node_types::TestVersions, - state_types::TestInstanceState, storage_types::TestStorage, + auction_results_provider_types::TestAuctionResultsProvider, state_types::TestInstanceState, + storage_types::TestStorage, }; use hotshot_testing::block_builder::{SimpleBuilderImplementation, TestBuilderImplementation}; use hotshot_types::{ @@ -50,7 +50,7 @@ use tracing::{info_span, Instrument}; use url::Url; struct MockNode { - hotshot: SystemContextHandle, + hotshot: SystemContextHandle, data_source: Arc>, storage: D::Storage, } @@ -202,11 +202,9 @@ impl MockNetwork { config, memberships, network, - HotShotInitializer::from_genesis(TestInstanceState { - delay_config: Default::default(), - }) - .await - .unwrap(), + HotShotInitializer::from_genesis(TestInstanceState::default()) + .await + .unwrap(), ConsensusMetricsValue::new(&*data_source.populate_metrics()), hs_storage, MarketplaceConfig { @@ -246,7 +244,7 @@ impl MockNetwork { } impl MockNetwork { - pub fn handle(&self) -> &SystemContextHandle { + pub fn handle(&self) -> &SystemContextHandle { &self.nodes[0].hotshot } diff --git a/src/testing/mocks.rs b/src/testing/mocks.rs index 979ea38ca..c1fcdcf2e 100644 --- a/src/testing/mocks.rs +++ b/src/testing/mocks.rs @@ -20,7 +20,6 @@ use hotshot::traits::{ election::static_committee::GeneralStaticCommittee, implementations::MemoryNetwork, NodeImplementation, }; -use hotshot_example_types::node_types::TestVersions; use hotshot_example_types::{ auction_results_provider_types::{TestAuctionResult, TestAuctionResultsProvider}, block_types::{TestBlockHeader, TestBlockPayload, TestTransaction}, @@ -41,6 +40,7 @@ use jf_merkle_tree::{ }; use serde::{Deserialize, Serialize}; use std::ops::Range; +use vbs::version::StaticVersion; pub type MockHeader = TestBlockHeader; pub type MockPayload = TestBlockPayload; @@ -138,8 +138,22 @@ impl NodeType for MockTypes { type AuctionResult = TestAuctionResult; } +#[derive(Clone, Debug, Copy)] +pub struct MockVersions {} + +impl Versions for MockVersions { + type Base = StaticVersion<0, 1>; + type Upgrade = StaticVersion<0, 2>; + const UPGRADE_HASH: [u8; 32] = [ + 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, + ]; + + type Marketplace = StaticVersion<0, 3>; +} + /// A type alias for the mock base version -pub type MockBase = ::Base; +pub type MockBase = ::Base; pub type MockMembership = GeneralStaticCommittee::SignatureKey>; pub type MockQuorumProposal = QuorumProposal;