Skip to content

Commit

Permalink
ledger upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
pythcoiner committed Aug 19, 2024
1 parent 9525838 commit 4e12e1b
Show file tree
Hide file tree
Showing 21 changed files with 2,481 additions and 1,300 deletions.
2,310 changes: 1,255 additions & 1,055 deletions gui/Cargo.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions gui/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ bitcoin_hashes = "0.12"
reqwest = { version = "0.11", default-features=false, features = ["json", "rustls-tls"] }
rust-ini = "0.19.0"

ledger_manager = { git = "https://github.com/pythcoiner/ledger_installer.git", branch = "liana", ref = "afcc0e5db74488191b5d9b3f28eaad8717772c58"}

[patch.crates-io]
iced_style = { git = "https://github.com/edouardparis/iced", branch = "patch-0.12.3"}
Expand Down
3 changes: 3 additions & 0 deletions gui/src/app/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use crate::{
app::{cache::Cache, error::Error, view, wallet::Wallet},
daemon::model::*,
hw::HardwareWalletMessage,
ledger_upgrade::UpgradeMessage,
};

#[derive(Debug)]
Expand Down Expand Up @@ -44,4 +45,6 @@ pub enum Message {
LabelsUpdated(Result<HashMap<String, Option<String>>, Error>),
BroadcastModal(Result<HashSet<Txid>, Error>),
RbfModal(Box<HistoryTransaction>, bool, Result<HashSet<Txid>, Error>),
UpgradeLedger(String, Network),
Upgrade(UpgradeMessage),
}
34 changes: 32 additions & 2 deletions gui/src/app/state/psbt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ use crate::{
Daemon,
},
hw::{HardwareWallet, HardwareWallets},
ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state},
};

pub trait Action {
Expand Down Expand Up @@ -410,6 +411,7 @@ pub struct SignAction {
signed: HashSet<Fingerprint>,
is_saved: bool,
display_modal: bool,
upgrading: bool,
}

impl SignAction {
Expand All @@ -428,13 +430,20 @@ impl SignAction {
signed,
is_saved,
display_modal: true,
upgrading: false,
}
}
}

impl Action for SignAction {
fn subscription(&self) -> Subscription<Message> {
self.hws.refresh().map(Message::HardwareWallets)
let mut subs = ledger_upgrade_subscriptions(&self.hws);
subs.push(
self.hws
.refresh(self.wallet.main_descriptor.is_taproot())
.map(Message::HardwareWallets),
);
Subscription::batch(subs)
}

fn update(
Expand Down Expand Up @@ -467,6 +476,12 @@ impl Action for SignAction {
|(fg, res)| Message::Signed(fg, res),
);
}
Message::View(view::Message::UpgradeLedger(id, network)) => {
maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading);
}
Message::Upgrade(msg) => {
update_upgrade_state(msg, &mut self.hws, &mut self.upgrading);
}
Message::Signed(fingerprint, res) => {
self.signing.remove(&fingerprint);
match res {
Expand Down Expand Up @@ -526,6 +541,15 @@ impl Action for SignAction {
Command::none()
}
fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<'a, view::Message> {
let network = if self
.wallet
.main_descriptor
.all_xpubs_net_is(Network::Bitcoin)
{
Network::Bitcoin
} else {
Network::Testnet
};
let content = toast::Manager::new(
content,
view::psbt::sign_action_toasts(self.error.as_ref(), &self.hws.list, &self.signing),
Expand All @@ -544,9 +568,15 @@ impl Action for SignAction {
.and_then(|signer| self.wallet.keys_aliases.get(&signer.fingerprint)),
&self.signed,
&self.signing,
self.upgrading,
network,
),
)
.on_blur(Some(view::Message::Spend(view::SpendTxMessage::Cancel)))
.on_blur(if !self.upgrading {
Some(view::Message::Spend(view::SpendTxMessage::Cancel))
} else {
None
})
.into()
} else {
content
Expand Down
37 changes: 30 additions & 7 deletions gui/src/app/state/receive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ use crate::{
view,
wallet::Wallet,
},
daemon::{
model::{LabelItem, Labelled},
Daemon,
},
hw::{HardwareWallet, HardwareWallets},
};

use crate::daemon::{
model::{LabelItem, Labelled},
Daemon,
ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state},
};

