From 07f6c352e87ebc2f37c2b755adcf17b9e15164b6 Mon Sep 17 00:00:00 2001 From: mstrofnone Date: Sun, 3 May 2026 17:37:10 +1000 Subject: [PATCH] feat(electrumx): add bare IP peer for relay.testls.bit (23.158.233.10) Adds the underlying IP literal as a separate ElectrumX entry in both the clearnet default list and the Tor list, mirroring how 46.229.238.187:57002 sits beside nmc2.bitcoins.sk:57002. Why a bare IP entry alongside a hostname entry? - Robustness against unhealthy ICANN DNS paths. The relay.testls.bit name resolves through Namecoin (.bit), which most resolvers ship via a NIP-05 lookup against ElectrumX itself \u2014 chicken-and-egg if the only listed servers ARE .bit-resolved. A bare IP gives the resolver pool a completely-DNS-free anchor. - Same physical box, same self-signed cert, same SHA-256 (DER) pin (bb0b35e6\u20266cba) added in the prior commit, so no new cert pin is needed. The .onion entry added in the prior commit already serves as the DNS-free Tor anchor; this commit handles the equivalent for clearnet. Verified end-to-end: node tls direct connect 23.158.233.10:50002 (no SNI) -> server.version reply ElectrumX 1.16.0; cert SHA-256 matches the pinned hash exactly. --- .../quartz/nip05DnsIdentifiers/namecoin/ElectrumXServer.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/namecoin/ElectrumXServer.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/namecoin/ElectrumXServer.kt index 78416ff98..d98c77ac7 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/namecoin/ElectrumXServer.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/namecoin/ElectrumXServer.kt @@ -105,6 +105,11 @@ val DEFAULT_ELECTRUMX_SERVERS = // Also exposed as wss://relay.testls.bit/electrumx (browser-viable, future // WS transport — see N1 §"Browser / WebSocket transport" in mstrofnone/nips). ElectrumxServer("relay.testls.bit", 50002, useSsl = true, usePinnedTrustStore = true), + // Bare IP peer of relay.testls.bit — same operator, same cert, same box. + // Listed as a separate entry (mirrors how 46.229.238.187 sits beside + // nmc2.bitcoins.sk) so resolvers that have an unhealthy DNS path can + // still reach the server. Cert pin works by SHA-256 of DER, no SNI required. + ElectrumxServer("23.158.233.10", 50002, useSsl = true, usePinnedTrustStore = true), ) /** Tor-preferred server list: onion primary, clearnet fallback. */ @@ -128,4 +133,6 @@ val TOR_ELECTRUMX_SERVERS = ElectrumxServer("electrumx.testls.space", 50002, useSsl = true, usePinnedTrustStore = true), ElectrumxServer("nmc2.bitcoins.sk", 57002, useSsl = true, usePinnedTrustStore = true), ElectrumxServer("relay.testls.bit", 50002, useSsl = true, usePinnedTrustStore = true), + // Bare IP peer (same operator/cert/box). See clearnet list above. + ElectrumxServer("23.158.233.10", 50002, useSsl = true, usePinnedTrustStore = true), )