Browse Source

ln: don't break channel when failing htlc

dependabot/pip/contrib/deterministic-build/ecdsa-0.13.3
Janus 7 years ago
committed by ThomasV
parent
commit
3f73332817
  1. 12
      lib/lnbase.py
  2. 1
      lib/tests/test_lnhtlc.py

12
lib/lnbase.py

@ -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()

1
lib/tests/test_lnhtlc.py

@ -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)

Loading…
Cancel
Save