thandle_error_from_failed_htlc: blacklist channel if cannot decode payload - electrum - Electrum Bitcoin wallet
HTML git clone https://git.parazyd.org/electrum
DIR Log
DIR Files
DIR Refs
DIR Submodules
---
DIR commit 2c2d3f3b306833b16b43789b791e856d7924934e
DIR parent 4febbcdc2dd772c8e8465bdeee31bd436650a4a3
HTML Author: ThomasV <thomasv@electrum.org>
Date: Sun, 7 Feb 2021 12:34:28 +0100
handle_error_from_failed_htlc: blacklist channel if cannot decode payload
Diffstat:
M electrum/lnworker.py | 43 ++++++++++++++++---------------
1 file changed, 22 insertions(+), 21 deletions(-)
---
DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
t@@ -1055,28 +1055,29 @@ class LNWallet(LNWorker):
payload = self._decode_channel_update_msg(channel_update_as_received)
if payload is None:
self.logger.info(f'could not decode channel_update for failed htlc: {channel_update_as_received.hex()}')
- return True
- r = self.channel_db.add_channel_update(payload)
- blacklist = False
- short_channel_id = ShortChannelID(payload['short_channel_id'])
- if r == UpdateStatus.GOOD:
- self.logger.info(f"applied channel update to {short_channel_id}")
- # TODO: test this
- for chan in self.channels.values():
- if chan.short_channel_id == short_channel_id:
- chan.set_remote_update(payload['raw'])
- elif r == UpdateStatus.ORPHANED:
- # maybe it is a private channel (and data in invoice was outdated)
- self.logger.info(f"Could not find {short_channel_id}. maybe update is for private channel?")
- start_node_id = route[sender_idx].node_id
- self.channel_db.add_channel_update_for_private_channel(payload, start_node_id)
- elif r == UpdateStatus.EXPIRED:
- blacklist = True
- elif r == UpdateStatus.DEPRECATED:
- self.logger.info(f'channel update is not more recent.')
- blacklist = True
- elif r == UpdateStatus.UNCHANGED:
blacklist = True
+ else:
+ r = self.channel_db.add_channel_update(payload)
+ blacklist = False
+ short_channel_id = ShortChannelID(payload['short_channel_id'])
+ if r == UpdateStatus.GOOD:
+ self.logger.info(f"applied channel update to {short_channel_id}")
+ # TODO: test this
+ for chan in self.channels.values():
+ if chan.short_channel_id == short_channel_id:
+ chan.set_remote_update(payload['raw'])
+ elif r == UpdateStatus.ORPHANED:
+ # maybe it is a private channel (and data in invoice was outdated)
+ self.logger.info(f"Could not find {short_channel_id}. maybe update is for private channel?")
+ start_node_id = route[sender_idx].node_id
+ self.channel_db.add_channel_update_for_private_channel(payload, start_node_id)
+ elif r == UpdateStatus.EXPIRED:
+ blacklist = True
+ elif r == UpdateStatus.DEPRECATED:
+ self.logger.info(f'channel update is not more recent.')
+ blacklist = True
+ elif r == UpdateStatus.UNCHANGED:
+ blacklist = True
else:
blacklist = True
# blacklist channel after reporter node