Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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()
}
Comment on lines 311 to 313
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this function is necessary. We can keep the base da_stake_table (or whatever Membership currently stores) separate from the epoch_da_committees that apply at specific epochs, as we do for the full quorum stake table anyway

}
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,
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this struct now unused? if so we should delete it

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

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like this should be imported from hotshot-types instead of re-defined

/// 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();
}
Comment on lines 394 to 396
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I see the reason for any of this -- can't we just use the same type? can't this entire block just be network_config.config.da_committees = da_committees


// 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(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this can (should) remain unchanged

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