Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions crates/builder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ pub mod testing {
let config: HotShotConfig<SeqTypes> = HotShotConfig {
num_nodes_with_stake: NonZeroUsize::new(num_nodes_with_stake).unwrap(),
known_da_nodes: known_nodes_with_stake.clone(),
da_committees: Default::default(),
known_nodes_with_stake: known_nodes_with_stake.clone(),
next_view_timeout: Duration::from_secs(5).as_millis() as u64,
num_bootstrap: 1usize,
Expand Down
2 changes: 1 addition & 1 deletion crates/builder/src/non_permissioned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ pub fn build_instance_state<V: Versions>(
let coordinator = EpochMembershipCoordinator::new(
Arc::new(RwLock::new(EpochCommittees::new_stake(
vec![],
vec![],
Default::default(),
None,
fetcher,
genesis.epoch_height.unwrap_or_default(),
Expand Down
1 change: 1 addition & 0 deletions crates/hotshot/testing/src/test_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ pub fn default_hotshot_config<TYPES: NodeType>(
start_threshold: (1, 1),
num_nodes_with_stake: NonZeroUsize::new(known_nodes_with_stake.len()).unwrap(),
known_da_nodes: known_da_nodes.clone(),
da_committees: Default::default(),
num_bootstrap: num_bootstrap_nodes,
known_nodes_with_stake: known_nodes_with_stake.clone(),
da_staked_committee_size: known_da_nodes.len(),
Expand Down
7 changes: 6 additions & 1 deletion crates/hotshot/types/src/hotshot_config_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use vec1::Vec1;

use crate::{
constants::REQUEST_DATA_DELAY, upgrade_config::UpgradeConfig, HotShotConfig, NodeType,
PeerConfig, ValidatorConfig,
PeerConfig, ValidatorConfig, VersionedDaCommittee,
};

/// Default builder URL, used as placeholder
Expand Down Expand Up @@ -45,6 +45,9 @@ pub struct HotShotConfigFile<TYPES: NodeType> {
#[serde(skip)]
/// The known DA nodes' public key and stake values
pub known_da_nodes: Vec<PeerConfig<TYPES>>,
#[serde(skip)]
/// The known DA nodes' public keys and stake values, by start epoch
pub da_committees: Vec<VersionedDaCommittee<TYPES>>,
/// Number of staking DA nodes
pub staked_da_nodes: usize,
/// Number of fixed leaders for GPU VID
Expand Down Expand Up @@ -89,6 +92,7 @@ impl<TYPES: NodeType> From<HotShotConfigFile<TYPES>> for HotShotConfig<TYPES> {
start_threshold: val.start_threshold,
num_nodes_with_stake: val.num_nodes_with_stake,
known_da_nodes: val.known_da_nodes,
da_committees: val.da_committees,
known_nodes_with_stake: val.known_nodes_with_stake,
da_staked_committee_size: val.staked_da_nodes,
fixed_leader_for_gpuvid: val.fixed_leader_for_gpuvid,
Expand Down Expand Up @@ -154,6 +158,7 @@ impl<TYPES: NodeType> HotShotConfigFile<TYPES> {
known_nodes_with_stake: gen_known_nodes_with_stake,
staked_da_nodes,
known_da_nodes,
da_committees: Default::default(),
fixed_leader_for_gpuvid: 1,
next_view_timeout: 10000,
view_sync_timeout: Duration::from_millis(1000),
Expand Down
18 changes: 18 additions & 0 deletions crates/hotshot/types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use traits::{
signature_key::{SignatureKey, StateSignatureKey},
};
use url::Url;
use vbs::version::Version;
use vec1::Vec1;

use crate::utils::bincode_opts;
Expand Down Expand Up @@ -181,6 +182,14 @@ impl<TYPES: NodeType> Debug for PeerConfig<TYPES> {
}
}

#[derive(Clone, derive_more::Debug, serde::Serialize, serde::Deserialize)]
#[serde(bound(deserialize = ""))]
pub struct VersionedDaCommittee<TYPES: NodeType> {
pub start_version: Version,
pub start_epoch: u64,
pub committee: Vec<PeerConfig<TYPES>>,
}

/// Holds configuration for a `HotShot`
#[derive(Clone, derive_more::Debug, serde::Serialize, serde::Deserialize)]
#[serde(bound(deserialize = ""))]
Expand All @@ -195,6 +204,8 @@ pub struct HotShotConfig<TYPES: NodeType> {
pub known_nodes_with_stake: Vec<PeerConfig<TYPES>>,
/// All public keys known to be DA nodes
pub known_da_nodes: Vec<PeerConfig<TYPES>>,
/// All public keys known to be DA nodes, by start epoch
pub da_committees: Vec<VersionedDaCommittee<TYPES>>,
/// List of DA committee (staking)nodes for static DA committee
pub da_staked_committee_size: usize,
/// Number of fixed leaders for GPU VID, normally it will be 0, it's only used when running GPU VID
Expand Down Expand Up @@ -266,4 +277,11 @@ impl<TYPES: NodeType> HotShotConfig<TYPES> {
pub fn hotshot_stake_table(&self) -> HSStakeTable<TYPES> {
self.known_nodes_with_stake.clone().into()
}

pub fn build_da_committees(&self) -> Vec<PeerConfig<TYPES>> {
// TODO: THIS IS A TEMPORARY FIX WITH THE WRONG RETURN TYPE.
// It's done so that we can start using this function and have the existing behavior
// (use known_da_nodes) while we transition to using da_committees.
self.known_da_nodes.clone()
}
}
1 change: 1 addition & 0 deletions hotshot-query-service/examples/simple-server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ async fn init_consensus(
next_view_timeout: 10000,
num_bootstrap: 0,
known_da_nodes: known_nodes_with_stake.clone(),
da_committees: Default::default(),
da_staked_committee_size: pub_keys.len(),
data_request_delay: Duration::from_millis(200),
view_sync_timeout: Duration::from_millis(250),
Expand Down
1 change: 1 addition & 0 deletions hotshot-query-service/src/testing/consensus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ impl<D: DataSourceLifeCycle + UpdateStatusData, V: Versions> MockNetwork<D, V> {
num_bootstrap: 0,
da_staked_committee_size: pub_keys.len(),
known_da_nodes: known_nodes_with_stake.clone(),
da_committees: Default::default(),
data_request_delay: Duration::from_millis(200),
view_sync_timeout: Duration::from_millis(250),
start_threshold: (
Expand Down
22 changes: 20 additions & 2 deletions sequencer/src/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ use std::{
use alloy::primitives::Address;
use anyhow::{Context, Ok};
use espresso_types::{
v0_3::ChainConfig, FeeAccount, FeeAmount, GenesisHeader, L1BlockInfo, L1Client, Timestamp,
Upgrade,
v0_3::ChainConfig, FeeAccount, FeeAmount, GenesisHeader, L1BlockInfo, L1Client, SeqTypes,
Timestamp, Upgrade,
};
use hotshot_types::traits::node_implementation::NodeType;
use serde::{Deserialize, Serialize};
use vbs::version::Version;

Expand Down Expand Up @@ -44,6 +45,21 @@ pub enum L1Finalized {
Timestamp { timestamp: Timestamp },
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct PeerConfigData {
pub stake_table_key: <SeqTypes as NodeType>::SignatureKey,
pub state_ver_key: <SeqTypes as NodeType>::StateSignatureKey,
pub stake: u64,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct VersionedDaCommittee {
#[serde(with = "version_ser")]
pub start_version: Version,
pub start_epoch: u64,
pub committee: Vec<PeerConfigData>,
}

/// Genesis of an Espresso chain.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Genesis {
Expand All @@ -67,6 +83,8 @@ pub struct Genesis {
#[serde(rename = "upgrade", with = "upgrade_ser")]
#[serde(default)]
pub upgrades: BTreeMap<Version, Upgrade>,
#[serde(default)]
pub da_committees: Option<Vec<VersionedDaCommittee>>,
}

impl Genesis {
Expand Down
30 changes: 27 additions & 3 deletions sequencer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,15 @@ use hotshot_types::{
epoch_membership::EpochMembershipCoordinator,
light_client::{StateKeyPair, StateSignKey},
signature_key::{BLSPrivKey, BLSPubKey},
stake_table::StakeTableEntry,
traits::{
metrics::{Metrics, NoMetrics},
network::ConnectedNetwork,
node_implementation::{NodeImplementation, NodeType, Versions},
storage::Storage,
},
utils::BuilderCommitment,
ValidatorConfig,
ValidatorConfig, VersionedDaCommittee,
};
pub use options::Options;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -390,6 +391,28 @@ where
network_config.config.epoch_start_block = epoch_start_block;
network_config.config.stake_table_capacity = stake_table_capacity;

if let Some(da_committees) = &genesis.da_committees {
tracing::warn!("setting da_committees from genesis");
network_config.config.da_committees = da_committees
.iter()
.map(|src| VersionedDaCommittee::<SeqTypes> {
start_version: src.start_version,
start_epoch: src.start_epoch,
committee: src
.committee
.iter()
.map(|pcd| hotshot_types::PeerConfig {
stake_table_entry: StakeTableEntry {
stake_key: pcd.stake_table_key,
stake_amount: U256::from(pcd.stake),
},
state_ver_key: pcd.state_ver_key.clone(),
})
.collect(),
})
.collect();
}

// If the `Libp2p` bootstrap nodes were supplied via the command line, override those
// present in the config file.
if let Some(bootstrap_nodes) = network_params.libp2p_bootstrap_nodes {
Expand Down Expand Up @@ -529,7 +552,7 @@ where
// Create the HotShot membership
let mut membership = EpochCommittees::new_stake(
network_config.config.known_nodes_with_stake.clone(),
network_config.config.known_da_nodes.clone(),
network_config.config.build_da_committees(),
block_reward,
fetcher,
epoch_height,
Expand Down Expand Up @@ -1020,6 +1043,7 @@ pub mod testing {
fixed_leader_for_gpuvid: 0,
num_nodes_with_stake: num_nodes.try_into().unwrap(),
known_da_nodes: known_nodes_with_stake.clone(),
da_committees: Default::default(),
known_nodes_with_stake: known_nodes_with_stake.clone(),
next_view_timeout: Duration::from_secs(5).as_millis() as u64,
num_bootstrap: 1usize,
Expand Down Expand Up @@ -1269,7 +1293,7 @@ pub mod testing {
let block_reward = fetcher.fetch_fixed_block_reward().await.ok();
let mut membership = EpochCommittees::new_stake(
config.known_nodes_with_stake.clone(),
config.known_da_nodes.clone(),
config.build_da_committees(),
block_reward,
fetcher,
config.epoch_height,
Expand Down
1 change: 1 addition & 0 deletions sequencer/src/restart_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,7 @@ impl TestNetwork {
.into_iter()
.collect(),
genesis_version: Version { major: 0, minor: 1 },
da_committees: None,
};

let node_params = (0..da_nodes + regular_nodes)
Expand Down
1 change: 1 addition & 0 deletions sequencer/src/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ mod test {
epoch_start_block: None,
stake_table_capacity: None,
genesis_version: Version { major: 0, minor: 1 },
da_committees: None,
};
genesis.to_file(&genesis_file).unwrap();

Expand Down
9 changes: 8 additions & 1 deletion types/src/v0/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use hotshot_types::{
network::{
BuilderType, CombinedNetworkConfig, Libp2pConfig, NetworkConfig, RandomBuilderConfig,
},
HotShotConfig, PeerConfig, ValidatorConfig,
HotShotConfig, PeerConfig, ValidatorConfig, VersionedDaCommittee,
};
use serde::{Deserialize, Serialize};
use tide_disco::Url;
Expand Down Expand Up @@ -55,6 +55,8 @@ pub struct PublicHotShotConfig {
num_nodes_with_stake: NonZeroUsize,
known_nodes_with_stake: Vec<PeerConfig<SeqTypes>>,
known_da_nodes: Vec<PeerConfig<SeqTypes>>,
#[serde(default)]
da_committees: Vec<VersionedDaCommittee<SeqTypes>>,
da_staked_committee_size: usize,
fixed_leader_for_gpuvid: usize,
next_view_timeout: u64,
Expand Down Expand Up @@ -105,6 +107,7 @@ impl From<HotShotConfig<SeqTypes>> for PublicHotShotConfig {
num_nodes_with_stake,
known_nodes_with_stake,
known_da_nodes,
da_committees,
da_staked_committee_size,
fixed_leader_for_gpuvid,
next_view_timeout,
Expand Down Expand Up @@ -133,6 +136,7 @@ impl From<HotShotConfig<SeqTypes>> for PublicHotShotConfig {
num_nodes_with_stake,
known_nodes_with_stake,
known_da_nodes,
da_committees,
da_staked_committee_size,
fixed_leader_for_gpuvid,
next_view_timeout,
Expand Down Expand Up @@ -165,6 +169,7 @@ impl PublicHotShotConfig {
num_nodes_with_stake: self.num_nodes_with_stake,
known_nodes_with_stake: self.known_nodes_with_stake,
known_da_nodes: self.known_da_nodes,
da_committees: self.da_committees,
da_staked_committee_size: self.da_staked_committee_size,
fixed_leader_for_gpuvid: self.fixed_leader_for_gpuvid,
next_view_timeout: self.next_view_timeout,
Expand Down Expand Up @@ -196,9 +201,11 @@ impl PublicHotShotConfig {
pub fn known_da_nodes(&self) -> Vec<PeerConfig<SeqTypes>> {
self.known_da_nodes.clone()
}

pub fn blocks_per_epoch(&self) -> u64 {
self.epoch_height
}

pub fn epoch_start_block(&self) -> u64 {
self.epoch_start_block
}
Expand Down
8 changes: 4 additions & 4 deletions types/src/v0/impls/instance_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ impl NodeState {

let membership = Arc::new(RwLock::new(EpochCommittees::new_stake(
vec![],
vec![],
Default::default(),
None,
Fetcher::mock(),
0,
Expand Down Expand Up @@ -202,7 +202,7 @@ impl NodeState {

let membership = Arc::new(RwLock::new(EpochCommittees::new_stake(
vec![],
vec![],
Default::default(),
None,
Fetcher::mock(),
0,
Expand Down Expand Up @@ -232,7 +232,7 @@ impl NodeState {

let membership = Arc::new(RwLock::new(EpochCommittees::new_stake(
vec![],
vec![],
Default::default(),
None,
Fetcher::mock(),
0,
Expand Down Expand Up @@ -327,7 +327,7 @@ impl Default for NodeState {

let membership = Arc::new(RwLock::new(EpochCommittees::new_stake(
vec![],
vec![],
Default::default(),
None,
Fetcher::mock(),
0,
Expand Down
2 changes: 1 addition & 1 deletion types/src/v0/v0_3/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ pub use header::*;
pub use nsproof::*;
pub use stake_table::*;
pub use state::*;
pub use txproof::*;
pub use txproof::*;
Loading