URI: 
       tlnchannel.available_to_spend: minor refactor - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit ccf50dc98087f756aa6f94ad680a06a9260cc6a3
   DIR parent 7fccd4fc5e0044d35b4cf717b1fc0137b6321b0e
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed, 10 Jun 2020 20:54:26 +0200
       
       lnchannel.available_to_spend: minor refactor
       
       Diffstat:
         M electrum/lnchannel.py               |      36 ++++++++++++++++++-------------
       
       1 file changed, 21 insertions(+), 15 deletions(-)
       ---
   DIR diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py
       t@@ -1056,7 +1056,7 @@ class Channel(AbstractChannel):
                receiver = subject.inverted()
                initiator = LOCAL if self.constraints.is_initiator else REMOTE  # the initiator/funder pays on-chain fees
        
       -        def consider_ctx(*, ctx_owner: HTLCOwner) -> int:
       +        def consider_ctx(*, ctx_owner: HTLCOwner, is_htlc_dust: bool) -> int:
                    ctn = self.get_next_ctn(ctx_owner)
                    sender_balance_msat = self.balance_minus_outgoing_htlcs(whose=sender, ctx_owner=ctx_owner, ctn=ctn)
                    receiver_balance_msat = self.balance_minus_outgoing_htlcs(whose=receiver, ctx_owner=ctx_owner, ctn=ctn)
       t@@ -1074,21 +1074,27 @@ class Channel(AbstractChannel):
                    htlc_trim_func = received_htlc_trim_threshold_sat if ctx_owner == receiver else offered_htlc_trim_threshold_sat
                    htlc_trim_threshold_msat = htlc_trim_func(dust_limit_sat=self.config[ctx_owner].dust_limit_sat, feerate=feerate) * 1000
                    max_send_msat = sender_balance_msat - sender_reserve_msat - ctx_fees_msat[sender]
       -            if max_send_msat < htlc_trim_threshold_msat:
       -                # there will be no corresponding HTLC output
       -                return max_send_msat
       -            if sender == initiator:
       -                max_send_after_htlc_fee_msat = max_send_msat - htlc_fee_msat
       -                max_send_msat = max(htlc_trim_threshold_msat - 1, max_send_after_htlc_fee_msat)
       -                return max_send_msat
       +            if is_htlc_dust:
       +                return min(max_send_msat, htlc_trim_threshold_msat - 1)
                    else:
       -                # the receiver is the initiator, so they need to be able to pay tx fees
       -                if receiver_balance_msat - receiver_reserve_msat - ctx_fees_msat[receiver] - htlc_fee_msat < 0:
       -                    max_send_msat = htlc_trim_threshold_msat - 1
       -                return max_send_msat
       -
       -        max_send_msat = min(consider_ctx(ctx_owner=receiver),
       -                            consider_ctx(ctx_owner=sender))
       +                if sender == initiator:
       +                    return max_send_msat - htlc_fee_msat
       +                else:
       +                    # the receiver is the initiator, so they need to be able to pay tx fees
       +                    if receiver_balance_msat - receiver_reserve_msat - ctx_fees_msat[receiver] - htlc_fee_msat < 0:
       +                        return 0
       +                    return max_send_msat
       +
       +        max_send_msat = min(
       +                            max(
       +                                consider_ctx(ctx_owner=receiver, is_htlc_dust=True),
       +                                consider_ctx(ctx_owner=receiver, is_htlc_dust=False),
       +                            ),
       +                            max(
       +                                consider_ctx(ctx_owner=sender, is_htlc_dust=True),
       +                                consider_ctx(ctx_owner=sender, is_htlc_dust=False),
       +                            ),
       +        )
                max_send_msat = max(max_send_msat, 0)
                return max_send_msat