use std::{
collections::BTreeMap,
time::{Duration, SystemTime},
};
use crate::{ledger::{alonzo::fees::LinearFee, common::value::Coin}, chain_crypto::{Ed25519Bip32, self, Ed25519}, crypto::BlockHeaderHash, byron::{ProtocolMagic, ByronAddress, StakeholderId}};
#[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: 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;