mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
avoid code duplication between methods that send channel updates
This commit is contained in:
parent
634c39b6b0
commit
5c1cc0ed8f
1 changed files with 14 additions and 22 deletions
|
@ -841,10 +841,18 @@ class Peer(PrintError):
|
|||
await self.receive_revoke(chan)
|
||||
self.lnworker.save_channel(chan)
|
||||
|
||||
async def update_channel(self, chan, update):
|
||||
""" generic channel update flow """
|
||||
self.send_message(update)
|
||||
sig_64, htlc_sigs = chan.sign_next_commitment()
|
||||
self.send_message(gen_msg("commitment_signed", channel_id=chan.channel_id, signature=sig_64, num_htlcs=len(htlc_sigs), htlc_signature=b"".join(htlc_sigs)))
|
||||
await self.receive_revoke(chan)
|
||||
await self.receive_commitment(chan)
|
||||
self.revoke(chan)
|
||||
|
||||
async def pay(self, path, chan, amount_msat, payment_hash, pubkey_in_invoice, min_final_cltv_expiry):
|
||||
assert chan.get_state() == "OPEN", chan.get_state()
|
||||
assert amount_msat > 0, "amount_msat is not greater zero"
|
||||
|
||||
height = self.network.get_local_height()
|
||||
route = self.network.path_finder.create_route_from_path(path, self.lnworker.pubkey)
|
||||
hops_data = []
|
||||
|
@ -864,7 +872,6 @@ class Peer(PrintError):
|
|||
msat_local = chan.balance(LOCAL) - amount_msat
|
||||
msat_remote = chan.balance(REMOTE) + amount_msat
|
||||
htlc = {'amount_msat':amount_msat, 'payment_hash':payment_hash, 'cltv_expiry':final_cltv_expiry_with_deltas}
|
||||
|
||||
# FIXME if we raise here, this channel will not get blacklisted, and the payment can never succeed,
|
||||
# as we will just keep retrying this same path. using the current blacklisting is not a solution as
|
||||
# then no other payment can use this channel either.
|
||||
|
@ -877,18 +884,11 @@ class Peer(PrintError):
|
|||
if msat_local < 0:
|
||||
# FIXME what about channel_reserve_satoshis? will the remote fail the channel if we go below? test.
|
||||
raise PaymentFailure('not enough local balance')
|
||||
|
||||
htlc_id = chan.add_htlc(htlc)
|
||||
chan.onion_keys[htlc_id] = secret_key
|
||||
self.send_message(gen_msg("update_add_htlc", channel_id=chan.channel_id, id=htlc_id, cltv_expiry=final_cltv_expiry_with_deltas, amount_msat=amount_msat, payment_hash=payment_hash, onion_routing_packet=onion.to_bytes()))
|
||||
|
||||
update = gen_msg("update_add_htlc", channel_id=chan.channel_id, id=htlc_id, cltv_expiry=final_cltv_expiry_with_deltas, amount_msat=amount_msat, payment_hash=payment_hash, onion_routing_packet=onion.to_bytes())
|
||||
self.attempted_route[(chan.channel_id, htlc_id)] = route
|
||||
|
||||
sig_64, htlc_sigs = chan.sign_next_commitment()
|
||||
self.send_message(gen_msg("commitment_signed", channel_id=chan.channel_id, signature=sig_64, num_htlcs=len(htlc_sigs), htlc_signature=b"".join(htlc_sigs)))
|
||||
await self.receive_revoke(chan)
|
||||
await self.receive_commitment(chan)
|
||||
self.revoke(chan)
|
||||
await self.update_channel(chan, update)
|
||||
|
||||
async def receive_revoke(self, m):
|
||||
revoke_and_ack_msg = await self.revoke_and_ack[m.channel_id].get()
|
||||
|
@ -1047,27 +1047,19 @@ class Peer(PrintError):
|
|||
if not chan.constraints.is_initiator:
|
||||
# TODO force close if initiator does not update_fee enough
|
||||
return
|
||||
|
||||
feerate_per_kw = self.current_feerate_per_kw()
|
||||
chan_fee = chan.pending_feerate(REMOTE)
|
||||
self.print_error("current pending feerate", chan_fee)
|
||||
self.print_error("new feerate", feerate_per_kw)
|
||||
if feerate_per_kw < chan_fee / 2:
|
||||
self.print_error("FEES HAVE FALLEN")
|
||||
chan.update_fee(feerate_per_kw)
|
||||
elif feerate_per_kw > chan_fee * 2:
|
||||
self.print_error("FEES HAVE RISEN")
|
||||
chan.update_fee(feerate_per_kw)
|
||||
else:
|
||||
return
|
||||
|
||||
self.send_message(gen_msg("update_fee", channel_id=chan.channel_id, feerate_per_kw=feerate_per_kw))
|
||||
sig_64, htlc_sigs = chan.sign_next_commitment()
|
||||
self.send_message(gen_msg("commitment_signed", channel_id=chan.channel_id, signature=sig_64, num_htlcs=len(htlc_sigs), htlc_signature=b"".join(htlc_sigs)))
|
||||
await self.receive_revoke(chan)
|
||||
await self.receive_commitment(chan)
|
||||
self.revoke(chan)
|
||||
self.lnworker.save_channel(chan)
|
||||
chan.update_fee(feerate_per_kw)
|
||||
update = gen_msg("update_fee", channel_id=chan.channel_id, feerate_per_kw=feerate_per_kw)
|
||||
await self.update_channel(chan, update)
|
||||
|
||||
def current_feerate_per_kw(self):
|
||||
from .simple_config import FEE_LN_ETA_TARGET, FEERATE_FALLBACK_STATIC_FEE
|
||||
|
|
Loading…
Add table
Reference in a new issue