From 130842ecd40ceb14d61fa192dffaba8d5e7fec3e Mon Sep 17 00:00:00 2001 From: ThomasV Date: Wed, 24 Mar 2021 11:13:24 +0100 Subject: [PATCH] Add 'has_onchain_backup' to channel storage, to fix the displayed icon. Note that this will not fix the value for already existing channels that have been created with onchain backup; one would need a wallet_db upgrade in order to fix them (probably not worth the effort). --- electrum/gui/kivy/uix/dialogs/lightning_open_channel.py | 2 +- electrum/gui/qt/channels_list.py | 4 +++- electrum/gui/qt/main_window.py | 2 +- electrum/lnchannel.py | 3 +++ electrum/lnpeer.py | 8 +++++--- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py index 67d610aab..0f0cf4835 100644 --- a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py +++ b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py @@ -211,7 +211,7 @@ class LightningOpenChannelDialog(Factory.Popup, Logger): self.app.show_error(_('Problem opening channel: ') + '\n' + repr(e)) return # TODO: it would be nice to show this before broadcasting - if lnworker.has_recoverable_channels(): + if chan.has_onchain_backup(): self.maybe_show_funding_tx(chan, funding_tx) else: title = _('Save backup') diff --git a/electrum/gui/qt/channels_list.py b/electrum/gui/qt/channels_list.py index e45eb1d67..827eb1d2f 100644 --- a/electrum/gui/qt/channels_list.py +++ b/electrum/gui/qt/channels_list.py @@ -538,11 +538,13 @@ class ChannelFeatureIcons: feats = [] if chan.is_backup(): feats.append(ChanFeatBackup()) + if chan.is_imported: + feats.append(ChanFeatNoOnchainBackup()) else: feats.append(ChanFeatChannel()) if chan.lnworker.is_trampoline_peer(chan.node_id): feats.append(ChanFeatTrampoline()) - if not chan.lnworker.has_recoverable_channels(): + if not chan.has_onchain_backup(): feats.append(ChanFeatNoOnchainBackup()) return ChannelFeatureIcons(feats) diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index cbd91e509..7ab02a617 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -1840,7 +1840,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): def on_open_channel_success(self, args): chan, funding_tx = args lnworker = self.wallet.lnworker - if not lnworker.has_recoverable_channels(): + if not chan.has_onchain_backup(): backup_dir = self.config.get_backup_dir() if backup_dir is not None: self.show_message(_(f'Your wallet backup has been updated in {backup_dir}')) diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py index 930a5f575..92a980050 100644 --- a/electrum/lnchannel.py +++ b/electrum/lnchannel.py @@ -553,6 +553,9 @@ class Channel(AbstractChannel): self.should_request_force_close = False self.force_close_detected = False # not a state, only for GUI + def has_onchain_backup(self): + return self.storage.get('has_onchain_backup', False) + def can_be_deleted(self): return self.is_redeemed() diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py index ee4716340..c7f72ef8b 100644 --- a/electrum/lnpeer.py +++ b/electrum/lnpeer.py @@ -687,7 +687,8 @@ class Peer(Logger): if dummy_output in funding_tx.outputs(): raise Exception("LN dummy output (err 2)") funding_tx.add_outputs([funding_output]) # find and encrypt op_return data associated to funding_address - if self.lnworker and self.lnworker.has_recoverable_channels(): + has_onchain_backup = self.lnworker and self.lnworker.has_recoverable_channels() + if has_onchain_backup: backup_data = self.lnworker.cb_data(self.pubkey) dummy_scriptpubkey = make_op_return(backup_data) for o in funding_tx.outputs(): @@ -713,15 +714,16 @@ class Peer(Logger): is_initiator=True, funding_txn_minimum_depth=funding_txn_minimum_depth ) - chan_dict = self.create_channel_storage( + storage = self.create_channel_storage( channel_id, outpoint, local_config, remote_config, constraints) chan = Channel( - chan_dict, + storage, sweep_address=self.lnworker.sweep_address, lnworker=self.lnworker, initial_feerate=feerate ) chan.storage['funding_inputs'] = [txin.prevout.to_json() for txin in funding_tx.inputs()] + chan.storage['has_onchain_backup'] = has_onchain_backup if isinstance(self.transport, LNTransport): chan.add_or_update_peer_addr(self.transport.peer_addr) sig_64, _ = chan.sign_next_commitment()