URI: 
       tfix local/remote confusion in reestablish_channel - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit b5fd27c64c0254dcca9c9219cfd2cb3918542242
   DIR parent 82491ff083368fe57821998aeea7f5f4b1f4e5a8
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Thu,  7 Mar 2019 14:39:16 +0100
       
       fix local/remote confusion in reestablish_channel
       
       Diffstat:
         M electrum/lnpeer.py                  |      23 ++++++++++++++---------
       
       1 file changed, 14 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py
       t@@ -557,16 +557,16 @@ class Peer(PrintError):
                                              next_remote_revocation_number=0
                                              )
                # compare remote ctns
       -        remote_ctn = int.from_bytes(channel_reestablish_msg["next_local_commitment_number"], 'big')
       -        if remote_ctn != chan.config[REMOTE].ctn + 1:
       +        their_next_local_ctn = int.from_bytes(channel_reestablish_msg["next_local_commitment_number"], 'big')
       +        their_next_remote_ctn = int.from_bytes(channel_reestablish_msg["next_remote_revocation_number"], 'big')
       +        if their_next_local_ctn != chan.config[REMOTE].ctn + 1:
                    self.print_error("expected remote ctn {}, got {}".format(chan.config[REMOTE].ctn + 1, remote_ctn))
                    # TODO iff their ctn is lower than ours, we should force close instead
                    try_to_get_remote_to_force_close_with_their_latest()
                    return
                # compare local ctns
       -        local_ctn = int.from_bytes(channel_reestablish_msg["next_remote_revocation_number"], 'big')
       -        if local_ctn != chan.config[LOCAL].ctn:
       -            if remote_ctn == chan.config[LOCAL].ctn + 1:
       +        if chan.config[LOCAL].ctn != their_next_remote_ctn:
       +            if chan.config[LOCAL].ctn == their_next_remote_ctn + 1:
                        # A node:
                        #    if next_remote_revocation_number is equal to the
                        #    commitment number of the last revoke_and_ack
       t@@ -574,11 +574,16 @@ class Peer(PrintError):
                        #    hasn't already received a closing_signed:
                        #        MUST re-send the revoke_and_ack.
                        chan.config[LOCAL]=chan.config[LOCAL]._replace(
       -                    ctn=remote_ctn,
       +                    ctn=their_next_remote_ctn,
                        )
       -                self.send_revoke_and_ack(chan)
       +                last_secret, this_point, next_point, _ = chan.points()
       +                self.send_message(
       +                    "revoke_and_ack",
       +                    channel_id=chan.channel_id,
       +                    per_commitment_secret=last_secret,
       +                    next_per_commitment_point=next_point)
                    else:
       -                self.print_error("expected local ctn {}, got {}".format(chan.config[LOCAL].ctn, local_ctn))
       +                self.print_error("expected local ctn {}, got {}".format(chan.config[LOCAL].ctn, their_next_remote_ctn))
                        # TODO iff their ctn is lower than ours, we should force close instead
                        try_to_get_remote_to_force_close_with_their_latest()
                        return
       t@@ -593,7 +598,7 @@ class Peer(PrintError):
                        # FIXME ...what now?
                        try_to_get_remote_to_force_close_with_their_latest()
                        return
       -        if remote_ctn == chan.config[LOCAL].ctn+1 == 1 and chan.short_channel_id:
       +        if their_next_local_ctn == chan.config[LOCAL].ctn+1 == 1 and chan.short_channel_id:
                    self.send_funding_locked(chan)
                # checks done
                if chan.config[LOCAL].funding_locked_received and chan.short_channel_id: