From 02847e6a3bf60a1b219c3dbb8b4ce41905b07b8c Mon Sep 17 00:00:00 2001 From: Dylan Jeffers Date: Tue, 11 Aug 2026 18:35:45 -0700 Subject: [PATCH 1/2] fix(api): mark audius.zeogrid.com dead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refusing connections since at least 2026-08-11 (`curl: (7) Failed to connect ... port 443`) while still registered on chain as validator Id 99, so rendezvous kept ranking it — it came back as the primary host on 9 of 25 sampled requests for one artist's cover photo, and ~8% of sampled trending artists have it in their host set. Nothing is broken by this: useImageSize walks artwork.mirrors on a failed preload, and StoreAllNodes is always appended to the candidate set, so clients recover transparently. This just stops those image loads from spending a failed request on a dead host first. Co-Authored-By: Claude Opus 5 --- config/config.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/config.go b/config/config.go index ed1a8439..ec67998d 100644 --- a/config/config.go +++ b/config/config.go @@ -242,6 +242,12 @@ func init() { Cfg.ArchiverNodes = []string{"https://archiver.audius.engineering"} Cfg.DeadNodes = []string{ "https://content.grassfed.network", + // Refusing connections since at least 2026-08-11 while still + // registered on chain as validator Id 99, so rendezvous kept + // ranking it. Clients recover via mirrors, so nothing breaks — + // this just stops ~8% of artists' image loads from spending a + // failed request on it first. + "https://audius.zeogrid.com", } Cfg.BlacklistedNodes = []string{ "https://audius-discovery-2.cultur3stake.com", From 23c0c68d98f127974c7466e293d7a04c2711db9e Mon Sep 17 00:00:00 2001 From: Dylan Jeffers Date: Tue, 11 Aug 2026 18:48:59 -0700 Subject: [PATCH 2/2] fix(api): mark the other four dead content hosts too Diffing the eth registry (76) against core's non-jailed validator set (70) turns up six nodes core has already concluded are gone. All six fail to serve content: content.grassfed.network connection refused (already listed) audius.zeogrid.com connection refused cn0.mainnet.audiusindex.org 521 on health + content cn3.mainnet.audiusindex.org 521 on health + content cn4.mainnet.audiusindex.org 521 on health + content audius-nodes.com health_check 200, 502 on every content CID That last one is the interesting case: it passes a health check while serving nothing, so the active-probing approach in #1016 would have waved it through. Core's jailed flag caught it. Co-Authored-By: Claude Opus 5 --- config/config.go | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/config/config.go b/config/config.go index ec67998d..fa7cd74b 100644 --- a/config/config.go +++ b/config/config.go @@ -240,14 +240,28 @@ func init() { } Cfg.AntiAbuseOracles = []string{"https://anti-abuse-oracle.audius.engineering"} Cfg.ArchiverNodes = []string{"https://archiver.audius.engineering"} + // Registered on chain but not serving content. Rendezvous ranks by + // eth registration, which says a node is entitled to serve — not + // that it does — so these keep getting handed out as image hosts. + // Clients recover via artwork.mirrors and StoreAllNodes, so nothing + // breaks; this just stops those loads from burning a request on a + // host that can't answer. + // + // Every entry below is also absent from core's non-jailed validator + // set (`/core/nodes`), which is the same conclusion the network has + // already reached on its own. See the discussion on #1017 — that + // list is the durable fix; this one is the stopgap. + // + // Verified 2026-08-11: Cfg.DeadNodes = []string{ - "https://content.grassfed.network", - // Refusing connections since at least 2026-08-11 while still - // registered on chain as validator Id 99, so rendezvous kept - // ranking it. Clients recover via mirrors, so nothing breaks — - // this just stops ~8% of artists' image loads from spending a - // failed request on it first. - "https://audius.zeogrid.com", + "https://content.grassfed.network", // connection refused + "https://audius.zeogrid.com", // connection refused + "https://cn0.mainnet.audiusindex.org", // 521 on health + content + "https://cn3.mainnet.audiusindex.org", // 521 on health + content + "https://cn4.mainnet.audiusindex.org", // 521 on health + content + // health_check 200 but 502 on every content CID tried — the case + // a naive health probe would wave through. + "https://audius-nodes.com", } Cfg.BlacklistedNodes = []string{ "https://audius-discovery-2.cultur3stake.com",