diff --git a/nostr_relay_discovery.py b/nostr_relay_discovery.py index 42ef5cf..371f49e 100644 --- a/nostr_relay_discovery.py +++ b/nostr_relay_discovery.py @@ -197,8 +197,8 @@ class NostrRelayDiscovery: logger.debug(f"Failed to connect to {relay_url}: {e}") return False - async def fetch_follow_lists(self, relay_url: str) -> List[Dict]: - """Fetch kind 3 events (follow lists) from a relay""" + 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 = [] try: @@ -210,9 +210,9 @@ class NostrRelayDiscovery: close_timeout=5, max_size=2**20 ) as websocket: - # Request follow lists (kind 3 events) + filter_req = { - "kinds": [3], + "kinds": [3, 10002], "limit": 300, } @@ -224,7 +224,7 @@ class NostrRelayDiscovery: # Collect events until EOSE start_time = time.time() - timeout_duration = 30.0 # 30 second timeout + timeout_duration = 30.0 while time.time() - start_time < timeout_duration: try: @@ -233,7 +233,7 @@ class NostrRelayDiscovery: if data[0] == "EVENT" and data[1] == subscription_id: event = data[2] - if event.get("kind") == 3: + if event.get("kind") == 3 or event.get("kind") == 10002: follow_events.append(event) logger.debug(f"Collected follow event from {event.get('pubkey', 'unknown')[:8]}...") @@ -256,6 +256,7 @@ class NostrRelayDiscovery: logger.info(f"Collected {len(follow_events)} follow events from {relay_url}") return follow_events + def extract_relays_from_events(self, events: List[Dict]) -> Set[str]: """Extract relay URLs from follow list events""" @@ -357,11 +358,11 @@ class NostrRelayDiscovery: if depth < self.max_depth: try: # Fetch follow lists from this relay - follow_events = await self.fetch_follow_lists(current_relay) + events = await self.fetch_events(current_relay) - if follow_events: + if events: # Extract new relays from follow lists - new_relays = self.extract_relays_from_events(follow_events) + new_relays = self.extract_relays_from_events(events) # Add new relays to visit queue for next depth level for relay_url in new_relays: diff --git a/relay_discovery_results.json b/relay_discovery_results.json index 88589fc..bc16361 100644 --- a/relay_discovery_results.json +++ b/relay_discovery_results.json @@ -20,237 +20,302 @@ "discovery_duration": 1692.4695873260498 }, "functioning_relays": [ - "wss://relay.mostro.network", - "wss://fanfares.nostr1.com", - "wss://relay.weloveit.info", - "wss://fiatjaf.nostr1.com", - "wss://relay.nostr.vet", - "wss://relay.usefusion.ai", - "wss://nostr.pareto.space", - "wss://relay.gasteazi.net", - "wss://articles.layer3.news", - "wss://premium.primal.net", - "wss://soloco.nl", - "wss://haven.slidestr.net", - "wss://relay.chakany.systems", - "wss://primus.nostr1.com", - "wss://aegis.relayted.de", - "wss://srtrelay.c-stellar.net", - "wss://relay.coinos.io", - "wss://noxir.kpherox.dev", - "wss://nostr.4rs.nl", - "wss://nostr.liberty.fans", - "wss://wot.nostr.sats4.life", - "wss://nostr.thank.eu", - "wss://adre.su", - "wss://at.nostrworks.com", - "wss://nostr.1sat.org", - "wss://carlos-cdb.top", - "wss://relay.exit.pub", - "wss://nostr.sovbit.host", - "wss://relay.nostrplebs.com", - "wss://strfry.openhoofd.nl", - "wss://vitor.nostr1.com", - "wss://nostr-1.nbo.angani.co", - "wss://relay.bullishbounty.com", - "wss://wot.brightbolt.net", - "wss://nostr.notribe.net", - "wss://vault.iris.to", - "wss://chronicle.dtonon.com", - "wss://nostr-verified.wellorder.net", - "wss://btc.klendazu.com", - "wss://relay.ziomc.com", - "wss://slick.mjex.me", - "wss://nfrelay.app", - "wss://nostr.data.haus", - "wss://zap.watch", - "wss://relay.dergigi.com", - "wss://hbr.coracle.social", - "wss://relay.jthecodemonkey.xyz", - "wss://nostr-relay.bitcoin.ninja", - "wss://nostr.zbd.gg", - "wss://news.utxo.one", - "wss://relay.olas.app", - "wss://nproxy.kristapsk.lv", - "wss://nostr.huszonegy.world", - "wss://nostr.256k1.dev", - "wss://relay.nostr.wirednet.jp", - "wss://bitcoiner.social", - "wss://relay.mostr.pub", - "wss://nostr.app.runonflux.io", - "wss://knostr.neutrine.com", - "wss://nostr.reckless.dev", - "wss://relay.nostr.net", - "wss://nostr.sebastix.dev", - "wss://directory.yabu.me", - "wss://relay.livefreebtc.dev", - "wss://paid.no.str.cr", - "wss://n.ok0.org", - "wss://relay.snort.social", - "wss://user.kindpag.es", - "wss://nostr.cloud.vinney.xyz", - "wss://nostrelites.org", - "wss://satsage.xyz", - "wss://nostr-02.yakihonne.com", - "wss://relay.lumina.rocks", - "wss://nostr.pjv.me", - "wss://nostrja-kari.heguro.com", - "wss://jellyfish.land", - "wss://haven.ciori.net", - "wss://relay.nostrcheck.me", - "wss://bitcoinmaximalists.online", - "wss://relay.drss.io", - "wss://relay.lexingtonbitcoin.org", - "wss://relay.hodl.ar", - "wss://frjosh.nostr1.com", - "wss://relay.nostr.band", - "wss://hist.nostr.land", - "wss://relay.barine.co", - "wss://nostr.hashbang.nl", - "wss://wot.danieldaquino.me", - "wss://inbox.azzamo.net", - "wss://nostr.xmr.rocks", - "wss://pyramid.fiatjaf.com", - "wss://noornode.nostr1.com", - "wss://haven.calva.dev", - "wss://nostr.malin.onl", - "wss://relay.patrickulrich.com", - "wss://relay.vanderwarker.family", - "wss://yestr.me", - "wss://orangesync.tech", - "wss://nostr.d11n.net", - "wss://relay.orangepill.ovh", - "wss://thecitadel.nostr1.com", - "wss://paid.nostrified.org", - "wss://nostr21.com", - "wss://relay.minds.com", - "wss://relay.theuncounted.site", - "wss://relay.g1sms.fr", - "wss://us.nostr.wine", - "wss://wons.calva.dev", - "wss://relay.jeffg.fyi", - "wss://purplepag.es", - "wss://140.f7z.io", - "wss://nostr.hifish.org", - "wss://support.nostr1.com", - "wss://relay.nostromo.social", - "wss://relay.westernbtc.com", - "wss://nostr.bitcoiner.social", - "wss://f7z.io", - "wss://kitchen.zap.cooking", - "wss://no.str.cr", - "wss://nostr.bitpunk.fm", - "wss://relay.nosflare.com", - "wss://nostr.vulpem.com", - "wss://asia.azzamo.net", - "wss://nostr.kungfu-g.rip", - "wss://nostr-relay.derekross.me", - "wss://nostr.jerrynya.fun", - "wss://offchain.pub", - "wss://nostr.einundzwanzig.space", - "wss://nostr.cizmar.net", - "wss://relay.azzamo.net", - "wss://relay.nostrified.org", - "wss://nostr.decentony.com", - "wss://relay.dwadziesciajeden.pl", - "wss://relay.angor.io", - "wss://relay.nostr.com.au", - "wss://christpill.nostr1.com", - "wss://nostr.roundrockbitcoiners.com", - "wss://relay.artx.market", - "wss://relay.pleb.to", - "wss://relay.lawallet.ar", - "wss://relay.nostr.sc", - "wss://nostr-pub.wellorder.net", - "wss://haven.accioly.social", - "wss://relay.wellorder.net", - "wss://relay.nostrr.de", - "wss://xmr.ithurtswhenip.ee", - "wss://mleku.nostr1.com", - "wss://nostr.1f52b.xyz", - "wss://profiles.nostr1.com", - "wss://nostr.massmux.com", - "wss://nostr.stakey.net", - "wss://wot.sebastix.social", - "wss://wot.codingarena.top", - "wss://nostr.chaima.info", - "wss://bots.utxo.one", - "wss://cellar.nostr.wine", - "wss://nostr-dev.wellorder.net", - "wss://nostrelay.circum.space", - "wss://wheat.happytavern.co", - "wss://nostr.mom", - "wss://a.nos.lol", - "wss://nostr.lopp.social", - "wss://relay.noswhere.com", - "wss://relay.primal.net", - "wss://nostr.spicyz.io", - "wss://nostr.bitcoinist.org", - "wss://relay.utxo.one", - "wss://relay.nos.social", - "wss://relay.minibits.cash", - "wss://nos.lol", - "wss://thebarn.nostr1.com", - "wss://relay.guggero.org", - "wss://nostr.yael.at", - "wss://frens.nostr1.com", - "wss://nostr.jcloud.es", - "wss://relay.wavlake.com", - "wss://yabu.me", - "wss://relay.copylaradio.com", - "wss://purplerelay.com", - "wss://wot.sudocarlos.com", - "wss://nostr.azzamo.net", - "wss://nostr.bilthon.dev", - "wss://welcome.nostr.wine", - "wss://unostr.one", - "wss://inbox.relays.land", - "wss://njump.me", - "wss://relay.damus.io", - "wss://zaplab.nostr1.com", - "wss://wot.dtonon.com", - "wss://nostr-01.yakihonne.com", - "wss://wot.nostr.net", - "wss://nostr.plantroon.com", - "wss://cyberspace.nostr1.com", - "wss://bostr.azzamo.net", - "wss://wot.nostr.party", - "wss://relay.nostr.wf", - "wss://relay.nostrdam.com", - "wss://hivetalk.nostr1.com", - "wss://nrelay.c-stellar.net", - "wss://nostr.wine", - "wss://relay.notoshi.win", - "wss://Relay.Damus.io", - "wss://lightningrelay.com", - "wss://relay.bitdevs.tw", - "wss://ithurtswhenip.ee", - "wss://nostr.middling.mydns.jp", - "wss://relay.benthecarman.com", - "wss://theforest.nostr1.com", - "wss://nostr-relay.cbrx.io", - "wss://relay.vertexlab.io", - "wss://nostr.pareto.town", - "wss://nostr.noones.com", - "wss://freelay.sovbit.host", - "wss://relay.reya.su", - "wss://relay.ingwie.me", - "wss://relay.geyser.fund", - "wss://relay.235421.xyz", - "wss://nostr.sathoarder.com", - "wss://nostr.hekster.org", - "wss://relay.nostrhub.fr", - "wss://relay.magiccity.live", - "wss://chadf.nostr1.com", - "wss://xmr.usenostr.org", - "wss://nostr.oxtr.dev", - "wss://pareto.nostr1.com", - "wss://relay.noderunners.network", - "wss://nostrue.com", - "wss://relay.0xchat.com", - "wss://relay.beta.fogtype.com", - "wss://relay.bitcoinpark.com", - "wss://nostr-02.dorafactory.org", - "wss://nostr.0x7e.xyz" - ] + "wss://nostr.mom", + "wss://nos.lol", + "wss://nostr.einundzwanzig.space", + "wss://relay.nostr.band", + "wss://nostr.massmux.com", + "wss://nostr.vulpem.com", + "wss://no.str.cr", + "wss://relay.damus.io", + "wss://relay.dwadziesciajeden.pl", + "wss://nostr.data.haus", + "wss://nostr-relay.schnitzel.world", + "wss://relay.nostromo.social", + "wss://offchain.pub", + "wss://nostrue.com", + "wss://relay.nostr.wirednet.jp", + "wss://nostr.spaceshell.xyz", + "wss://nostr.roundrockbitcoiners.com", + "wss://relay.snort.social", + "wss://relay.nostrcheck.me", + "wss://nproxy.kristapsk.lv", + "wss://nostr.yael.at", + "wss://slick.mjex.me", + "wss://relay.primal.net", + "wss://nostr.oxtr.dev", + "wss://nostr.21crypto.ch", + "wss://nostr.liberty.fans", + "wss://nostr-02.dorafactory.org", + "wss://feeds.nostr.band/nostrhispano", + "wss://relay.hodl.ar", + "wss://nostr.namek.link", + "wss://nostr.middling.mydns.jp", + "wss://nostrja-kari.heguro.com", + "wss://nostr.hifish.org", + "wss://nostr.rikmeijer.nl", + "wss://black.nostrcity.club", + "wss://nostr.hekster.org", + "wss://relay.wavlake.com", + "wss://nostr.sagaciousd.com", + "wss://ithurtswhenip.ee", + "wss://relay2.nostrchat.io", + "wss://relay1.nostrchat.io", + "wss://nostr.overmind.lol", + "wss://nostr.sathoarder.com", + "wss://relay.verified-nostr.com", + "wss://nostr-01.yakihonne.com", + "wss://purplerelay.com", + "wss://relay.orangepill.ovh", + "wss://nostr-relay.psfoundation.info", + "wss://soloco.nl", + "wss://relay.froth.zone", + "wss://nostr.2b9t.xyz", + "wss://nostr.stakey.net", + "wss://pyramid.fiatjaf.com", + "wss://a.nos.lol", + "wss://relay.magiccity.live", + "wss://nostr.notribe.net", + "wss://relay.credenso.cafe", + "wss://nostr.huszonegy.world", + "wss://bucket.coracle.social", + "wss://nostr.kungfu-g.rip", + "wss://gleasonator.dev/relay", + "wss://freelay.sovbit.host", + "wss://relay.artx.market", + "wss://relay.notoshi.win", + "wss://nostr.petrkr.net/strfry", + "wss://multiplexer.huszonegy.world", + "wss://vitor.nostr1.com", + "wss://nostr-02.yakihonne.com", + "wss://nostr-03.dorafactory.org", + "wss://n.ok0.org", + "wss://nostr.0x7e.xyz", + "wss://strfry.openhoofd.nl", + "wss://relay.nostr.net", + "wss://relay.fountain.fm", + "wss://relay.usefusion.ai", + "wss://relay.varke.eu", + "wss://nostr.satstralia.com", + "wss://relay.13room.space", + "wss://nostr.myshosholoza.co.za", + "wss://nostr.carroarmato0.be", + "wss://nostr.dbtc.link", + "wss://ftp.halifax.rwth-aachen.de/nostr", + "wss://orangepiller.org", + "wss://adre.su", + "wss://relay.freeplace.nl", + "wss://relay.sincensura.org", + "wss://bostr.bitcointxoko.com", + "wss://nostr.jfischer.org", + "wss://srtrelay.c-stellar.net", + "wss://nostr.plantroon.com", + "wss://relay.lumina.rocks", + "wss://nostr.tavux.tech", + "wss://rebelbase.social/relay", + "wss://chorus.pjv.me", + "wss://relay.nostrhub.fr", + "wss://relay.agorist.space", + "wss://santo.iguanatech.net", + "wss://relay.cosmicbolt.net", + "wss://relay.tagayasu.xyz", + "wss://relay.zone667.com", + "wss://relay.mostro.network", + "wss://relay5.bitransfer.org", + "wss://relay.illuminodes.com", + "wss://relay.satlantis.io", + "wss://relay2.angor.io", + "wss://relay.satsdays.com", + "wss://relay.angor.io", + "wss://orangesync.tech", + "wss://relay.21e6.cz", + "wss://nostr.chaima.info", + "wss://nostr-relay.cbrx.io", + "wss://relay.minibolt.info", + "wss://relay.digitalezukunft.cyou", + "wss://relay.tapestry.ninja", + "wss://nostr.bilthon.dev", + "wss://nostr.makibisskey.work", + "wss://relay.mattybs.lol", + "wss://noxir.kpherox.dev", + "wss://sendit.nosflare.com", + "wss://relay.coinos.io", + "wss://relay.nostraddress.com", + "wss://wot.nostr.party", + "wss://nostrelites.org", + "wss://relay.nostriot.com", + "wss://prl.plus", + "wss://zap.watch", + "wss://wot.codingarena.top", + "wss://wot.sudocarlos.com", + "wss://nostr.azzamo.net", + "wss://relay.lnfi.network", + "wss://wot.nostr.net", + "wss://relay.nostrdice.com", + "wss://wot.sebastix.social", + "wss://wheat.happytavern.co", + "wss://api.freefrom.space/v1/ws", + "wss://chorus.bonsai.com", + "wss://strfry.bonsai.com", + "wss://relay.sigit.io", + "wss://travis-shears-nostr-relay-v2.fly.dev", + "wss://satsage.xyz", + "wss://relay.degmods.com", + "wss://cobrafuma.com/relay", + "wss://nostr.community.ath.cx", + "wss://nostr.coincrowd.fund", + "wss://strfry.shock.network", + "wss://relay02.lnfi.network", + "wss://nostr-rs-relay.dev.fedibtc.com", + "wss://cyberspace.nostr1.com", + "wss://social.protest.net/relay", + "wss://wot.dtonon.com", + "wss://relay.goodmorningbitcoin.com", + "wss://articles.layer3.news", + "wss://relay.davidebtc.me", + "wss://bostr.syobon.net", + "wss://nostr.agentcampfire.com", + "wss://nostr.me/relay", + "wss://nostr.thebiglake.org", + "wss://henhouse.social/relay", + "wss://schnorr.me", + "wss://nostr.camalolo.com", + "wss://relay.wolfcoil.com", + "wss://nostr.tac.lol", + "wss://dev-relay.lnfi.network", + "wss://relay.bitcoinveneto.org", + "wss://devapi.freefrom.space/v1/ws", + "wss://aaa-api.freefrom.space/v1/ws", + "wss://nostr.red5d.dev", + "wss://relay.allsocial.me", + "wss://relay-testnet.k8s.layer3.news", + "wss://social.proxymana.net", + "wss://promenade.fiatjaf.com", + "wss://nostr-pr03.redscrypt.org", + "wss://inbox.azzamo.net", + "wss://nostrelay.memory-art.xyz", + "wss://pay.thefockinfury.wtf/nostrrelay/1", + "wss://premium.primal.net", + "wss://nostr.lojong.info", + "wss://relay.netstr.io", + "wss://nostr-relay01.redscrypt.org:48443", + "wss://nostr-rs-relay-ishosta.phamthanh.me", + "wss://relay.stream.labs.h3.se", + "wss://tollbooth.stens.dev", + "wss://mls.akdeniz.edu.tr/nostr", + "wss://45.135.180.104", + "wss://relay.chakany.systems", + "wss://relay.mwaters.net", + "wss://kitchen.zap.cooking", + "wss://nostr-relay.shirogaku.xyz", + "wss://relay.arx-ccn.com", + "wss://prod.mosavi.io/v1/ws", + "wss://relay.fr13nd5.com", + "wss://relay.jeffg.fyi", + "wss://nostr.tegila.com.br", + "wss://relay.bullishbounty.com", + "wss://nostr.spicyz.io", + "wss://vidono.apps.slidestr.net", + "wss://relay04.lnfi.network", + "wss://relay03.lnfi.network", + "wss://communities.nos.social", + "wss://relay.evanverma.com", + "wss://nostrelay.circum.space", + "wss://wot.brightbolt.net", + "wss://relayrs.notoshi.win", + "wss://fenrir-s.notoshi.win", + "wss://relay.nsnip.io", + "wss://x.kojira.io", + "wss://jskitty.cat/nostr", + "wss://relay.hasenpfeffr.com", + "wss://nostr.rtvslawenia.com", + "wss://relay01.lnfi.network", + "wss://relay.g1sms.fr", + "wss://nostr.kalf.org", + "wss://nostr.rblb.it", + "wss://nostr.4rs.nl", + "wss://relay.copylaradio.com", + "wss://relay-rpi.edufeed.org", + "wss://nostr.hoppe-relay.it.com", + "wss://relay.ru.ac.th", + "wss://relay.vrtmrz.net", + "wss://playground.nostrcheck.me/relay", + "wss://relay.bitcoinartclock.com", + "wss://relay.etch.social", + "wss://nostr.commonshub.brussels", + "wss://wot.downisontheup.ca", + "wss://nostr.coincards.com", + "wss://relay.mess.ch", + "wss://relay.holzeis.me", + "wss://nostr.thaliyal.com", + "wss://relay-admin.thaliyal.com", + "wss://strfry.felixzieger.de", + "wss://nostr.smut.cloud", + "wss://r.bitcoinhold.net", + "wss://nostr.blankfors.se", + "wss://portal-relay.pareto.space", + "wss://relay.getsafebox.app", + "wss://relay.anzenkodo.workers.dev", + "wss://relay.nostrhub.tech", + "wss://wot.geektank.ai", + "wss://nostr.prl.plus", + "wss://nostr-2.21crypto.ch", + "wss://relayone.geektank.ai", + "wss://nostr.zenon.network", + "wss://nostr-relay.amethyst.name", + "wss://fanfares.nostr1.com", + "wss://relay-dev.satlantis.io", + "wss://inbox.relays.land", + "wss://relay.siamdev.cc", + "wss://wot.soundhsa.com", + "wss://relay.nosto.re", + "wss://nostr.n7ekb.net", + "wss://relayone.soundhsa.com", + "wss://relay.puresignal.news", + "wss://nostr.now", + "wss://relay.nostx.io", + "wss://relay.artiostr.ch", + "wss://relay.oldenburg.cool", + "wss://straycat.brainstorm.social/relay", + "wss://community.soundhsa.com/relay", + "wss://theoutpost.life", + "wss://relay.h3x4.com", + "wss://khatru.nostrver.se", + "wss://relay.wavefunc.live", + "wss://nostr-relay.zimage.com", + "wss://relay.javi.space", + "wss://bostr.shop", + "wss://relay.letsfo.com", + "wss://alien.macneilmediagroup.com", + "wss://rn1.sotiras.org", + "wss://gnostr.com", + "wss://relay.hivetalk.org", + "wss://relay.conduit.market", + "wss://nostr.l484.com", + "wss://relay.chorus.community", + "wss://relay.jmoose.rocks", + "wss://nostr-relay.moe.gift", + "wss://temp.iris.to", + "wss://relay.ngengine.org", + "wss://relay.nostrcal.com", + "wss://nostr.rohoss.com", + "wss://nostr-relay-1.trustlessenterprise.com", + "wss://librerelay.aaroniumii.com", + "wss://relay.barine.co", + "wss://wot.nostr.place", + "wss://nostr.stpaul.net.br:8443", + "wss://relay.utxo.farm", + "wss://solife.me/nostrrelay/1", + "wss://relay.toastr.net", + "wss://nostr.excentered.com", + "wss://relay.mccormick.cx", + "wss://relay.laantungir.net", + "wss://relay.cypherflow.ai", + "wss://nostr.veladan.dev", + "wss://nostr.tadryanom.me", + "wss://ln.rblb.it/nostrrelay/nostr-ads-test-relay", + "wss://nostr-relay.online", + "wss://nostr.night7.space", + "wss://dev-nostr.bityacht.io" +] } \ No newline at end of file