URI: 
       tln: don't break channel when failing htlc - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 3f733328179ac4770571bc1b54c3d7b5739db0e4
   DIR parent 6f88c55f170774e24623e39c32120cb296602ad6
  HTML Author: Janus <ysangkok@gmail.com>
       Date:   Tue, 19 Jun 2018 15:13:48 +0200
       
       ln: don't break channel when failing htlc
       
       Diffstat:
         M lib/lnbase.py                       |      12 ++++++------
         M lib/tests/test_lnhtlc.py            |       1 +
       
       2 files changed, 7 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/lib/lnbase.py b/lib/lnbase.py
       t@@ -1153,17 +1153,17 @@ class Peer(PrintError):
        
                done, pending = await asyncio.wait([fulfill_coro, failure_coro], return_when=FIRST_COMPLETED)
                if failure_coro.done():
       +            sig_64, htlc_sigs = m.sign_next_commitment()
       +            self.send_message(gen_msg("commitment_signed", channel_id=chan.channel_id, signature=sig_64, num_htlcs=1, htlc_signature=htlc_sigs[0]))
       +            while (await self.commitment_signed[chan.channel_id].get())["htlc_signature"] != b"":
       +                self.revoke(m)
       +            await self.receive_revoke(m)
                    m.fail_htlc(htlc)
       -            # TODO receive their commitment here
       -
       -            # TODO find out why the following block fails with "not enough htlc signatures"
                    sig_64, htlc_sigs = m.sign_next_commitment()
       -            assert len(htlc_sigs) == 0
                    self.send_message(gen_msg("commitment_signed", channel_id=chan.channel_id, signature=sig_64, num_htlcs=0))
       -
                    await self.receive_revoke(m)
       -            self.revoke(m)
                    fulfill_coro.cancel()
       +            self.lnworker.save_channel(m.state)
                    return failure_coro.result()
                if fulfill_coro.done():
                    failure_coro.cancel()
   DIR diff --git a/lib/tests/test_lnhtlc.py b/lib/tests/test_lnhtlc.py
       t@@ -202,6 +202,7 @@ class TestLNBaseHTLCStateMachine(unittest.TestCase):
        
                aliceRevocation2, _ = alice_channel.revoke_current_commitment()
                aliceSig2, aliceHtlcSigs2 = alice_channel.sign_next_commitment()
       +        self.assertEqual(aliceHtlcSigs2, [], "alice should generate no htlc signatures")
        
                bob_channel.receive_revocation(aliceRevocation2)