URI: 
       tlnpeer: reestablish_channel - discard unsigned remote updates - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit e81ae1921b84fa7ce67e5e8dded92575bdbe5501
   DIR parent c046f2cc1c7741ff8e0b8da50cc1365120c20ba7
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Fri,  2 Aug 2019 21:00:18 +0200
       
       lnpeer: reestablish_channel - discard unsigned remote updates
       
       Diffstat:
         M electrum/lnhtlc.py                  |      19 +++++++++++++++++++
         M electrum/lnpeer.py                  |       2 ++
       
       2 files changed, 21 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/electrum/lnhtlc.py b/electrum/lnhtlc.py
       t@@ -167,6 +167,25 @@ class HTLCManager:
                    if fee_update.ctns[LOCAL] is None and fee_update.ctns[REMOTE] <= self.ctn_latest(REMOTE):
                        fee_update.ctns[LOCAL] = self.ctn_latest(LOCAL) + 1
        
       +    def discard_unsigned_remote_updates(self):
       +        """Discard updates sent by the remote, that the remote itself
       +        did not yet sign (i.e. there was no corresponding commitment_signed msg)
       +        """
       +        # htlcs
       +        for htlc_id, ctns in list(self.log[REMOTE]['locked_in'].items()):
       +            if ctns[LOCAL] > self.ctn_latest(LOCAL):
       +                del self.log[REMOTE]['locked_in'][htlc_id]
       +                del self.log[REMOTE]['adds'][htlc_id]
       +        self.log[REMOTE]['next_htlc_id'] = max(self.log[REMOTE]['locked_in']) + 1
       +        for log_action in ('settles', 'fails'):
       +            for htlc_id, ctns in list(self.log[LOCAL][log_action].items()):
       +                if ctns[LOCAL] > self.ctn_latest(LOCAL):
       +                    del self.log[LOCAL][log_action][htlc_id]
       +        # fee updates
       +        for i, fee_update in enumerate(list(self.log[REMOTE]['fee_updates'])):
       +            if fee_update.ctns[LOCAL] > self.ctn_latest(LOCAL):
       +                del self.log[REMOTE]['fee_updates'][i]
       +
            ##### Queries re HTLCs:
        
            def htlcs_by_direction(self, subject: HTLCOwner, direction: Direction,
   DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py
       t@@ -692,6 +692,8 @@ class Peer(Logger):
                    return
                chan.set_state('REESTABLISHING')
                self.network.trigger_callback('channel', chan)
       +        # BOLT-02: "A node [...] upon disconnection [...] MUST reverse any uncommitted updates sent by the other side"
       +        chan.hm.discard_unsigned_remote_updates()
                # ctns
                oldest_unrevoked_local_ctn = chan.config[LOCAL].ctn
                latest_local_ctn = chan.hm.ctn_latest(LOCAL)