Merge #655: check imported descriptor network

7ad12c50db52309c5a22e7fe52ca2e3018f8c178 check imported descriptor network (edouard)

Pull request description:

  close #337

ACKs for top commit:
  edouardparis:
    Self-ACK 7ad12c50db52309c5a22e7fe52ca2e3018f8c178

Tree-SHA512: d760540fedbdfc4eff4ff8c34305a6c98d5f9817c981289903e11f7c536fb0dedf490f1eb72ccaa392f02db8b28f8c19f9edc386b5cb8afbaffa0e4aa59c49f3
This commit is contained in:
edouard 2023-08-30 15:56:49 +02:00
commit 52f3ac6a09
No known key found for this signature in database
GPG Key ID: E65F7A089C20DC8F
2 changed files with 36 additions and 11 deletions

View File

@ -1250,6 +1250,20 @@ impl ImportDescriptor {
error: None,
}
}
fn check_descriptor(&mut self) {
if !self.imported_descriptor.value.is_empty() {
if let Ok(desc) = LianaDescriptor::from_str(&self.imported_descriptor.value) {
if self.network == Network::Bitcoin {
self.imported_descriptor.valid = desc.all_xpubs_net_is(self.network);
} else {
self.imported_descriptor.valid = desc.all_xpubs_net_is(Network::Testnet);
}
} else {
self.imported_descriptor.valid = false;
}
}
}
}
impl Step for ImportDescriptor {
@ -1262,10 +1276,11 @@ impl Step for ImportDescriptor {
let mut network_datadir = self.data_dir.clone().unwrap();
network_datadir.push(self.network.to_string());
self.network_valid = !network_datadir.exists();
self.check_descriptor();
}
Message::DefineDescriptor(message::DefineDescriptor::ImportDescriptor(desc)) => {
self.imported_descriptor.value = desc;
self.imported_descriptor.valid = true;
self.check_descriptor();
}
_ => {}
};
@ -1287,9 +1302,17 @@ impl Step for ImportDescriptor {
// descriptor forms for import or creation cannot be both empty or filled.
if !self.imported_descriptor.value.is_empty() {
if let Ok(desc) = LianaDescriptor::from_str(&self.imported_descriptor.value) {
self.imported_descriptor.valid = true;
ctx.descriptor = Some(desc);
true
if self.network == Network::Bitcoin {
self.imported_descriptor.valid = desc.all_xpubs_net_is(self.network);
} else {
self.imported_descriptor.valid = desc.all_xpubs_net_is(Network::Testnet);
}
if self.imported_descriptor.valid {
ctx.descriptor = Some(desc);
true
} else {
false
}
} else {
self.imported_descriptor.valid = false;
false

View File

@ -409,13 +409,15 @@ pub fn import_descriptor<'a>(
})
.push(col_descriptor),
)
.push(if imported_descriptor.value.is_empty() {
button::primary(None, "Next").width(Length::Fixed(200.0))
} else {
button::primary(None, "Next")
.width(Length::Fixed(200.0))
.on_press(Message::Next)
})
.push(
if imported_descriptor.value.is_empty() || !imported_descriptor.valid {
button::primary(None, "Next").width(Length::Fixed(200.0))
} else {
button::primary(None, "Next")
.width(Length::Fixed(200.0))
.on_press(Message::Next)
},
)
.push_maybe(error.map(|e| card::error("Invalid descriptor", e.to_string())))
.spacing(50),
true,