mirror of
https://github.com/permissionlesstech/georelays.git
synced 2026-07-24 23:45:17 +00:00
Merge pull request #3 from permissionlesstech/concurrent-relay-discovery
feat: concurrent relay discovery
This commit is contained in:
@@ -46,7 +46,7 @@ jobs:
|
||||
|
||||
- name: Update relay discovery results
|
||||
run: |
|
||||
python3 nostr_relay_discovery.py wss://relay.damus.io --output relay_discovery_results.json
|
||||
python3 nostr_relay_discovery.py wss://relay.damus.io --output relay_discovery_results.json --batch-size 20
|
||||
|
||||
- name: Update relay geolocation data
|
||||
run: |
|
||||
|
||||
+142
-47
@@ -60,12 +60,13 @@ class RelayDiscoveryStats:
|
||||
class NostrRelayDiscovery:
|
||||
"""Nostr relay discovery tool using breadth-first search through follow lists"""
|
||||
|
||||
def __init__(self, initial_relay: str, max_depth: int = 3, connection_timeout: int = 5, output_file: str = "relay_discovery_results.json", save_point: int = SAVE_POINT):
|
||||
def __init__(self, initial_relay: str, max_depth: int = 3, connection_timeout: int = 5, output_file: str = "relay_discovery_results.json", save_point: int = SAVE_POINT, batch_size: int = 10):
|
||||
self.initial_relay = initial_relay
|
||||
self.max_depth = max_depth
|
||||
self.connection_timeout = connection_timeout
|
||||
self.output_file = output_file
|
||||
self.save_point = save_point
|
||||
self.batch_size = batch_size
|
||||
|
||||
# Discovery state
|
||||
self.to_visit: deque = deque() # (relay_url, depth) - will be populated by load_existing_results
|
||||
@@ -197,6 +198,38 @@ class NostrRelayDiscovery:
|
||||
logger.debug(f"Failed to connect to {relay_url}: {e}")
|
||||
return False
|
||||
|
||||
async def test_relays_connections(self, relay_urls: List[str]) -> Dict[str, bool]:
|
||||
"""Test multiple relays concurrently and return a dict of relay_url -> functioning status"""
|
||||
if not relay_urls:
|
||||
return {}
|
||||
|
||||
logger.info(f"Testing {len(relay_urls)} relays concurrently")
|
||||
|
||||
# Create tasks for concurrent testing
|
||||
tasks = []
|
||||
for relay_url in relay_urls:
|
||||
task = asyncio.create_task(self.test_relay_connection(relay_url))
|
||||
tasks.append((relay_url, task))
|
||||
|
||||
# Wait for all tasks to complete
|
||||
results = {}
|
||||
for relay_url, task in tasks:
|
||||
try:
|
||||
is_functioning = await task
|
||||
results[relay_url] = is_functioning
|
||||
if is_functioning:
|
||||
logger.info(f"✓ Relay {relay_url} is functioning")
|
||||
else:
|
||||
logger.warning(f"✗ Relay {relay_url} is not functioning")
|
||||
except Exception as e:
|
||||
logger.error(f"Error testing relay {relay_url}: {e}")
|
||||
results[relay_url] = False
|
||||
|
||||
functioning_count = sum(1 for status in results.values() if status)
|
||||
logger.info(f"Batch test completed: {functioning_count}/{len(relay_urls)} relays functioning")
|
||||
|
||||
return results
|
||||
|
||||
async def fetch_events(self, relay_url: str) -> List[Dict]:
|
||||
"""Fetch kind 3 events (follow lists) or kind 10002 (NIP-66) from a relay"""
|
||||
follow_events = []
|
||||
@@ -257,6 +290,35 @@ class NostrRelayDiscovery:
|
||||
logger.info(f"Collected {len(follow_events)} follow events from {relay_url}")
|
||||
return follow_events
|
||||
|
||||
async def fetch_events_from_relays(self, relay_urls: List[str]) -> Dict[str, List[Dict]]:
|
||||
"""Fetch events from multiple relays concurrently and return a dict of relay_url -> events"""
|
||||
if not relay_urls:
|
||||
return {}
|
||||
|
||||
logger.info(f"Fetching events from {len(relay_urls)} relays concurrently")
|
||||
|
||||
# Create tasks for concurrent event fetching
|
||||
tasks = []
|
||||
for relay_url in relay_urls:
|
||||
task = asyncio.create_task(self.fetch_events(relay_url))
|
||||
tasks.append((relay_url, task))
|
||||
|
||||
# Wait for all tasks to complete
|
||||
results = {}
|
||||
for relay_url, task in tasks:
|
||||
try:
|
||||
events = await task
|
||||
results[relay_url] = events
|
||||
logger.info(f"✓ Fetched {len(events)} events from {relay_url}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error fetching events from relay {relay_url}: {e}")
|
||||
results[relay_url] = []
|
||||
|
||||
total_events = sum(len(events) for events in results.values())
|
||||
logger.info(f"Batch fetch completed: {total_events} total events from {len(relay_urls)} relays")
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def extract_relays_from_events(self, events: List[Dict]) -> Set[str]:
|
||||
"""Extract relay URLs from follow list events"""
|
||||
@@ -325,60 +387,79 @@ class NostrRelayDiscovery:
|
||||
return False
|
||||
|
||||
async def discover_relays(self) -> Set[str]:
|
||||
"""Main discovery method using breadth-first search"""
|
||||
"""Main discovery method using breadth-first search with concurrent processing"""
|
||||
# First, try to load existing results and verify them
|
||||
logger.info("Checking for existing results to build upon...")
|
||||
await self.load_existing_results()
|
||||
|
||||
logger.info(f"Starting relay discovery from existing verified relays or {self.initial_relay}")
|
||||
logger.info(f"Starting relay discovery with batch size {self.batch_size}")
|
||||
logger.info(f"Maximum depth: {self.max_depth}")
|
||||
|
||||
while self.to_visit:
|
||||
current_relay, depth = self.to_visit.popleft()
|
||||
self.to_visit_set.remove(current_relay)
|
||||
# Collect a batch of relays to process
|
||||
current_batch = []
|
||||
batch_depth_map = {}
|
||||
|
||||
# Skip if already visited
|
||||
if current_relay in self.visited_relays:
|
||||
continue
|
||||
|
||||
# Skip if depth exceeds maximum
|
||||
if depth > self.max_depth:
|
||||
logger.info(f"Reached maximum depth {self.max_depth}, stopping exploration")
|
||||
continue
|
||||
|
||||
logger.info(f"Processing relay {current_relay} at depth {depth}")
|
||||
self.visited_relays.add(current_relay)
|
||||
|
||||
if await self.test_relay_connection(current_relay):
|
||||
logger.info(f"✓ Relay {current_relay} is functioning")
|
||||
self.functioning_relays.add(current_relay)
|
||||
self.stats.functioning_relays += 1
|
||||
# Get up to batch_size relays from the queue
|
||||
for _ in range(min(self.batch_size, len(self.to_visit))):
|
||||
if not self.to_visit:
|
||||
break
|
||||
|
||||
current_relay, depth = self.to_visit.popleft()
|
||||
self.to_visit_set.remove(current_relay)
|
||||
|
||||
# Only fetch follow lists if we haven't reached max depth
|
||||
if depth < self.max_depth:
|
||||
try:
|
||||
# Fetch follow lists from this relay
|
||||
events = await self.fetch_events(current_relay)
|
||||
|
||||
if events:
|
||||
# Extract new relays from follow lists
|
||||
new_relays = self.extract_relays_from_events(events)
|
||||
|
||||
# Add new relays to visit queue for next depth level
|
||||
for relay_url in new_relays:
|
||||
if relay_url not in self.visited_relays and relay_url not in self.to_visit_set:
|
||||
self.to_visit.append((relay_url, depth + 1))
|
||||
self.to_visit_set.add(relay_url)
|
||||
self.stats.total_relays_found += 1
|
||||
logger.debug(f"Added {relay_url} to visit queue at depth {depth + 1}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing relay {current_relay}: {e}")
|
||||
# Skip if already visited
|
||||
if current_relay in self.visited_relays:
|
||||
continue
|
||||
|
||||
# Skip if depth exceeds maximum
|
||||
if depth > self.max_depth:
|
||||
logger.info(f"Reached maximum depth {self.max_depth}, stopping exploration")
|
||||
continue
|
||||
|
||||
else:
|
||||
logger.warning(f"✗ Relay {current_relay} is not functioning")
|
||||
current_batch.append(current_relay)
|
||||
batch_depth_map[current_relay] = depth
|
||||
self.visited_relays.add(current_relay)
|
||||
|
||||
# Save progress periodically every save_point relays processed
|
||||
if not current_batch:
|
||||
break
|
||||
|
||||
logger.info(f"Processing batch of {len(current_batch)} relays")
|
||||
|
||||
# Test all relays in the batch concurrently
|
||||
test_results = await self.test_relays_connections(current_batch)
|
||||
|
||||
# Collect functioning relays for event fetching
|
||||
functioning_relays_batch = []
|
||||
for relay_url, is_functioning in test_results.items():
|
||||
if is_functioning:
|
||||
self.functioning_relays.add(relay_url)
|
||||
self.stats.functioning_relays += 1
|
||||
|
||||
# Only add to event fetching if we haven't reached max depth
|
||||
depth = batch_depth_map[relay_url]
|
||||
if depth < self.max_depth:
|
||||
functioning_relays_batch.append(relay_url)
|
||||
|
||||
# Fetch events from all functioning relays concurrently
|
||||
if functioning_relays_batch:
|
||||
events_results = await self.fetch_events_from_relays(functioning_relays_batch)
|
||||
|
||||
# Process events and extract new relays
|
||||
for relay_url, events in events_results.items():
|
||||
if events:
|
||||
depth = batch_depth_map[relay_url]
|
||||
new_relays = self.extract_relays_from_events(events)
|
||||
|
||||
# Add new relays to visit queue for next depth level
|
||||
for new_relay_url in new_relays:
|
||||
if new_relay_url not in self.visited_relays and new_relay_url not in self.to_visit_set:
|
||||
self.to_visit.append((new_relay_url, depth + 1))
|
||||
self.to_visit_set.add(new_relay_url)
|
||||
self.stats.total_relays_found += 1
|
||||
logger.debug(f"Added {new_relay_url} to visit queue at depth {depth + 1}")
|
||||
|
||||
# Save progress periodically
|
||||
if len(self.visited_relays) % self.save_point == 0:
|
||||
logger.info(f"Progress checkpoint: Saving results after processing {len(self.visited_relays)} relays")
|
||||
self.save_results()
|
||||
@@ -400,7 +481,8 @@ class NostrRelayDiscovery:
|
||||
"initial_relay": self.initial_relay,
|
||||
"max_depth": self.max_depth,
|
||||
"connection_timeout": self.connection_timeout,
|
||||
"save_point": self.save_point
|
||||
"save_point": self.save_point,
|
||||
"batch_size": self.batch_size
|
||||
},
|
||||
"progress_info": {
|
||||
"relays_processed": len(self.visited_relays),
|
||||
@@ -442,7 +524,7 @@ async def main():
|
||||
"--timeout",
|
||||
type=int,
|
||||
default=5,
|
||||
help="Connection timeout in seconds (default: 10)"
|
||||
help="Connection timeout in seconds (default: 5)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
@@ -455,6 +537,12 @@ async def main():
|
||||
default=SAVE_POINT,
|
||||
help=f"Save progress every N relays processed (default: {SAVE_POINT})"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--batch-size",
|
||||
type=int,
|
||||
default=10,
|
||||
help="Number of relays to process concurrently (default: 10)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
@@ -467,7 +555,14 @@ async def main():
|
||||
logging.getLogger().setLevel(logging.DEBUG)
|
||||
|
||||
# Validate initial relay URL
|
||||
discovery = NostrRelayDiscovery(args.initial_relay, args.max_depth, args.timeout, args.output, args.save_point)
|
||||
discovery = NostrRelayDiscovery(
|
||||
args.initial_relay,
|
||||
args.max_depth,
|
||||
args.timeout,
|
||||
args.output,
|
||||
args.save_point,
|
||||
args.batch_size
|
||||
)
|
||||
if not discovery.is_valid_relay_url(args.initial_relay):
|
||||
print(f"Error: Invalid relay URL: {args.initial_relay}")
|
||||
print("Relay URL should start with ws:// or wss://")
|
||||
|
||||
+258
-258
@@ -1,265 +1,265 @@
|
||||
Relay URL,Latitude,Longitude
|
||||
nostr.red5d.dev,37.7621,-122.3971
|
||||
wot.soundhsa.com,39.0997,-94.5786
|
||||
relay.utxo.farm,34.7331,135.8183
|
||||
nostr.satstralia.com,64.1355,-21.8954
|
||||
relay.satlantis.io,32.8546,-79.9748
|
||||
relay.bullishbounty.com,37.7621,-122.3971
|
||||
relay.hook.cafe,37.7621,-122.3971
|
||||
wot.sebastix.social,51.3700,6.1681
|
||||
khatru.nostrver.se,51.3700,6.1681
|
||||
wheat.happytavern.co,37.7621,-122.3971
|
||||
nostrue.com,40.8043,-74.0121
|
||||
relay.javi.space,43.4628,11.8807
|
||||
nostr.pleb.one,38.6273,-90.1979
|
||||
relay.snort.social,53.3331,-6.2489
|
||||
relay.letsfo.com,52.2298,21.0118
|
||||
n.ok0.org,-36.8485,174.7635
|
||||
relay.nostromo.social,49.4542,11.0775
|
||||
nostr.zenon.network,40.7143,-74.0060
|
||||
relay02.lnfi.network,39.0997,-94.5786
|
||||
relay.agorist.space,52.3740,4.8897
|
||||
nostr.carroarmato0.be,50.8517,3.6089
|
||||
nostr-02.czas.top,51.2217,6.7762
|
||||
relay.moinsen.com,50.4779,12.3713
|
||||
nostr.thaliyal.com,40.8220,-74.4488
|
||||
nostream.breadslice.com,37.7621,-122.3971
|
||||
cyberspace.nostr1.com,40.7143,-74.0060
|
||||
relay5.bitransfer.org,37.7621,-122.3971
|
||||
relay.artiostr.ch,37.7621,-122.3971
|
||||
nostr.data.haus,50.4779,12.3713
|
||||
relay.jeffg.fyi,43.7064,-79.3986
|
||||
nostrelites.org,41.8500,-87.6500
|
||||
wot.dtonon.com,37.7621,-122.3971
|
||||
relay.exit.pub,50.4779,12.3713
|
||||
nostr.spicyz.io,37.7621,-122.3971
|
||||
black.nostrcity.club,41.8119,-87.6873
|
||||
nostr.jfischer.org,49.4453,11.0222
|
||||
relay04.lnfi.network,39.0997,-94.5786
|
||||
solo.itsalldance.space,32.7244,-96.6755
|
||||
relay.2nix.de,60.1695,24.9354
|
||||
relay.fountain.fm,39.0997,-94.5786
|
||||
relay.chakany.systems,37.7621,-122.3971
|
||||
nostr.mom,50.4779,12.3713
|
||||
relay.mess.ch,47.1345,9.0964
|
||||
inbox.azzamo.net,52.2284,21.0522
|
||||
relay.siamdev.cc,13.9178,100.4240
|
||||
nostr.openhoofd.nl,51.5717,3.7042
|
||||
relay.cypherflow.ai,48.8534,2.3488
|
||||
nos.lol,50.4779,12.3713
|
||||
relay.tagayasu.xyz,45.4112,-75.6981
|
||||
relay.puresignal.news,37.7621,-122.3971
|
||||
nos.xmark.cc,51.0344,2.3768
|
||||
relay.bitcoinartclock.com,50.4779,12.3713
|
||||
nostr.tadryanom.me,37.7621,-122.3971
|
||||
relay.nostx.io,37.7621,-122.3971
|
||||
nostr.einundzwanzig.space,50.1155,8.6842
|
||||
nostr-relay.online,37.7621,-122.3971
|
||||
relay.arx-ccn.com,50.4779,12.3713
|
||||
no.str.cr,9.9339,-84.0849
|
||||
relay.g1sms.fr,43.9298,2.1480
|
||||
r.bitcoinhold.net,37.7621,-122.3971
|
||||
relay.nostr.net,50.4779,12.3713
|
||||
nostr.makibisskey.work,37.7621,-122.3971
|
||||
relay.endfiat.money,37.7621,-122.3971
|
||||
strfry.bonsai.com,37.8716,-122.2728
|
||||
relay.nostrhub.fr,50.1155,8.6842
|
||||
srtrelay.c-stellar.net,37.7621,-122.3971
|
||||
prl.plus,55.7522,37.6156
|
||||
vitor.nostr1.com,40.7143,-74.0060
|
||||
librerelay.aaroniumii.com,37.7621,-122.3971
|
||||
relay.coinos.io,37.7621,-122.3971
|
||||
nostr-relay.psfoundation.info,39.0437,-77.4875
|
||||
ithurtswhenip.ee,50.7990,-1.0913
|
||||
nostr.myshosholoza.co.za,52.3710,4.9042
|
||||
nostr.lojong.info,37.7621,-122.3971
|
||||
relay.mattybs.lol,37.7621,-122.3971
|
||||
relay.olas.app,50.4779,12.3713
|
||||
nostr.azzamo.net,52.2284,21.0522
|
||||
relay.goodmorningbitcoin.com,37.7621,-122.3971
|
||||
relay.bitcoinveneto.org,64.1355,-21.8954
|
||||
relay.fr13nd5.com,50.1155,8.6842
|
||||
nostr-relay-1.trustlessenterprise.com,37.7621,-122.3971
|
||||
relay.cosmicbolt.net,37.3924,-121.9623
|
||||
purpura.cloud,37.7621,-122.3971
|
||||
nostr-rs-relay.dev.fedibtc.com,39.0437,-77.4875
|
||||
nostr.massmux.com,50.1155,8.6842
|
||||
nostr.21crypto.ch,46.5160,6.6328
|
||||
slick.mjex.me,39.0437,-77.4875
|
||||
nostr-03.dorafactory.org,1.2897,103.8501
|
||||
relayone.geektank.ai,17.1210,-61.8433
|
||||
relay.barine.co,37.7621,-122.3971
|
||||
nostr.2b9t.xyz,34.0522,-118.2437
|
||||
relay.nostr.vet,52.5273,5.7228
|
||||
relay.holzeis.me,37.7621,-122.3971
|
||||
nostr.sagaciousd.com,49.2497,-123.1193
|
||||
fanfares.nostr1.com,40.7143,-74.0060
|
||||
pyramid.fiatjaf.com,50.1155,8.6842
|
||||
santo.iguanatech.net,40.8344,-74.1377
|
||||
dev-relay.lnfi.network,39.0997,-94.5786
|
||||
strfry.shock.network,41.8847,-88.2040
|
||||
nostr.liberty.fans,38.8003,-90.6265
|
||||
wot.geektank.ai,17.1210,-61.8433
|
||||
relay.mostro.network,40.8344,-74.1377
|
||||
relay.toastr.net,40.8043,-74.0121
|
||||
nostr.camalolo.com,24.1469,120.6839
|
||||
relay.illuminodes.com,47.6062,-122.3321
|
||||
relay03.lnfi.network,39.0997,-94.5786
|
||||
relayone.soundhsa.com,39.0997,-94.5786
|
||||
nostr.jerrynya.fun,31.2222,121.4581
|
||||
nostr-02.yakihonne.com,1.3215,103.6957
|
||||
nostr.blankfors.se,60.1695,24.9354
|
||||
a.nos.lol,50.4779,12.3713
|
||||
relay.nostrhub.tech,49.4453,11.0222
|
||||
wot.nostr.net,37.7621,-122.3971
|
||||
relayrs.notoshi.win,37.7621,-122.3971
|
||||
fenrir-s.notoshi.win,37.7621,-122.3971
|
||||
relay.nostrdice.com,-33.8678,151.2073
|
||||
nostr.hekster.org,37.3924,-121.9623
|
||||
nostr.mikoshi.de,51.2217,6.7762
|
||||
theoutpost.life,64.1355,-21.8954
|
||||
nostr.overmind.lol,37.7621,-122.3971
|
||||
relay.nostar.org,37.7621,-122.3971
|
||||
satsage.xyz,37.3924,-121.9623
|
||||
nostr-relay.shirogaku.xyz,37.7621,-122.3971
|
||||
nostr-rs-relay-ishosta.phamthanh.me,37.7621,-122.3971
|
||||
nostr-relay.cbrx.io,37.7621,-122.3971
|
||||
relay.wavlake.com,41.2619,-95.8608
|
||||
nostr.l484.com,30.2960,-97.6396
|
||||
wot.codingarena.top,50.4779,12.3713
|
||||
wot.nostr.party,36.1659,-86.7844
|
||||
relay.21e6.cz,50.0880,14.4208
|
||||
dev-nostr.bityacht.io,25.0531,121.5264
|
||||
nostr.vulpem.com,49.4542,11.0775
|
||||
soloco.nl,37.7621,-122.3971
|
||||
relay.copylaradio.com,50.7990,-1.0913
|
||||
nostr.notribe.net,40.8344,-74.1377
|
||||
inbox.mycelium.social,38.6273,-90.1979
|
||||
relay2.angor.io,50.1155,8.6842
|
||||
relay.nostraddress.com,37.7621,-122.3971
|
||||
temp.iris.to,37.7621,-122.3971
|
||||
nostr.thebiglake.org,32.7244,-96.6755
|
||||
relay.dwadziesciajeden.pl,52.2298,21.0118
|
||||
nostr.roundrockbitcoiners.com,40.8043,-74.0121
|
||||
inbox.relays.land,50.1155,8.6842
|
||||
premium.primal.net,37.7621,-122.3971
|
||||
relay.lumina.rocks,49.4453,11.0222
|
||||
adre.su,59.9386,30.3141
|
||||
social.proxymana.net,60.1695,24.9354
|
||||
nostrelay.circum.space,51.4566,7.0123
|
||||
zap.watch,45.5088,-73.5878
|
||||
relay.nostriot.com,43.7064,-79.3986
|
||||
schnorr.me,37.7621,-122.3971
|
||||
relay.credenso.cafe,43.4254,-80.5112
|
||||
nostr-2.21crypto.ch,46.5160,6.6328
|
||||
nproxy.kristapsk.lv,60.1695,24.9354
|
||||
purplerelay.com,50.1155,8.6842
|
||||
nostr.smut.cloud,37.7621,-122.3971
|
||||
nostr.coincards.com,43.7064,-79.3986
|
||||
nostr-relay.amethyst.name,35.7721,-78.6386
|
||||
kitchen.zap.cooking,37.7621,-122.3971
|
||||
nostr.huszonegy.world,47.4984,19.0404
|
||||
nostr.rblb.it,37.7621,-122.3971
|
||||
nostr.rikmeijer.nl,50.4779,12.3713
|
||||
nostr.yael.at,52.3740,4.8897
|
||||
nostr.rtvslawenia.com,49.4542,11.0775
|
||||
noxir.kpherox.dev,34.8436,135.5084
|
||||
nostr.4rs.nl,49.4453,11.0222
|
||||
shu02.shugur.net,21.4901,39.1862
|
||||
relay.freeplace.nl,52.3740,4.8897
|
||||
relay.evanverma.com,40.8344,-74.1377
|
||||
nostr.community.ath.cx,45.5088,-73.5878
|
||||
nostr.n7ekb.net,47.5707,-122.2221
|
||||
relay.mwaters.net,50.9519,1.8563
|
||||
freelay.sovbit.host,64.1355,-21.8954
|
||||
relay.electriclifestyle.com,26.1223,-80.1434
|
||||
relay.nostr.band,60.1695,24.9354
|
||||
relay.notoshi.win,13.3622,100.9835
|
||||
relay.0xchat.com,1.2897,103.8501
|
||||
relay.chorus.community,50.1155,8.6842
|
||||
relay.nostr.wirednet.jp,35.9356,139.3044
|
||||
relay.magiccity.live,25.8130,-80.2320
|
||||
shu04.shugur.net,25.0772,55.3093
|
||||
relay.stream.labs.h3.se,59.3294,18.0687
|
||||
nostr-01.yakihonne.com,1.3215,103.6957
|
||||
relay.hasenpfeffr.com,39.0437,-77.4875
|
||||
relay.artx.market,43.7064,-79.3986
|
||||
relay.satsdays.com,1.2897,103.8501
|
||||
portal-relay.pareto.space,49.4453,11.0222
|
||||
vidono.apps.slidestr.net,48.8534,2.3488
|
||||
nostr.kungfu-g.rip,33.7865,-84.4454
|
||||
nostr.plantroon.com,50.1025,8.6299
|
||||
relay.lifpay.me,1.2897,103.8501
|
||||
relay-rpi.edufeed.org,49.4453,11.0222
|
||||
nostr.stakey.net,52.5250,5.7181
|
||||
wot.sudocarlos.com,43.7064,-79.3986
|
||||
relay.orangepill.ovh,49.0127,1.9694
|
||||
relay.digitalezukunft.cyou,45.5088,-73.5878
|
||||
nostr.chaima.info,50.1155,8.6842
|
||||
relay.degmods.com,50.4779,12.3713
|
||||
relay.varke.eu,52.6958,6.1944
|
||||
relay-testnet.k8s.layer3.news,37.3394,-121.8950
|
||||
strfry.felixzieger.de,50.1025,8.6299
|
||||
relay.lnfi.network,38.9209,-77.5039
|
||||
x.kojira.io,37.7621,-122.3971
|
||||
nostr.sathoarder.com,48.5839,7.7455
|
||||
relay-dev.satlantis.io,40.8344,-74.1377
|
||||
relay.getsafebox.app,43.7064,-79.3986
|
||||
gnostr.com,42.6975,23.3241
|
||||
wot.brightbolt.net,47.6928,-116.7850
|
||||
shu05.shugur.net,48.8534,2.3488
|
||||
relay.nsnip.io,60.1695,24.9354
|
||||
nostr.bilthon.dev,25.8130,-80.2320
|
||||
relay.sincensura.org,37.7621,-122.3971
|
||||
nostr.tac.lol,47.4740,-122.2610
|
||||
yabu.me,35.6090,139.7302
|
||||
travis-shears-nostr-relay-v2.fly.dev,41.8119,-87.6873
|
||||
nostrja-kari.heguro.com,37.7621,-122.3971
|
||||
orangesync.tech,50.9333,6.9500
|
||||
nostr.agentcampfire.com,52.3740,4.8897
|
||||
relay.angor.io,50.1155,8.6842
|
||||
nostr.middling.mydns.jp,35.8089,140.1185
|
||||
nostr.spaceshell.xyz,37.7621,-122.3971
|
||||
relay.13room.space,37.7621,-122.3971
|
||||
nostr.snowbla.de,60.1695,24.9354
|
||||
relay.satlantis.io,32.8546,-79.9748
|
||||
relay.laantungir.net,45.5088,-73.5878
|
||||
nostr.rohoss.com,48.1374,11.5755
|
||||
nostr.diakod.com,37.7621,-122.3971
|
||||
nostr.hifish.org,47.3667,8.5500
|
||||
nostr.0x7e.xyz,47.5056,8.7241
|
||||
relay.wolfcoil.com,35.6090,139.7302
|
||||
relay.davidebtc.me,50.1155,8.6842
|
||||
relay.2nix.de,60.1695,24.9354
|
||||
relay.artx.market,43.7064,-79.3986
|
||||
relay.hodl.ar,-32.9468,-60.6393
|
||||
relay.etch.social,41.2619,-95.8608
|
||||
strfry.openhoofd.nl,51.5717,3.7042
|
||||
relay.ru.ac.th,13.7540,100.5014
|
||||
relay.ngengine.org,53.3331,-6.2489
|
||||
nostr.kalf.org,52.3740,4.8897
|
||||
relay.nosto.re,51.3700,6.1681
|
||||
nostr.now,35.6090,139.7302
|
||||
wot.nostr.place,30.2672,-97.7431
|
||||
relay.damus.io,37.7621,-122.3971
|
||||
relay.0xchat.com,1.2897,103.8501
|
||||
relay.nostar.org,37.7621,-122.3971
|
||||
wot.dtonon.com,37.7621,-122.3971
|
||||
relayone.soundhsa.com,39.0997,-94.5786
|
||||
relay.primal.net,37.7621,-122.3971
|
||||
relay.zone667.com,60.1695,24.9354
|
||||
relay.usefusion.ai,38.7135,-78.1594
|
||||
relay.mccormick.cx,52.3740,4.8897
|
||||
alien.macneilmediagroup.com,37.7621,-122.3971
|
||||
orangepiller.org,60.1695,24.9354
|
||||
offchain.pub,34.0522,-118.2437
|
||||
nostr-relay.zimage.com,34.0522,-118.2437
|
||||
tollbooth.stens.dev,51.4566,7.0123
|
||||
relay.vrtmrz.net,37.7621,-122.3971
|
||||
nostrelay.memory-art.xyz,37.7621,-122.3971
|
||||
relay-admin.thaliyal.com,40.8220,-74.4488
|
||||
relay.holzeis.me,37.7621,-122.3971
|
||||
nostr.overmind.lol,37.7621,-122.3971
|
||||
relay.chakany.systems,37.7621,-122.3971
|
||||
x.kojira.io,37.7621,-122.3971
|
||||
relay.mostro.network,40.8344,-74.1377
|
||||
relay.tapestry.ninja,40.8043,-74.0121
|
||||
nostr.oxtr.dev,50.4779,12.3713
|
||||
articles.layer3.news,37.3394,-121.8950
|
||||
relay.conduit.market,37.7621,-122.3971
|
||||
internationalright-wing.org,-22.5986,-48.8003
|
||||
relay01.lnfi.network,39.0997,-94.5786
|
||||
nostr-02.dorafactory.org,1.2897,103.8501
|
||||
nostr.coincrowd.fund,39.0437,-77.4875
|
||||
ribo.eu.nostria.app,52.3740,4.8897
|
||||
nostr.night7.space,50.4779,12.3713
|
||||
relay.bitcoindistrict.org,37.7621,-122.3971
|
||||
relay.satsdays.com,1.2897,103.8501
|
||||
relay.sigit.io,50.4779,12.3713
|
||||
nostr-02.yakihonne.com,1.3215,103.6957
|
||||
inbox.azzamo.net,52.2284,21.0522
|
||||
ribo.eu.nostria.app,52.3740,4.8897
|
||||
nostr.coincrowd.fund,39.0437,-77.4875
|
||||
relay.snort.social,53.3331,-6.2489
|
||||
wheat.happytavern.co,37.7621,-122.3971
|
||||
relay.mess.ch,47.1345,9.0964
|
||||
zap.watch,45.5088,-73.5878
|
||||
relay.exit.pub,50.4779,12.3713
|
||||
nostr-relay.zimage.com,34.0522,-118.2437
|
||||
relay.illuminodes.com,47.6062,-122.3321
|
||||
nostr.massmux.com,50.1155,8.6842
|
||||
nostr.zenon.network,40.7143,-74.0060
|
||||
strfry.openhoofd.nl,51.5717,3.7042
|
||||
nostr-rs-relay.dev.fedibtc.com,39.0437,-77.4875
|
||||
vidono.apps.slidestr.net,48.8534,2.3488
|
||||
r.bitcoinhold.net,37.7621,-122.3971
|
||||
nostr-relay.cbrx.io,37.7621,-122.3971
|
||||
relay.chorus.community,50.1155,8.6842
|
||||
relay.tagayasu.xyz,45.4112,-75.6981
|
||||
wot.downisontheup.ca,47.6062,-122.3321
|
||||
nostr.snowbla.de,60.1695,24.9354
|
||||
relay.lnfi.network,37.3394,-121.8950
|
||||
satsage.xyz,37.3924,-121.9623
|
||||
relay.usefusion.ai,38.7135,-78.1594
|
||||
nostr.red5d.dev,37.7621,-122.3971
|
||||
nostr-relay.shirogaku.xyz,37.7621,-122.3971
|
||||
social.proxymana.net,60.1695,24.9354
|
||||
cyberspace.nostr1.com,40.7143,-74.0060
|
||||
relay.g1sms.fr,43.9298,2.1480
|
||||
prl.plus,55.7522,37.6156
|
||||
nos.lol,50.4779,12.3713
|
||||
wot.nostr.place,30.2672,-97.7431
|
||||
nostrelay.circum.space,51.4566,7.0123
|
||||
strfry.felixzieger.de,50.1025,8.6299
|
||||
relay.nosto.re,51.3700,6.1681
|
||||
relay01.lnfi.network,39.0997,-94.5786
|
||||
relay.ngengine.org,53.3331,-6.2489
|
||||
relay.bullishbounty.com,37.7621,-122.3971
|
||||
nostr.openhoofd.nl,51.5717,3.7042
|
||||
nostr.0x7e.xyz,47.5056,8.7241
|
||||
relay-rpi.edufeed.org,49.4453,11.0222
|
||||
relayrs.notoshi.win,37.7621,-122.3971
|
||||
temp.iris.to,37.7621,-122.3971
|
||||
nostr.spaceshell.xyz,37.7621,-122.3971
|
||||
relay.jeffg.fyi,43.7064,-79.3986
|
||||
nostr.rohoss.com,48.1374,11.5755
|
||||
nostr.vulpem.com,49.4542,11.0775
|
||||
nostr-02.czas.top,51.2217,6.7762
|
||||
a.nos.lol,50.4779,12.3713
|
||||
nostr.pleb.one,38.6273,-90.1979
|
||||
relay.nostrdice.com,-33.8678,151.2073
|
||||
relay.credenso.cafe,43.4254,-80.5112
|
||||
relay.wolfcoil.com,35.6090,139.7302
|
||||
no.str.cr,9.9339,-84.0849
|
||||
relay-dev.satlantis.io,40.8344,-74.1377
|
||||
nostr.liberty.fans,38.8003,-90.6265
|
||||
relay.bitcoindistrict.org,37.7621,-122.3971
|
||||
relay.arx-ccn.com,50.4779,12.3713
|
||||
relay.conduit.market,37.7621,-122.3971
|
||||
nostr.rikmeijer.nl,50.4779,12.3713
|
||||
nostr.sathoarder.com,48.5839,7.7455
|
||||
nostrelites.org,41.8500,-87.6500
|
||||
relay.mattybs.lol,37.7621,-122.3971
|
||||
nostr.spicyz.io,37.7621,-122.3971
|
||||
fanfares.nostr1.com,40.7143,-74.0060
|
||||
nostr.coincards.com,43.7064,-79.3986
|
||||
nostr.tac.lol,47.4740,-122.2610
|
||||
relay.copylaradio.com,50.7990,-1.0913
|
||||
dev-nostr.bityacht.io,25.0531,121.5264
|
||||
relay.olas.app,50.4779,12.3713
|
||||
articles.layer3.news,37.3394,-121.8950
|
||||
nostr.diakod.com,37.7621,-122.3971
|
||||
relay.nostraddress.com,37.7621,-122.3971
|
||||
relay.sincensura.org,37.7621,-122.3971
|
||||
relay.vrtmrz.net,37.7621,-122.3971
|
||||
nostr.mikoshi.de,51.2217,6.7762
|
||||
nostr.thaliyal.com,40.8220,-74.4488
|
||||
shu05.shugur.net,48.8534,2.3488
|
||||
orangepiller.org,60.1695,24.9354
|
||||
relay.mockingyou.com,37.5483,-121.9886
|
||||
nostr.primz.org,37.7621,-122.3971
|
||||
nostr-relay.amethyst.name,35.7721,-78.6386
|
||||
relay.lifpay.me,1.2897,103.8501
|
||||
nproxy.kristapsk.lv,60.1695,24.9354
|
||||
relay.etch.social,41.2619,-95.8608
|
||||
relay.siamdev.cc,13.9178,100.4240
|
||||
relay.goodmorningbitcoin.com,37.7621,-122.3971
|
||||
nostr.rblb.it,37.7621,-122.3971
|
||||
relay.nsnip.io,60.1695,24.9354
|
||||
nostr.myshosholoza.co.za,52.3710,4.9042
|
||||
relay.varke.eu,52.6958,6.1944
|
||||
nostr.agentcampfire.com,52.3740,4.8897
|
||||
relay.barine.co,37.7621,-122.3971
|
||||
gnostr.com,42.6975,23.3241
|
||||
offchain.pub,34.0522,-118.2437
|
||||
strfry.shock.network,41.8847,-88.2040
|
||||
relay03.lnfi.network,39.0997,-94.5786
|
||||
nostr.tadryanom.me,37.7621,-122.3971
|
||||
relay.zone667.com,60.1695,24.9354
|
||||
relay.21e6.cz,50.0880,14.4208
|
||||
nostrue.com,40.8043,-74.0121
|
||||
nostr.kalf.org,52.3740,4.8897
|
||||
relay.cosmicbolt.net,37.3924,-121.9623
|
||||
relay04.lnfi.network,39.0997,-94.5786
|
||||
relay.freeplace.nl,52.3740,4.8897
|
||||
relay02.lnfi.network,39.0997,-94.5786
|
||||
relay2.angor.io,50.1155,8.6842
|
||||
relay.mccormick.cx,52.3740,4.8897
|
||||
nostr.kungfu-g.rip,33.7865,-84.4454
|
||||
nostr.n7ekb.net,47.5707,-122.2221
|
||||
nostr.jerrynya.fun,31.2222,121.4581
|
||||
travis-shears-nostr-relay-v2.fly.dev,41.8119,-87.6873
|
||||
nostr.l484.com,30.2960,-97.6396
|
||||
purplerelay.com,50.1155,8.6842
|
||||
soloco.nl,37.7621,-122.3971
|
||||
nostr.oxtr.dev,50.4779,12.3713
|
||||
nostr-relay.online,37.7621,-122.3971
|
||||
relay.nostr.wirednet.jp,35.9356,139.3044
|
||||
nostr-rs-relay-ishosta.phamthanh.me,37.7621,-122.3971
|
||||
wot.sudocarlos.com,43.7064,-79.3986
|
||||
relay.lumina.rocks,49.4453,11.0222
|
||||
relay.cypherflow.ai,48.8534,2.3488
|
||||
relay.fr13nd5.com,50.1155,8.6842
|
||||
nostr.einundzwanzig.space,50.1155,8.6842
|
||||
nostr.roundrockbitcoiners.com,40.8043,-74.0121
|
||||
adre.su,59.9386,30.3141
|
||||
relay.digitalezukunft.cyou,45.5088,-73.5878
|
||||
kitchen.zap.cooking,37.7621,-122.3971
|
||||
nostr.thebiglake.org,32.7244,-96.6755
|
||||
wot.nostr.party,36.1659,-86.7844
|
||||
relay-testnet.k8s.layer3.news,37.3394,-121.8950
|
||||
nostr-relay-1.trustlessenterprise.com,37.7621,-122.3971
|
||||
schnorr.me,37.7621,-122.3971
|
||||
nostr.bilthon.dev,25.8130,-80.2320
|
||||
relay.ru.ac.th,13.7540,100.5014
|
||||
nostr.sagaciousd.com,49.2497,-123.1193
|
||||
inbox.relays.land,50.1155,8.6842
|
||||
nostr.jfischer.org,49.4453,11.0222
|
||||
nostr.stakey.net,52.5250,5.7181
|
||||
nostrja-kari.heguro.com,37.7621,-122.3971
|
||||
fenrir-s.notoshi.win,37.7621,-122.3971
|
||||
relay.dwadziesciajeden.pl,52.2298,21.0118
|
||||
nostr-02.dorafactory.org,1.2897,103.8501
|
||||
nostr.now,35.6090,139.7302
|
||||
nostream.breadslice.com,37.7621,-122.3971
|
||||
shu02.shugur.net,21.4901,39.1862
|
||||
librerelay.aaroniumii.com,37.7621,-122.3971
|
||||
nostr.middling.mydns.jp,35.8089,140.1185
|
||||
relay.nostrcheck.me,37.7621,-122.3971
|
||||
relay.getsafebox.app,43.7064,-79.3986
|
||||
shu04.shugur.net,25.0772,55.3093
|
||||
alien.macneilmediagroup.com,37.7621,-122.3971
|
||||
nostr.community.ath.cx,45.5088,-73.5878
|
||||
relay.nostrhub.fr,50.1155,8.6842
|
||||
relay.moinsen.com,50.4779,12.3713
|
||||
relay.nostr.net,50.4779,12.3713
|
||||
noxir.kpherox.dev,34.8436,135.5084
|
||||
relay.damus.io,37.7621,-122.3971
|
||||
relay.bitcoinveneto.org,64.1355,-21.8954
|
||||
nostr.hifish.org,47.3667,8.5500
|
||||
nostr.yael.at,52.3740,4.8897
|
||||
relay.nostr.band,60.1695,24.9354
|
||||
relay.utxo.farm,34.7331,135.8183
|
||||
relay.hook.cafe,37.7621,-122.3971
|
||||
nostr.camalolo.com,24.1469,120.6839
|
||||
premium.primal.net,37.7621,-122.3971
|
||||
dev-relay.lnfi.network,39.0997,-94.5786
|
||||
relay.evanverma.com,40.8344,-74.1377
|
||||
nostr.blankfors.se,60.1695,24.9354
|
||||
relay.bitcoinartclock.com,50.4779,12.3713
|
||||
black.nostrcity.club,41.8119,-87.6873
|
||||
relay.nostx.io,37.7621,-122.3971
|
||||
nostr.huszonegy.world,47.4984,19.0404
|
||||
nostr.carroarmato0.be,50.8517,3.6089
|
||||
nostr.21crypto.ch,46.5160,6.6328
|
||||
relay-admin.thaliyal.com,40.8220,-74.4488
|
||||
nos.xmark.cc,51.0344,2.3768
|
||||
khatru.nostrver.se,51.3700,6.1681
|
||||
wot.codingarena.top,50.4779,12.3713
|
||||
internationalright-wing.org,-22.5986,-48.8003
|
||||
relay.stream.labs.h3.se,59.3294,18.0687
|
||||
nostr-2.21crypto.ch,46.5160,6.6328
|
||||
relay.puresignal.news,37.7621,-122.3971
|
||||
solo.itsalldance.space,32.7244,-96.6755
|
||||
slick.mjex.me,39.0437,-77.4875
|
||||
pyramid.fiatjaf.com,50.1155,8.6842
|
||||
portal-relay.pareto.space,49.4453,11.0222
|
||||
relay.hasenpfeffr.com,39.0437,-77.4875
|
||||
relay.degmods.com,50.4779,12.3713
|
||||
strfry.bonsai.com,37.8716,-122.2728
|
||||
relay.wavlake.com,41.2619,-95.8608
|
||||
orangesync.tech,50.9333,6.9500
|
||||
nostr.smut.cloud,37.7621,-122.3971
|
||||
inbox.mycelium.social,38.6273,-90.1979
|
||||
nostr.satstralia.com,64.1355,-21.8954
|
||||
nostr-relay.psfoundation.info,39.0437,-77.4875
|
||||
nostr.rtvslawenia.com,49.4542,11.0775
|
||||
nostr.lojong.info,37.7621,-122.3971
|
||||
nostr.plantroon.com,50.1025,8.6299
|
||||
relay.toastr.net,40.8043,-74.0121
|
||||
relay.nostrhub.tech,49.4453,11.0222
|
||||
relay.nostromo.social,49.4542,11.0775
|
||||
yabu.me,35.6090,139.7302
|
||||
n.ok0.org,-36.8485,174.7635
|
||||
wot.brightbolt.net,47.6928,-116.7850
|
||||
relay.javi.space,43.4628,11.8807
|
||||
vitor.nostr1.com,40.7143,-74.0060
|
||||
relay.notoshi.win,13.3622,100.9835
|
||||
relay.coinos.io,37.7621,-122.3971
|
||||
wot.nostr.net,37.7621,-122.3971
|
||||
nostr.night7.space,50.4779,12.3713
|
||||
nostr.azzamo.net,52.2284,21.0522
|
||||
nostrelay.memory-art.xyz,37.7621,-122.3971
|
||||
relay.13room.space,37.7621,-122.3971
|
||||
relay.agorist.space,52.3740,4.8897
|
||||
relay.artiostr.ch,37.7621,-122.3971
|
||||
relay.letsfo.com,52.2298,21.0118
|
||||
relay.mwaters.net,50.9519,1.8563
|
||||
nostr.makibisskey.work,37.7621,-122.3971
|
||||
theoutpost.life,64.1355,-21.8954
|
||||
nostr.mom,50.4779,12.3713
|
||||
santo.iguanatech.net,40.8344,-74.1377
|
||||
nostr-03.dorafactory.org,1.2897,103.8501
|
||||
nostr.data.haus,50.4779,12.3713
|
||||
nostr.2b9t.xyz,34.0522,-118.2437
|
||||
relay.endfiat.money,37.7621,-122.3971
|
||||
srtrelay.c-stellar.net,37.7621,-122.3971
|
||||
relay.electriclifestyle.com,26.1223,-80.1434
|
||||
nostr-01.yakihonne.com,1.3215,103.6957
|
||||
nostr.hekster.org,37.3924,-121.9623
|
||||
relay.magiccity.live,25.8130,-80.2320
|
||||
relay.orangepill.ovh,49.0127,1.9694
|
||||
relay5.bitransfer.org,37.7621,-122.3971
|
||||
nostr.4rs.nl,49.4453,11.0222
|
||||
tollbooth.stens.dev,51.4566,7.0123
|
||||
wot.soundhsa.com,39.0997,-94.5786
|
||||
relay.nostr.vet,52.5273,5.7228
|
||||
relay.davidebtc.me,50.1155,8.6842
|
||||
nostr.chaima.info,50.1155,8.6842
|
||||
wot.sebastix.social,51.3700,6.1681
|
||||
relay.angor.io,50.1155,8.6842
|
||||
nostr.notribe.net,40.8344,-74.1377
|
||||
purpura.cloud,37.7621,-122.3971
|
||||
wot.geektank.ai,17.1210,-61.8433
|
||||
|
||||
|
+618
-623
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user