From 7ad12c50db52309c5a22e7fe52ca2e3018f8c178 Mon Sep 17 00:00:00 2001 From: edouard Date: Wed, 30 Aug 2023 14:21:45 +0200 Subject: [PATCH] check imported descriptor network close #337 --- gui/src/installer/step/descriptor.rs | 31 ++++++++++++++++++++++++---- gui/src/installer/view.rs | 16 +++++++------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/gui/src/installer/step/descriptor.rs b/gui/src/installer/step/descriptor.rs index 68ed4010..a23217f8 100644 --- a/gui/src/installer/step/descriptor.rs +++ b/gui/src/installer/step/descriptor.rs @@ -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 diff --git a/gui/src/installer/view.rs b/gui/src/installer/view.rs index 836856f5..7e265b49 100644 --- a/gui/src/installer/view.rs +++ b/gui/src/installer/view.rs @@ -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,