Skip to content

Commit c85bb00

Browse files
committed
[export] Use the new getters on Wallet to generate export JSONs
1 parent 9cc2372 commit c85bb00

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/wallet/export.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,10 @@ use std::str::FromStr;
6464
use serde::{Deserialize, Serialize};
6565

6666
use miniscript::descriptor::{ShInner, WshInner};
67-
use miniscript::{Descriptor, DescriptorPublicKey, ScriptContext, Terminal};
67+
use miniscript::{Descriptor, ScriptContext, Terminal};
6868

6969
use crate::database::BatchDatabase;
70+
use crate::types::KeychainKind;
7071
use crate::wallet::Wallet;
7172

7273
/// Structure that contains the export of a wallet
@@ -117,8 +118,12 @@ impl WalletExport {
117118
include_blockheight: bool,
118119
) -> Result<Self, &'static str> {
119120
let descriptor = wallet
120-
.descriptor
121-
.to_string_with_secret(&wallet.signers.as_key_map(wallet.secp_ctx()));
121+
.get_descriptor_for_keychain(KeychainKind::External)
122+
.to_string_with_secret(
123+
&wallet
124+
.get_signers(KeychainKind::External)
125+
.as_key_map(wallet.secp_ctx()),
126+
);
122127
let descriptor = remove_checksum(descriptor);
123128
Self::is_compatible_with_core(&descriptor)?;
124129

@@ -142,12 +147,20 @@ impl WalletExport {
142147
blockheight,
143148
};
144149

145-
let desc_to_string = |d: &Descriptor<DescriptorPublicKey>| {
146-
let descriptor =
147-
d.to_string_with_secret(&wallet.change_signers.as_key_map(wallet.secp_ctx()));
148-
remove_checksum(descriptor)
150+
let change_descriptor = match wallet.has_internal_descriptor() {
151+
false => None,
152+
true => {
153+
let descriptor = wallet
154+
.get_descriptor_for_keychain(KeychainKind::Internal)
155+
.to_string_with_secret(
156+
&wallet
157+
.get_signers(KeychainKind::Internal)
158+
.as_key_map(wallet.secp_ctx()),
159+
);
160+
Some(remove_checksum(descriptor))
161+
}
149162
};
150-
if export.change_descriptor() != wallet.change_descriptor.as_ref().map(desc_to_string) {
163+
if export.change_descriptor() != change_descriptor {
151164
return Err("Incompatible change descriptor");
152165
}
153166

0 commit comments

Comments
 (0)