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

Channel-scoped error can be lost while channeld exits

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

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

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

Từ ngày 18/8/2026.

  • #9436 của @vincenzopalazzo — đang mở

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
68/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
networking

Hướng nghiên cứu

Bắt đầu trong connectd/multiplex.c, tại read_body_from_peer_done, và lần theo cách các thông báo WIRE_ERROR theo phạm vi channel được định tuyến khi tồn tại một subdaemon tương ứng. Sử dụng yêu cầu BOLT #1 được liên kết trong issue để định hướng hành vi mong đợi. Được coi là hoàn tất khi quá trình xác thực end-to-end trong regtest cho thấy lightningd làm channel thất bại và broadcast commitment.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

26.06.x

On master f80895bac, channeld sent a warning through peer_failed_warn_nodisconnect and began exiting. connectd then decrypted the peer's channel-scoped WIRE_ERROR and queued it to that subdaemon after lightningd had begun killing it. channeld never received the error, so the channel remained open.

BOLT #1 requires a receiving node, upon receiving a channel-scoped error, to:

MUST fail the channel referred to by channel_id, if that channel is with the sending node.

BOLT #1 requirements

Forwarding WIRE_ERROR directly from connectd to lightningd when a matching subdaemon exists fixes the race. End-to-end regtest validation confirmed that lightningd failed the channel, and broadcasted the commitment:

diff --git a/connectd/multiplex.c b/connectd/multiplex.c
index 1051645f..696e9e1b 100644
--- a/connectd/multiplex.c
+++ b/connectd/multiplex.c
@@ -1493,6 +1493,15 @@ static struct io_plan *read_body_from_peer_done(struct io_conn *peer_conn,

        /* If we don't find a subdaemon for this, create a new one. */
        subd = find_subd(peer, &channel_id);
+       if (subd && type == WIRE_ERROR) {
+               daemon_conn_send(peer->daemon->master,
+                                take(towire_connectd_peer_spoke(NULL, &peer->id,
+                                                               peer->counter,
+                                                               type,
+                                                               &channel_id,
+                                                               is_peer_error(tmpctx, decrypted))));
+               return next_read(peer_conn, peer);
+       }
        if (!subd) {
               enum peer_wire t = fromwire_peektype(decrypted);
Ngôn ngữ chính
C
Star
3.1k
Fork
1k
Merge trung bình
3 ngày 20 giờ
Pull request đã merge (30 ngày)
30

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.