fix(mint): mint keyset generation from xpriv

This commit is contained in:
thesimplekid
2024-06-24 16:55:58 +01:00
parent 5123571687
commit 935c74449a
2 changed files with 39 additions and 13 deletions

View File

@@ -45,17 +45,29 @@ impl Mint {
ExtendedPrivKey::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted");
let mut keysets = HashMap::new();
let keysets_info = localstore.get_keyset_infos().await?;
if keysets_info.is_empty() {
let derivation_path = DerivationPath::from(vec![
ChildNumber::from_hardened_idx(0).expect("0 is a valid index")
]);
let (keyset, keyset_info) =
create_new_keyset(&secp_ctx, xpriv, derivation_path, CurrencyUnit::Sat, 64);
let id = keyset_info.id;
localstore.add_keyset_info(keyset_info).await?;
localstore.add_active_keyset(CurrencyUnit::Sat, id).await?;
keysets.insert(id, keyset);
let keysets_infos = localstore.get_keyset_infos().await?;
match keysets_infos.is_empty() {
false => {
for keyset_info in keysets_infos {
if keyset_info.active {
let id = keyset_info.id;
let keyset = MintKeySet::generate_from_xpriv(&secp_ctx, xpriv, keyset_info);
keysets.insert(id, keyset);
}
}
}
true => {
let derivation_path = DerivationPath::from(vec![
ChildNumber::from_hardened_idx(0).expect("0 is a valid index")
]);
let (keyset, keyset_info) =
create_new_keyset(&secp_ctx, xpriv, derivation_path, CurrencyUnit::Sat, 64);
let id = keyset_info.id;
localstore.add_keyset_info(keyset_info).await?;
localstore.add_active_keyset(CurrencyUnit::Sat, id).await?;
keysets.insert(id, keyset);
}
}
let mint_url = UncheckedUrl::from(mint_url);

View File

@@ -315,7 +315,14 @@ impl MintKeySet {
ExtendedPrivKey::new_master(bitcoin::Network::Bitcoin, seed).expect("RNG busted");
let max_order = info.max_order;
let unit = info.unit;
Self::generate(secp, xpriv, unit, max_order)
Self::generate(
secp,
xpriv
.derive_priv(secp, &info.derivation_path)
.expect("RNG busted"),
unit,
max_order,
)
}
pub fn generate_from_xpriv<C: secp256k1::Signing>(
@@ -325,7 +332,14 @@ impl MintKeySet {
) -> Self {
let max_order = info.max_order;
let unit = info.unit;
Self::generate(secp, xpriv, unit, max_order)
Self::generate(
secp,
xpriv
.derive_priv(secp, &info.derivation_path)
.expect("RNG busted"),
unit,
max_order,
)
}
}