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:
+6
-8
@@ -67,7 +67,6 @@ const PINNED_POOL: &str = r#"{
|
||||
"min_message_length": 131072,
|
||||
"relays": [
|
||||
{ "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.damus.io", "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");
|
||||
assert_eq!(pool.version, 1);
|
||||
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();
|
||||
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.goblin.st"));
|
||||
assert!(dm.iter().all(|r| r.vetted.is_some()));
|
||||
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.
|
||||
assert_eq!(disc.len(), 4);
|
||||
assert_eq!(disc.len(), 3);
|
||||
assert!(disc.contains(&"wss://purplepag.es".to_string()));
|
||||
assert!(disc.contains(&"wss://indexer.coracle.social".to_string()));
|
||||
}
|
||||
@@ -398,11 +396,11 @@ mod tests {
|
||||
#[test]
|
||||
fn exit_field_is_optional_and_looked_up_by_url() {
|
||||
// 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).
|
||||
let pinned = RelayPool::parse(PINNED_POOL).unwrap();
|
||||
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());
|
||||
|
||||
// A pool that DOES advertise an exit for one relay.
|
||||
|
||||
+11
-10
@@ -12,16 +12,17 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//! LIVE two-wallet end-to-end payment over the Floonet path — CROSS-RELAY and
|
||||
//! CROSS-NODE. Two real Goblin wallets restored from mainnet mnemonics (seeds
|
||||
//! via env, NEVER a file) run on DIFFERENT relays (A on `wss://relay.goblin.st`,
|
||||
//! B on `wss://nrelay.us-ea.st`, each pinned via its own `nostr.toml`) and
|
||||
//! DIFFERENT Grin nodes (A on grincoin.org, B on main.gri.mw). One sends a real
|
||||
//! gift-wrapped Grin payment to the other, asynchronously through the relays.
|
||||
//! Proves the whole money path a phone would use, plus the outbox model: the
|
||||
//! sender publishes the wrap to the RECIPIENT's advertised (kind 10050) relay,
|
||||
//! not its own, and settlement posts through two independent nodes.
|
||||
//! mixnet -> exit -> cross-relay gift wrap -> S2 -> finalize -> post.
|
||||
//! LIVE two-wallet end-to-end payment over the Floonet path — over the shared
|
||||
//! exit-backed primary relay, CROSS-NODE. Two real Goblin wallets restored from
|
||||
//! mainnet mnemonics (seeds via env, NEVER a file) both run on the shipped
|
||||
//! default relay (`wss://relay.floonet.dev`, each pinned via its own
|
||||
//! `nostr.toml`) but on DIFFERENT Grin nodes (A on grincoin.org, B on
|
||||
//! main.gri.mw). One sends a real gift-wrapped Grin payment to the other,
|
||||
//! asynchronously through the relay. Proves the whole money path a phone would
|
||||
//! use, plus the outbox model: the sender publishes the wrap to the RECIPIENT's
|
||||
//! advertised (kind 10050) relay, and settlement posts through two independent
|
||||
//! nodes.
|
||||
//! mixnet -> exit -> gift wrap -> S2 -> finalize -> post.
|
||||
//!
|
||||
//! Ignored by default (real mainnet funds + a full recovery scan). Run:
|
||||
//! GOBLIN_E2E_SEED_A="word ..." GOBLIN_E2E_SEED_B="word ..." \
|
||||
|
||||
Reference in New Issue
Block a user