Skip to content

routing,node: Kademlia table liveness and refresh (closes #21)#32

Merged
ch4r10t33r merged 1 commit into
mainfrom
routing/table-maintenance-21
May 10, 2026
Merged

routing,node: Kademlia table liveness and refresh (closes #21)#32
ch4r10t33r merged 1 commit into
mainfrom
routing/table-maintenance-21

Conversation

@ch4r10t33r
Copy link
Copy Markdown
Owner

Implements discv5-theory table maintenance pieces from issue #21.

Routing table

  • TableEntry with ping_replied; markPingReplied / pingReplied.
  • appendNodesForLogDistances only includes verified peers (FINDNODE relay policy).
  • last_bucket_lookup_ms, markBucketRefreshed, pickStaleBucketForRefresh for periodic bucket refresh.

Node

  • Handshake completion marks peers verified for relay.
  • registerOutboundPing + inbound PONG with matching req_id sets ping_replied (capped tracker).

Tests

  • Filter behavior, stale bucket selection, pong registration, findnode test marks peer verified.

Follow-ups (not in this PR): LRU ping-before-replace when bucket full (needs address book), ENR update on PONG enr_seq, full iterative lookup walk.

- Table rows are TableEntry { id, ping_replied }; FINDNODE only lists ping_replied peers.
- RoutingTable.markPingReplied / pingReplied; last_bucket_lookup_ms with
  markBucketRefreshed and pickStaleBucketForRefresh for periodic refresh.
- Handshake completion marks peers verified; registerOutboundPing + inbound PONG
  matches spec PING correlation.
- Tests: ping_replied filter, stale bucket pick, pong registration path.
@ch4r10t33r ch4r10t33r merged commit 02b02f5 into main May 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant