1
0
forked from GRIN/grim

chore(relays): drop retiring relay.goblin.st from the pinned pool

relay.goblin.st + nrelay.us-ea.st retire 2026-07-04 04:44 UTC. The live
gist pool already dropped relay.goblin.st; this removes it from the
compiled-in PINNED_POOL fallback so first-run/offline no longer ships a
dead relay. relay.floonet.dev remains THE primary dm+discovery+exit
(money-path) relay.

- pool.rs: remove the relay.goblin.st entry (12 relays now) and repoint
  the pinned-pool tests onto relay.floonet.dev (counts 13->12, dm 11->10,
  discovery 4->3; the dm-membership and exit assertions). Synthetic
  parsing-logic fixtures that name relay.goblin.st are left untouched.
- wallet/e2e.rs: refresh the money-path E2E harness doc comment onto
  relay.floonet.dev (the RELAY_A/RELAY_B consts already point there) so
  the ignored on-chain test documents a live relay after retirement.

Validated: cargo test --lib pool (5 passed), cargo build ok.
This commit is contained in:
2ro
2026-07-03 03:44:03 -04:00
parent 138785cf67
commit 4d1db9cb28
2 changed files with 17 additions and 18 deletions
+6 -8
View File
@@ -67,7 +67,6 @@ const PINNED_POOL: &str = r#"{
"min_message_length": 131072, "min_message_length": 131072,
"relays": [ "relays": [
{ "url": "wss://relay.floonet.dev", "roles": ["dm", "discovery"], "vetted": "2026-07-02", "exit": "EqbUPt7aYkar2CTmjBVnyWaKzb2WT8NdojUGXU4mrfNG.AF5YCD8hgEUqByamrPqZz72h7GE599LbqQrhaew9bBip@HfyUPUv4z8uMQoZYuZGMWf6oe2vaKBVPrfgHk6WvwFPe" }, { "url": "wss://relay.floonet.dev", "roles": ["dm", "discovery"], "vetted": "2026-07-02", "exit": "EqbUPt7aYkar2CTmjBVnyWaKzb2WT8NdojUGXU4mrfNG.AF5YCD8hgEUqByamrPqZz72h7GE599LbqQrhaew9bBip@HfyUPUv4z8uMQoZYuZGMWf6oe2vaKBVPrfgHk6WvwFPe" },
{ "url": "wss://relay.goblin.st", "roles": ["dm", "discovery"], "vetted": "2026-07-01", "exit": "4XPnpmFdieZBY1BM2jU9Qn915v5RGz58ywpgQhuFKBao.8NMrW1i4VaPhY6qhV7supid7P1YcWJ9mGZBKjGEuqN9U@B8bX5x5yKa7oQMCNioLS9seYwNCio3U9jYPxgCZoKjk5" },
{ "url": "wss://relay.primal.net", "roles": ["dm"], "vetted": "2026-07-01" }, { "url": "wss://relay.primal.net", "roles": ["dm"], "vetted": "2026-07-01" },
{ "url": "wss://relay.damus.io", "roles": ["dm"], "vetted": "2026-07-01" }, { "url": "wss://relay.damus.io", "roles": ["dm"], "vetted": "2026-07-01" },
{ "url": "wss://nos.lol", "roles": ["dm"], "vetted": "2026-07-01" }, { "url": "wss://nos.lol", "roles": ["dm"], "vetted": "2026-07-01" },
@@ -381,16 +380,15 @@ mod tests {
let pool = RelayPool::parse(PINNED_POOL).expect("pinned pool must parse"); let pool = RelayPool::parse(PINNED_POOL).expect("pinned pool must parse");
assert_eq!(pool.version, 1); assert_eq!(pool.version, 1);
assert_eq!(pool.min_message_length, MIN_MESSAGE_LENGTH); assert_eq!(pool.min_message_length, MIN_MESSAGE_LENGTH);
assert_eq!(pool.relays.len(), 13); assert_eq!(pool.relays.len(), 12);
let dm = pool.dm_relays(); let dm = pool.dm_relays();
assert_eq!(dm.len(), 11); assert_eq!(dm.len(), 10);
assert!(dm.iter().any(|r| r.url == "wss://relay.floonet.dev")); assert!(dm.iter().any(|r| r.url == "wss://relay.floonet.dev"));
assert!(dm.iter().any(|r| r.url == "wss://relay.goblin.st"));
assert!(dm.iter().all(|r| r.vetted.is_some())); assert!(dm.iter().all(|r| r.vetted.is_some()));
let disc = pool.discovery_relays(); let disc = pool.discovery_relays();
// relay.floonet.dev + relay.goblin.st carry both roles; the two indexers // relay.floonet.dev carries both roles; the two indexers
// are discovery-only. // are discovery-only.
assert_eq!(disc.len(), 4); assert_eq!(disc.len(), 3);
assert!(disc.contains(&"wss://purplepag.es".to_string())); assert!(disc.contains(&"wss://purplepag.es".to_string()));
assert!(disc.contains(&"wss://indexer.coracle.social".to_string())); assert!(disc.contains(&"wss://indexer.coracle.social".to_string()));
} }
@@ -398,11 +396,11 @@ mod tests {
#[test] #[test]
fn exit_field_is_optional_and_looked_up_by_url() { fn exit_field_is_optional_and_looked_up_by_url() {
// The pinned pool advertises the money-path relay's co-located scoped // The pinned pool advertises the money-path relay's co-located scoped
// exit (the .8 floonet-mixexit) so it bootstraps OFFLINE, before any // exit (the .AF floonet-mixexit) so it bootstraps OFFLINE, before any
// network; every other relay is exit-less (reached over the tunnel). // network; every other relay is exit-less (reached over the tunnel).
let pinned = RelayPool::parse(PINNED_POOL).unwrap(); let pinned = RelayPool::parse(PINNED_POOL).unwrap();
assert!(pinned.has_exit()); assert!(pinned.has_exit());
assert!(pinned.exit_for("wss://relay.goblin.st").is_some()); assert!(pinned.exit_for("wss://relay.floonet.dev").is_some());
assert!(pinned.exit_for("wss://nos.lol").is_none()); assert!(pinned.exit_for("wss://nos.lol").is_none());
// A pool that DOES advertise an exit for one relay. // A pool that DOES advertise an exit for one relay.
+11 -10
View File
@@ -12,16 +12,17 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
//! LIVE two-wallet end-to-end payment over the Floonet path — CROSS-RELAY and //! LIVE two-wallet end-to-end payment over the Floonet path — over the shared
//! CROSS-NODE. Two real Goblin wallets restored from mainnet mnemonics (seeds //! exit-backed primary relay, CROSS-NODE. Two real Goblin wallets restored from
//! via env, NEVER a file) run on DIFFERENT relays (A on `wss://relay.goblin.st`, //! mainnet mnemonics (seeds via env, NEVER a file) both run on the shipped
//! B on `wss://nrelay.us-ea.st`, each pinned via its own `nostr.toml`) and //! default relay (`wss://relay.floonet.dev`, each pinned via its own
//! DIFFERENT Grin nodes (A on grincoin.org, B on main.gri.mw). One sends a real //! `nostr.toml`) but on DIFFERENT Grin nodes (A on grincoin.org, B on
//! gift-wrapped Grin payment to the other, asynchronously through the relays. //! main.gri.mw). One sends a real gift-wrapped Grin payment to the other,
//! Proves the whole money path a phone would use, plus the outbox model: the //! asynchronously through the relay. Proves the whole money path a phone would
//! sender publishes the wrap to the RECIPIENT's advertised (kind 10050) relay, //! use, plus the outbox model: the sender publishes the wrap to the RECIPIENT's
//! not its own, and settlement posts through two independent nodes. //! advertised (kind 10050) relay, and settlement posts through two independent
//! mixnet -> exit -> cross-relay gift wrap -> S2 -> finalize -> post. //! nodes.
//! mixnet -> exit -> gift wrap -> S2 -> finalize -> post.
//! //!
//! Ignored by default (real mainnet funds + a full recovery scan). Run: //! Ignored by default (real mainnet funds + a full recovery scan). Run:
//! GOBLIN_E2E_SEED_A="word ..." GOBLIN_E2E_SEED_B="word ..." \ //! GOBLIN_E2E_SEED_A="word ..." GOBLIN_E2E_SEED_B="word ..." \