Browse Source

lnpeer: favor schedule_force_closing wrapper

patch-4
ThomasV 3 years ago
parent
commit
00902a40d7
  1. 17
      electrum/lnpeer.py

17
electrum/lnpeer.py

@ -298,7 +298,7 @@ class Peer(Logger):
# MUST fail the channel(s) referred to by the error message:
# we may violate this with force_close_channel
if force_close_channel:
for cid self._get_channel_ids(channel_id):
for cid in self._get_channel_ids(channel_id):
self.schedule_force_closing(channel_id)
raise GracefulDisconnect
@ -1035,6 +1035,7 @@ class Peer(Logger):
my_current_per_commitment_point=latest_point)
def schedule_force_closing(self, channel_id: bytes):
""" wrapper of lnworker's method, that raises if channel is not with this peer """
channels_with_peer = list(self.channels.keys())
channels_with_peer.extend(self.temp_id_to_id.values())
if channel_id not in channels_with_peer:
@ -1138,7 +1139,7 @@ class Peer(Logger):
fut.set_exception(RemoteMisbehaving("remote ahead of us"))
elif we_are_ahead:
self.logger.warning(f"channel_reestablish ({chan.get_id_for_log()}): we are ahead of remote! trying to force-close.")
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
fut.set_exception(RemoteMisbehaving("we are ahead of remote"))
else:
# all good
@ -1468,7 +1469,7 @@ class Peer(Logger):
self.logger.info(f"on_update_fail_malformed_htlc. chan {chan.get_id_for_log()}. "
f"htlc_id {htlc_id}. failure_code={failure_code}")
if failure_code & OnionFailureCodeMetaFlag.BADONION == 0:
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise RemoteMisbehaving(f"received update_fail_malformed_htlc with unexpected failure code: {failure_code}")
reason = OnionRoutingFailure(code=failure_code, data=payload["sha256_of_onion"])
chan.receive_fail_htlc(htlc_id, error_bytes=None, reason=reason)
@ -1490,7 +1491,7 @@ class Peer(Logger):
if chan.get_state() != ChannelState.OPEN:
raise RemoteMisbehaving(f"received update_add_htlc while chan.get_state() != OPEN. state was {chan.get_state()!r}")
if cltv_expiry > bitcoin.NLOCKTIME_BLOCKHEIGHT_MAX:
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise RemoteMisbehaving(f"received update_add_htlc with cltv_expiry > BLOCKHEIGHT_MAX. value was {cltv_expiry}")
# add htlc
chan.receive_htlc(htlc, onion_packet)
@ -1989,7 +1990,7 @@ class Peer(Logger):
try:
cs_payload = await self.wait_for_message('closing_signed', chan.channel_id)
except asyncio.exceptions.TimeoutError:
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise Exception("closing_signed not received, force closing.")
their_fee = cs_payload['fee_satoshis']
their_fee_range = cs_payload['closing_signed_tlvs'].get('fee_range')
@ -2042,14 +2043,14 @@ class Peer(Logger):
if overlap_min > overlap_max:
# TODO: the receiving node should first send a warning, and fail the channel
# only if it doesn't receive a satisfying fee_range after a reasonable amount of time
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise Exception("There is no overlap between between their and our fee range.")
# otherwise, if it is the funder
if is_initiator:
# if fee_satoshis is not in the overlap between the sent and received fee_range:
if not (overlap_min <= their_fee <= overlap_max):
# MUST fail the channel
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise Exception("Their fee is not in the overlap region, we force closed.")
# otherwise, MUST reply with the same fee_satoshis.
our_fee = their_fee
@ -2058,7 +2059,7 @@ class Peer(Logger):
# if it has already sent a closing_signed:
if fee_range_sent:
# fee_satoshis is not the same as the value we sent, we MUST fail the channel
self.lnworker.schedule_force_closing(chan.channel_id)
self.schedule_force_closing(chan.channel_id)
raise Exception("Expected the same fee as ours, we force closed.")
# otherwise:
# MUST propose a fee_satoshis in the overlap between received and (about-to-be) sent fee_range.

Loading…
Cancel
Save