use bitcoin::bip32::Xpriv;
use bitcoin::key::rand;
use bitcoin::Network;
use rand::Fill;
use std::{
fs::File,
io::Write,
path::{Path, PathBuf},
};
pub fn xprv_from_path(path: PathBuf, network: Network) -> anyhow::Result<Xpriv> {
let seed_path = path.join("seed.ddk");
let seed = if Path::new(&seed_path).exists() {
let seed = std::fs::read(&seed_path)?;
let mut key = [0; 32];
key.copy_from_slice(&seed);
Xpriv::new_master(network, &seed)?
} else {
let mut file = File::create(&seed_path)?;
let mut entropy = [0u8; 32];
entropy.try_fill(&mut rand::thread_rng())?;
let xprv = Xpriv::new_master(network, &entropy)?;
file.write_all(&entropy)?;
xprv
};
Ok(seed)
}