URI: 
       tlnpeer: handle cooperative close edge-case - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit ea3e3ddbb8280f499bf2535d2a8a63dd174e2e44
   DIR parent 261ad804cad9c8a4f9dbc6595727a35cadc0204e
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Sun, 13 Sep 2020 16:55:37 +0200
       
       lnpeer: handle cooperative close edge-case
       
       fix #6317
       
       Diffstat:
         M electrum/address_synchronizer.py    |      10 +---------
         M electrum/gui/qt/main_window.py      |       4 ++--
         M electrum/lnpeer.py                  |       8 ++++++--
         M electrum/util.py                    |       9 +++++++++
       
       4 files changed, 18 insertions(+), 13 deletions(-)
       ---
   DIR diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py
       t@@ -30,7 +30,7 @@ from typing import TYPE_CHECKING, Dict, Optional, Set, Tuple, NamedTuple, Sequen
        
        from . import bitcoin, util
        from .bitcoin import COINBASE_MATURITY
       -from .util import profiler, bfh, TxMinedInfo
       +from .util import profiler, bfh, TxMinedInfo, UnrelatedTransactionException
        from .transaction import Transaction, TxOutput, TxInput, PartialTxInput, TxOutpoint, PartialTransaction
        from .synchronizer import Synchronizer
        from .verifier import SPV
       t@@ -48,14 +48,6 @@ TX_HEIGHT_LOCAL = -2
        TX_HEIGHT_UNCONF_PARENT = -1
        TX_HEIGHT_UNCONFIRMED = 0
        
       -class AddTransactionException(Exception):
       -    pass
       -
       -
       -class UnrelatedTransactionException(AddTransactionException):
       -    def __str__(self):
       -        return _("Transaction is unrelated to this wallet.")
       -
        
        class HistoryItem(NamedTuple):
            txid: str
   DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
       t@@ -60,12 +60,12 @@ from electrum.util import (format_time,
                                   UserFacingException,
                                   get_new_wallet_name, send_exception_to_crash_reporter,
                                   InvalidBitcoinURI, maybe_extract_bolt11_invoice, NotEnoughFunds,
       -                           NoDynamicFeeEstimates, MultipleSpendMaxTxOutputs)
       +                           NoDynamicFeeEstimates, MultipleSpendMaxTxOutputs,
       +                           AddTransactionException)
        from electrum.invoices import PR_TYPE_ONCHAIN, PR_TYPE_LN, PR_DEFAULT_EXPIRATION_WHEN_CREATING, Invoice
        from electrum.invoices import PR_PAID, PR_FAILED, pr_expiration_values, LNInvoice, OnchainInvoice
        from electrum.transaction import (Transaction, PartialTxInput,
                                          PartialTransaction, PartialTxOutput)
       -from electrum.address_synchronizer import AddTransactionException
        from electrum.wallet import (Multisig_Wallet, CannotBumpFee, Abstract_Wallet,
                                     sweep_preparations, InternalAddressCorruption)
        from electrum.version import ELECTRUM_VERSION
   DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py
       t@@ -23,7 +23,8 @@ from . import bitcoin, util
        from . import ecc
        from .ecc import sig_string_from_r_and_s, get_r_and_s_from_sig_string, der_sig_from_sig_string
        from . import constants
       -from .util import bh2u, bfh, log_exceptions, ignore_exceptions, chunks, SilentTaskGroup
       +from .util import (bh2u, bfh, log_exceptions, ignore_exceptions, chunks, SilentTaskGroup,
       +                   UnrelatedTransactionException)
        from . import transaction
        from .transaction import Transaction, TxOutput, PartialTxOutput, match_script_against_template
        from .logging import Logger
       t@@ -1518,7 +1519,10 @@ class Peer(Logger):
                    signing_pubkey=chan.config[REMOTE].multisig_key.pubkey.hex(),
                    sig=bh2u(der_sig_from_sig_string(their_sig) + b'\x01'))
                # save local transaction and set state
       -        self.lnworker.wallet.add_transaction(closing_tx)
       +        try:
       +            self.lnworker.wallet.add_transaction(closing_tx)
       +        except UnrelatedTransactionException:
       +            pass  # this can happen if (~all the balance goes to REMOTE)
                chan.set_state(ChannelState.CLOSING)
                # broadcast
                await self.network.try_broadcasting(closing_tx, 'closing')
   DIR diff --git a/electrum/util.py b/electrum/util.py
       t@@ -119,6 +119,15 @@ class InvalidPassword(Exception):
                return _("Incorrect password")
        
        
       +class AddTransactionException(Exception):
       +    pass
       +
       +
       +class UnrelatedTransactionException(AddTransactionException):
       +    def __str__(self):
       +        return _("Transaction is unrelated to this wallet.")
       +
       +
        class FileImportFailed(Exception):
            def __init__(self, message=''):
                self.message = str(message)