URI: 
       topen_channel_coroutine: do not timeout on sign_transaction. fixes #7027 - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 1323bd4f9cbf5e87b5d6eb03216d8fc6e331954b
   DIR parent 01ed5e7345ba2c0960b2cea6aa2aed2a942a2495
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 15 Feb 2021 16:47:42 +0100
       
       open_channel_coroutine: do not timeout on sign_transaction. fixes #7027
       
       Diffstat:
         M electrum/lnpeer.py                  |       7 +++----
         M electrum/lnworker.py                |      25 +++++++++++++------------
       
       2 files changed, 16 insertions(+), 16 deletions(-)
       ---
   DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py
       t@@ -563,7 +563,6 @@ class Peer(Logger):
            @temporarily_reserve_funding_tx_change_address
            async def channel_establishment_flow(
                    self, *,
       -            password: Optional[str],
                    funding_tx: 'PartialTransaction',
                    funding_sat: int,
                    push_msat: int,
       t@@ -578,6 +577,7 @@ class Peer(Logger):
        
                Channel configurations are initialized in this method.
                """
       +        # will raise if init fails
                await asyncio.wait_for(self.initialized, LN_P2P_NETWORK_TIMEOUT)
        
                feerate = self.lnworker.current_feerate_per_kw()
       t@@ -675,9 +675,8 @@ class Peer(Logger):
                funding_tx.outputs().remove(dummy_output)
                funding_tx.add_outputs([funding_output])
                funding_tx.set_rbf(False)
       -        self.lnworker.wallet.sign_transaction(funding_tx, password)
       -        if not funding_tx.is_complete() and not funding_tx.is_segwit():
       -            raise Exception('Funding transaction is not complete')
       +        if not funding_tx.is_segwit():
       +            raise Exception('Funding transaction is not segwit')
                funding_txid = funding_tx.txid()
                assert funding_txid
                funding_index = funding_tx.outputs().index(funding_output)
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -861,20 +861,21 @@ class LNWallet(LNWorker):
                        await self.network.try_broadcasting(force_close_tx, 'force-close')
        
            @log_exceptions
       -    async def _open_channel_coroutine(self, *, connect_str: str, funding_tx: PartialTransaction,
       -                                      funding_sat: int, push_sat: int,
       -                                      password: Optional[str]) -> Tuple[Channel, PartialTransaction]:
       +    async def _open_channel_coroutine(
       +            self, *, connect_str: str,
       +            funding_tx: PartialTransaction,
       +            funding_sat: int, push_sat: int,
       +            password: Optional[str]) -> Tuple[Channel, PartialTransaction]:
                peer = await self.add_peer(connect_str)
       -        # will raise if init fails
       -        await asyncio.wait_for(peer.initialized, LN_P2P_NETWORK_TIMEOUT)
       -        chan, funding_tx = await peer.channel_establishment_flow(
       -            password=password,
       +        coro = peer.channel_establishment_flow(
                    funding_tx=funding_tx,
                    funding_sat=funding_sat,
                    push_msat=push_sat * 1000,
                    temp_channel_id=os.urandom(32))
       +        chan, funding_tx = await asyncio.wait_for(coro, LN_P2P_NETWORK_TIMEOUT)
                util.trigger_callback('channels_updated', self.wallet)
                self.wallet.add_transaction(funding_tx)  # save tx as local into the wallet
       +        self.wallet.sign_transaction(funding_tx, password)
                self.wallet.set_label(funding_tx.txid(), _('Open channel'))
                if funding_tx.is_complete():
                    await self.network.try_broadcasting(funding_tx, 'open_channel')
       t@@ -911,15 +912,15 @@ class LNWallet(LNWorker):
                return tx
        
            def open_channel(self, *, connect_str: str, funding_tx: PartialTransaction,
       -                     funding_sat: int, push_amt_sat: int, password: str = None,
       -                     timeout: Optional[int] = 20) -> Tuple[Channel, PartialTransaction]:
       +                     funding_sat: int, push_amt_sat: int, password: str = None) -> Tuple[Channel, PartialTransaction]:
                if funding_sat > LN_MAX_FUNDING_SAT:
                    raise Exception(_("Requested channel capacity is over protocol allowed maximum."))
       -        coro = self._open_channel_coroutine(connect_str=connect_str, funding_tx=funding_tx, funding_sat=funding_sat,
       -                                            push_sat=push_amt_sat, password=password)
       +        coro = self._open_channel_coroutine(
       +            connect_str=connect_str, funding_tx=funding_tx, funding_sat=funding_sat,
       +            push_sat=push_amt_sat, password=password)
                fut = asyncio.run_coroutine_threadsafe(coro, self.network.asyncio_loop)
                try:
       -            chan, funding_tx = fut.result(timeout=timeout)
       +            chan, funding_tx = fut.result()
                except concurrent.futures.TimeoutError:
                    raise Exception(_("open_channel timed out"))
                # at this point the channel opening was successful