Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

askrene: clamp impression-adjusted min/max to channel capacity

Đang mở
#9,375 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 2 ngày

@Lagrang3 đang làm issue này rồi.

Từ ngày 4/8/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

Follow-up from #9150.

layer_apply_constraints() applies impressions without bounding the result:

  • reverse direction: min and max both grow by imp->amount, saturating at UINT64_MAX, with no clamp to the channel's gossmap capacity
  • forward direction: both shrink by imp->amount, saturating at 0

Since #9150, get_constraints() seeds *max from gossmap_chan_get_capacity() instead of -1ULL, so reverse-direction impressions can push max above the channel's real capacity, and enough forward-direction volume drives max to 0 and makes askrene treat a live channel as dead.

The FIXME added to test_xpay_fake_channeld in that PR documents the symptom:

/* FIXME: We fail on #10, due mainly to a buildup of usage on 0x2134x0/0:
 * Failed: We could not find a usable set of paths. The shortest path is
 * 103x1x0->0x2134x0->1725x11x1725, but 0x2134x0/0 exceeds htlc_maximum_msat ~1000448msat
 */

Bounded in practice by two things: mcf.c defensively does if (min > max) min = max, and xpay calls askrene-age with a one-hour cutoff before every payment, so impressions expire. But the layer state is still incoherent in the meantime, and explain_failure.c documents an invariant (total >= max_capacity_known >= known_usable) that impressions can violate, since max can exceed cap_msat.

Minimum fix: clamp max to the channel capacity and min to max inside layer_apply_constraints().

Broader question, raised by Lagrang3 during review: the magnitude by which impressions move the bars is too aggressive. A successful payment proves liquidity of at least amount existed, so subtracting the full amount from max discards information rather than adding it. Worth revisiting the model alongside the clamp.

Ngôn ngữ chính
C
Star
3.1k
Fork
1k
Merge trung bình
4 ngày 2 giờ
Pull request đã merge (30 ngày)
45

Chuẩn bị môi trường

  • Có Dockerfile hoặc tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ElementsProject/lightning

Tất cả issue của ElementsProject/lightning

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.