mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 14:42:40 +01:00
lightningd: use proper receivable calc for routehint selection.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
84697edd6e
commit
ca4730b5ff
2 changed files with 11 additions and 39 deletions
|
@ -436,39 +436,6 @@ static struct command_result *parse_fallback(struct command *cmd,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/** incoming_capacity
|
||||
*
|
||||
* @brief Determine the ability of the peer to pay us.
|
||||
*
|
||||
* @param ld - the lightningd.
|
||||
* @param c - the channel to check.
|
||||
* @param capacity_to_pay_us - out; if this returns true,
|
||||
* the pointed-to `struct amount_msat` will contain how
|
||||
* much the peer can pay us at maximum.
|
||||
*
|
||||
* @return false if the peer cannot pay to us, true if
|
||||
* the peer can pay us and `capacity_to_pay_us` is set.
|
||||
*/
|
||||
static bool incoming_capacity(struct lightningd *ld,
|
||||
struct channel *c,
|
||||
struct amount_msat *capacity_to_pay_us)
|
||||
{
|
||||
struct amount_msat their_msat;
|
||||
if (!amount_sat_sub_msat(&their_msat, c->funding, c->our_msat)) {
|
||||
log_broken(ld->log,
|
||||
"underflow: funding %s - our_msat %s",
|
||||
type_to_string(tmpctx, struct amount_sat,
|
||||
&c->funding),
|
||||
type_to_string(tmpctx, struct amount_msat,
|
||||
&c->our_msat));
|
||||
return false;
|
||||
}
|
||||
if (!amount_msat_sub_sat(capacity_to_pay_us, their_msat,
|
||||
c->our_config.channel_reserve))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* From array of incoming channels [inchan], find suitable ones for
|
||||
* a payment-to-us of [amount_needed], using criteria:
|
||||
|
@ -530,9 +497,7 @@ static struct route_info **select_inchan(const tal_t *ctx,
|
|||
0 ^ ^ ^ funding
|
||||
our_reserve our_msat */
|
||||
|
||||
/* Can the peer pay to us, and if so how much? */
|
||||
if (!incoming_capacity(ld, c, &capacity_to_pay_us))
|
||||
continue;
|
||||
capacity_to_pay_us = channel_amount_receivable(c);
|
||||
|
||||
/* Does the peer have sufficient balance to pay us,
|
||||
* even after having taken into account their reserve? */
|
||||
|
@ -628,9 +593,7 @@ static struct route_info **select_inchan_mpp(const tal_t *ctx,
|
|||
continue;
|
||||
}
|
||||
|
||||
/* Can the peer pay to us? */
|
||||
if (!incoming_capacity(ld, c, &capacity_to_pay_us))
|
||||
continue;
|
||||
capacity_to_pay_us = channel_amount_receivable(c);
|
||||
|
||||
/* Is the channel in the inchans input? */
|
||||
found = NULL;
|
||||
|
|
|
@ -142,6 +142,9 @@ u32 get_feerate(const struct fee_states *fee_states UNNEEDED,
|
|||
enum side opener UNNEEDED,
|
||||
enum side side UNNEEDED)
|
||||
{ fprintf(stderr, "get_feerate called!\n"); abort(); }
|
||||
/* Generated stub for hash_htlc_key */
|
||||
size_t hash_htlc_key(const struct htlc_key *htlc_key UNNEEDED)
|
||||
{ fprintf(stderr, "hash_htlc_key called!\n"); abort(); }
|
||||
/* Generated stub for htlc_is_trimmed */
|
||||
bool htlc_is_trimmed(enum side htlc_owner UNNEEDED,
|
||||
struct amount_msat htlc_amount UNNEEDED,
|
||||
|
@ -679,13 +682,17 @@ static void add_peer(struct lightningd *ld, int n, enum channel_state state,
|
|||
memset(&peer->id, n, sizeof(peer->id));
|
||||
list_head_init(&peer->channels);
|
||||
list_add_tail(&ld->peers, &peer->list);
|
||||
peer->ld = ld;
|
||||
|
||||
c->state = state;
|
||||
c->owner = connected ? (void *)peer : NULL;
|
||||
c->opener = LOCAL;
|
||||
c->peer = peer;
|
||||
/* Channel has incoming capacity n*1000 - 1 millisatoshi */
|
||||
c->funding.satoshis = n+1;
|
||||
c->our_msat = AMOUNT_MSAT(1);
|
||||
c->our_config.channel_reserve = AMOUNT_SAT(1);
|
||||
c->our_config.htlc_minimum = AMOUNT_MSAT(0);
|
||||
c->channel_info.their_config.channel_reserve = AMOUNT_SAT(0);
|
||||
list_add_tail(&peer->channels, &c->list);
|
||||
}
|
||||
|
@ -715,6 +722,8 @@ int main(void)
|
|||
ld = tal(tmpctx, struct lightningd);
|
||||
|
||||
list_head_init(&ld->peers);
|
||||
htlc_in_map_init(&ld->htlcs_in);
|
||||
chainparams = chainparams_for_network("regtest");
|
||||
|
||||
inchans = tal_arr(tmpctx, struct route_info, 0);
|
||||
deadends = tal_arrz(tmpctx, bool, 100);
|
||||
|
|
Loading…
Add table
Reference in a new issue