mirror of
https://github.com/aljazceru/cdk.git
synced 2026-01-11 00:45:39 +01:00
fix(mint): mint keyset generation from xpriv
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user