use std::{
collections::BTreeMap,
time::{Duration, SystemTime},
};
use crate::{
byron::{ByronAddress, ProtocolMagic, StakeholderId},
fees::LinearFee,
Coin,
};
use cml_crypto::{
chain_crypto::{self, Ed25519, Ed25519Bip32},
BlockHeaderHash,
};
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
#[cfg_attr(feature = "generic-serialization", derive(Serialize, Deserialize))]
pub struct Config {
pub protocol_magic: ProtocolMagic,
}
impl Config {
pub fn new(protocol_magic: ProtocolMagic) -> Self {
Config { protocol_magic }
}
}
impl Default for Config {
fn default() -> Self {
Config::new(ProtocolMagic::default())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GenesisData {
pub genesis_prev: BlockHeaderHash,
pub epoch_stability_depth: usize, pub start_time: SystemTime,
pub slot_duration: Duration,
pub protocol_magic: ProtocolMagic,
pub fee_policy: LinearFee,
pub avvm_distr: BTreeMap<chain_crypto::PublicKey<Ed25519>, Coin>, pub non_avvm_balances: BTreeMap<ByronAddress, Coin>,
pub boot_stakeholders: BTreeMap<StakeholderId, BootStakeholder>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BootStakeholder {
pub weight: BootStakeWeight,
pub issuer_pk: chain_crypto::PublicKey<Ed25519Bip32>,
pub delegate_pk: chain_crypto::PublicKey<Ed25519Bip32>,
pub cert: chain_crypto::Signature<(), Ed25519Bip32>,
}
pub type BootStakeWeight = u16;