From e2bc68de1af27d3459878f43c40061d0c30d09d7 Mon Sep 17 00:00:00 2001 From: Bitflash-sh Date: Fri, 24 Jul 2026 14:46:49 -0300 Subject: Automatic relay discovery over Nostr + call-to-action Relay operators announce their relay with -announcerelay=host:port; every node discovers announced relays (kind 38502) and adds them to its failover list, so volunteer relays join with no maintainer edit or approval. Anti-spam cap + validation; relays are trustless (echan makes a bad relay unable to read/MITM). README: automatic relay-volunteer guide, 'don't let the network die' section. --- src/net.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index 659de05..31afaf5 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -442,18 +442,27 @@ void ThreadBtfAccept(void* parg) Sleep(5000); } size_t iRelay = 0; + bool fPicked = false; loop { if (fShutdown) return; - if (vBtfMeetingRelays.empty()) + // Curated seeds + relays discovered from Nostr announcements. + vector relays = BtfAllRelays(); + if (relays.empty()) { Sleep(10000); // no meeting relay configured continue; } + // Random start spreads nodes across all relays (incl. volunteer ones). + if (!fPicked) + { + iRelay = (size_t)GetRand(relays.size()); + fPicked = true; + } // Stick to the current relay while it works; on failure, fail over to - // the next seed so a DDoS'd/blocked relay IP can't keep us offline. - string strMeeting = vBtfMeetingRelays[iRelay % vBtfMeetingRelays.size()]; + // the next one so a DDoS'd/blocked relay IP can't keep us offline. + string strMeeting = relays[iRelay % relays.size()]; size_t colon = strMeeting.rfind(':'); if (colon == string::npos) { -- cgit v1.2.3