use crate::{
builder::InputSrcTx, transaction::Output, DbcId, DbcTransaction, DerivationIndex, DerivedKey,
FeeOutput, Input, MainKey,
};
use blsttc::IntoFr;
pub struct GenesisMaterial {
pub input_dbc_id: DbcId,
pub genesis_tx: (DbcTransaction, DerivedKey, InputSrcTx),
pub main_key: MainKey,
pub derivation_index: DerivationIndex,
}
impl GenesisMaterial {
pub const GENESIS_AMOUNT: u64 = u64::MAX; }
impl Default for GenesisMaterial {
fn default() -> Self {
let input_sk_seed: u64 = 1234567890;
let input_derived_key =
DerivedKey::new(blsttc::SecretKey::from_mut(&mut input_sk_seed.into_fr()));
let output_main_key = MainKey::random();
let output_derivation_index = [1; 32];
let output_derived_key = output_main_key.derive_key(&output_derivation_index);
let input = Input::new(input_derived_key.dbc_id(), Self::GENESIS_AMOUNT);
let output = Output::new(output_derived_key.dbc_id(), Self::GENESIS_AMOUNT);
let genesis_tx = DbcTransaction {
inputs: vec![input],
outputs: vec![output],
fee: FeeOutput::default(),
};
let input_src_tx = DbcTransaction::empty();
Self {
input_dbc_id: input_derived_key.dbc_id(), genesis_tx: (genesis_tx, input_derived_key, input_src_tx), main_key: output_main_key,
derivation_index: output_derivation_index,
}
}
}