[export] Use the new getters on Wallet
to generate export JSONs
This commit is contained in:
parent
63d5bcee93
commit
0d9c2f76e0
@ -64,9 +64,10 @@ use std::str::FromStr;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use miniscript::descriptor::{ShInner, WshInner};
|
use miniscript::descriptor::{ShInner, WshInner};
|
||||||
use miniscript::{Descriptor, DescriptorPublicKey, ScriptContext, Terminal};
|
use miniscript::{Descriptor, ScriptContext, Terminal};
|
||||||
|
|
||||||
use crate::database::BatchDatabase;
|
use crate::database::BatchDatabase;
|
||||||
|
use crate::types::KeychainKind;
|
||||||
use crate::wallet::Wallet;
|
use crate::wallet::Wallet;
|
||||||
|
|
||||||
/// Structure that contains the export of a wallet
|
/// Structure that contains the export of a wallet
|
||||||
@ -117,8 +118,12 @@ impl WalletExport {
|
|||||||
include_blockheight: bool,
|
include_blockheight: bool,
|
||||||
) -> Result<Self, &'static str> {
|
) -> Result<Self, &'static str> {
|
||||||
let descriptor = wallet
|
let descriptor = wallet
|
||||||
.descriptor
|
.get_descriptor_for_keychain(KeychainKind::External)
|
||||||
.to_string_with_secret(&wallet.signers.as_key_map(wallet.secp_ctx()));
|
.to_string_with_secret(
|
||||||
|
&wallet
|
||||||
|
.get_signers(KeychainKind::External)
|
||||||
|
.as_key_map(wallet.secp_ctx()),
|
||||||
|
);
|
||||||
let descriptor = remove_checksum(descriptor);
|
let descriptor = remove_checksum(descriptor);
|
||||||
Self::is_compatible_with_core(&descriptor)?;
|
Self::is_compatible_with_core(&descriptor)?;
|
||||||
|
|
||||||
@ -142,12 +147,24 @@ impl WalletExport {
|
|||||||
blockheight,
|
blockheight,
|
||||||
};
|
};
|
||||||
|
|
||||||
let desc_to_string = |d: &Descriptor<DescriptorPublicKey>| {
|
let change_descriptor = match wallet
|
||||||
let descriptor =
|
.public_descriptor(KeychainKind::Internal)
|
||||||
d.to_string_with_secret(&wallet.change_signers.as_key_map(wallet.secp_ctx()));
|
.map_err(|_| "Invalid change descriptor")?
|
||||||
remove_checksum(descriptor)
|
.is_some()
|
||||||
|
{
|
||||||
|
false => None,
|
||||||
|
true => {
|
||||||
|
let descriptor = wallet
|
||||||
|
.get_descriptor_for_keychain(KeychainKind::Internal)
|
||||||
|
.to_string_with_secret(
|
||||||
|
&wallet
|
||||||
|
.get_signers(KeychainKind::Internal)
|
||||||
|
.as_key_map(wallet.secp_ctx()),
|
||||||
|
);
|
||||||
|
Some(remove_checksum(descriptor))
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if export.change_descriptor() != wallet.change_descriptor.as_ref().map(desc_to_string) {
|
if export.change_descriptor() != change_descriptor {
|
||||||
return Err("Incompatible change descriptor");
|
return Err("Incompatible change descriptor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user