lnchan: make_commitment and balance (follow-up prev)
"balance(self, subject, ctn=None)" is underspecified. whose balance? whose commitment transaction? this lead to issues...
This commit is contained in:
@@ -502,45 +502,53 @@ class Channel(PrintError):
|
|||||||
self.set_remote_commitment()
|
self.set_remote_commitment()
|
||||||
self.remote_commitment_to_be_revoked = prev_remote_commitment
|
self.remote_commitment_to_be_revoked = prev_remote_commitment
|
||||||
|
|
||||||
def balance(self, subject, ctn=None):
|
def balance(self, whose, *, ctx_owner=HTLCOwner.LOCAL, ctn=None):
|
||||||
"""
|
"""
|
||||||
This balance in mSAT is not including reserve and fees.
|
This balance in mSAT is not including reserve and fees.
|
||||||
So a node cannot actually use it's whole balance.
|
So a node cannot actually use its whole balance.
|
||||||
But this number is simple, since it is derived simply
|
But this number is simple, since it is derived simply
|
||||||
from the initial balance, and the value of settled HTLCs.
|
from the initial balance, and the value of settled HTLCs.
|
||||||
Note that it does not decrease once an HTLC is added,
|
Note that it does not decrease once an HTLC is added,
|
||||||
failed or fulfilled, since the balance change is only
|
failed or fulfilled, since the balance change is only
|
||||||
commited to later when the respective commitment
|
committed to later when the respective commitment
|
||||||
transaction as been revoked.
|
transaction has been revoked.
|
||||||
"""
|
"""
|
||||||
assert type(subject) is HTLCOwner
|
assert type(whose) is HTLCOwner
|
||||||
initial = self.config[subject].initial_msat
|
initial = self.config[whose].initial_msat
|
||||||
|
|
||||||
for direction, htlc in self.hm.all_settled_htlcs_ever(subject, ctn):
|
for direction, htlc in self.hm.all_settled_htlcs_ever(ctx_owner, ctn):
|
||||||
if direction == SENT:
|
# note: could "simplify" to (whose * ctx_owner == direction * SENT)
|
||||||
initial -= htlc.amount_msat
|
if whose == ctx_owner:
|
||||||
|
if direction == SENT:
|
||||||
|
initial -= htlc.amount_msat
|
||||||
|
else:
|
||||||
|
initial += htlc.amount_msat
|
||||||
else:
|
else:
|
||||||
initial += htlc.amount_msat
|
if direction == SENT:
|
||||||
|
initial += htlc.amount_msat
|
||||||
|
else:
|
||||||
|
initial -= htlc.amount_msat
|
||||||
|
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
def balance_minus_outgoing_htlcs(self, subject):
|
def balance_minus_outgoing_htlcs(self, whose, *, ctx_owner=HTLCOwner.LOCAL):
|
||||||
"""
|
"""
|
||||||
This balance in mSAT, which includes the value of
|
This balance in mSAT, which includes the value of
|
||||||
pending outgoing HTLCs, is used in the UI.
|
pending outgoing HTLCs, is used in the UI.
|
||||||
"""
|
"""
|
||||||
assert type(subject) is HTLCOwner
|
assert type(whose) is HTLCOwner
|
||||||
ctn = self.hm.ctn[subject] + 1
|
ctn = self.hm.ctn[ctx_owner] + 1
|
||||||
return self.balance(subject, ctn)\
|
return self.balance(whose, ctx_owner=ctx_owner, ctn=ctn)\
|
||||||
- htlcsum(self.hm.htlcs_by_direction(subject, SENT, ctn))
|
- htlcsum(self.hm.htlcs_by_direction(ctx_owner, SENT, ctn))
|
||||||
|
|
||||||
def available_to_spend(self, subject):
|
def available_to_spend(self, subject):
|
||||||
"""
|
"""
|
||||||
This balance in mSAT, while technically correct, can
|
This balance in mSAT, while technically correct, can
|
||||||
not be used in the UI cause it fluctuates (commit fee)
|
not be used in the UI cause it fluctuates (commit fee)
|
||||||
"""
|
"""
|
||||||
|
# FIXME whose balance? whose ctx?
|
||||||
assert type(subject) is HTLCOwner
|
assert type(subject) is HTLCOwner
|
||||||
return self.balance_minus_outgoing_htlcs(subject)\
|
return self.balance_minus_outgoing_htlcs(subject, ctx_owner=subject)\
|
||||||
- self.config[-subject].reserve_sat * 1000\
|
- self.config[-subject].reserve_sat * 1000\
|
||||||
- calc_onchain_fees(
|
- calc_onchain_fees(
|
||||||
# TODO should we include a potential new htlc, when we are called from receive_htlc?
|
# TODO should we include a potential new htlc, when we are called from receive_htlc?
|
||||||
@@ -696,7 +704,8 @@ class Channel(PrintError):
|
|||||||
# ctn -= 1
|
# ctn -= 1
|
||||||
assert type(subject) is HTLCOwner
|
assert type(subject) is HTLCOwner
|
||||||
other = REMOTE if LOCAL == subject else LOCAL
|
other = REMOTE if LOCAL == subject else LOCAL
|
||||||
remote_msat, local_msat = self.balance(other, ctn), self.balance(subject, ctn)
|
local_msat = self.balance(subject, ctx_owner=subject, ctn=ctn)
|
||||||
|
remote_msat = self.balance(other, ctx_owner=subject, ctn=ctn)
|
||||||
received_htlcs = self.hm.htlcs_by_direction(subject, SENT if subject == LOCAL else RECEIVED, ctn)
|
received_htlcs = self.hm.htlcs_by_direction(subject, SENT if subject == LOCAL else RECEIVED, ctn)
|
||||||
sent_htlcs = self.hm.htlcs_by_direction(subject, RECEIVED if subject == LOCAL else SENT, ctn)
|
sent_htlcs = self.hm.htlcs_by_direction(subject, RECEIVED if subject == LOCAL else SENT, ctn)
|
||||||
if subject != LOCAL:
|
if subject != LOCAL:
|
||||||
|
|||||||
Reference in New Issue
Block a user