pub enum Modal {
Expand Down Expand Up @@ -89,7 +89,11 @@ impl State for ReceivePanel {

match &self.modal {
Modal::VerifyAddress(m) => modal::Modal::new(content, m.view())
.on_blur(Some(view::Message::Close))
.on_blur(if !m.upgrading {
Some(view::Message::Close)
} else {
None
})
.into(),
Modal::ShowQrCode(m) => modal::Modal::new(content, m.view())
.on_blur(Some(view::Message::Close))
Expand Down Expand Up @@ -152,6 +156,7 @@ impl State for ReceivePanel {
.derivation_indexes
.get(i)
.expect("Must be present"),
self.wallet.main_descriptor.is_taproot(),
));
Command::none()
}
Expand Down Expand Up @@ -222,6 +227,8 @@ pub struct VerifyAddressModal {
hws: HardwareWallets,
address: Address,
derivation_index: ChildNumber,
taproot: bool,
pub upgrading: bool,
}

impl VerifyAddressModal {
Expand All @@ -231,30 +238,38 @@ impl VerifyAddressModal {
network: Network,
address: Address,
derivation_index: ChildNumber,
taproot: bool,
) -> Self {
Self {
warning: None,
chosen_hws: HashSet::new(),
hws: HardwareWallets::new(data_dir, network).with_wallet(wallet),
address,
derivation_index,
taproot,
upgrading: false,
}
}
}

impl VerifyAddressModal {
fn view(&self) -> Element<view::Message> {
let network = self.address.network();
view::receive::verify_address_modal(
self.warning.as_ref(),
&self.hws.list,
&self.chosen_hws,
&self.address,
&self.derivation_index,
self.upgrading,
*network,
)
}

fn subscription(&self) -> Subscription<Message> {
self.hws.refresh().map(Message::HardwareWallets)
let mut subs = ledger_upgrade_subscriptions(&self.hws);
subs.push(self.hws.refresh(self.taproot).map(Message::HardwareWallets));
Subscription::batch(subs)
}

fn update(
Expand Down Expand Up @@ -296,6 +311,14 @@ impl VerifyAddressModal {
Command::none()
}
}
Message::View(view::Message::UpgradeLedger(id, network)) => {
maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading);
Command::none()
}
Message::Upgrade(msg) => {
update_upgrade_state(msg, &mut self.hws, &mut self.upgrading);
Command::none()
}
_ => Command::none(),
}
}
Expand Down
37 changes: 35 additions & 2 deletions gui/src/app/state/settings/wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use crate::{
},
daemon::{Daemon, DaemonBackend},
hw::{HardwareWallet, HardwareWalletConfig, HardwareWallets},
ledger_upgrade::{ledger_upgrade_subscriptions, maybe_start_upgrade, update_upgrade_state},
};

pub struct WalletSettingsState {
Expand Down Expand Up @@ -84,7 +85,11 @@ impl State for WalletSettingsState {
);
if let Some(m) = &self.modal {
modal::Modal::new(content, m.view())
.on_blur(Some(view::Message::Close))
.on_blur(if !m.upgrading {
Some(view::Message::Close)
} else {
None
})
.into()
} else {
content
Expand Down Expand Up @@ -201,6 +206,7 @@ pub struct RegisterWalletModal {
hws: HardwareWallets,
registered: HashSet<Fingerprint>,
processing: bool,
pub upgrading: bool,
}

impl RegisterWalletModal {
Expand All @@ -217,23 +223,42 @@ impl RegisterWalletModal {
wallet,
processing: false,
registered,
upgrading: false,
}
}
}

impl RegisterWalletModal {
fn view(&self) -> Element<view::Message> {
let upgrading = self.hws.list.iter().any(|hw| hw.is_upgrade_in_progress());
let network = if self
.wallet
.main_descriptor
.all_xpubs_net_is(Network::Bitcoin)
{
Network::Bitcoin
} else {
Network::Testnet
};
view::settings::register_wallet_modal(
self.warning.as_ref(),
&self.hws.list,
self.processing,
self.chosen_hw,
&self.registered,
upgrading,
network,
)
}

fn subscription(&self) -> Subscription<Message> {
self.hws.refresh().map(Message::HardwareWallets)
let mut subs = ledger_upgrade_subscriptions(&self.hws);
subs.push(
self.hws
.refresh(self.wallet.main_descriptor.is_taproot())
.map(Message::HardwareWallets),
);
Subscription::batch(subs)
}

fn update(
Expand Down Expand Up @@ -298,6 +323,14 @@ impl RegisterWalletModal {
Command::none()
}
}
Message::View(view::Message::UpgradeLedger(id, network)) => {
maybe_start_upgrade(id, &mut self.hws, network, &mut self.upgrading);
Command::none()
}
Message::Upgrade(msg) => {
update_upgrade_state(msg, &mut self.hws, &mut self.upgrading);
Command::none()
}
_ => Command::none(),
}
}
Expand Down
Loading

0 comments on commit 4e12e1b

Please sign in to comment.