// Copyright (c) 2026 Bitflash developers // Distributed under the MIT/X11 software license. // // Peer discovery over Nostr relays -- replaces the old ThreadIRCSeed. Each // node publishes a replaceable event (NIP-78, kind 30078) containing its // "ip:port", signed with Schnorr/secp256k1 (BIP340, the same scheme used by // Nostr), and subscribes to receive the announcements of other nodes, feeding // them into the Bitflash address manager. #ifndef BITFLASH_NOSTR_H #define BITFLASH_NOSTR_H #include #include // Thread entry point (signature compatible with _beginthread) void ThreadNostrSeed(void* parg); // Public relays used for discovery. Tunable. extern const char* pszNostrRelays[]; extern const int nNostrRelays; // Rendezvous meeting relays ("host:port") this node can register its .btf // service at. It registers at the first reachable one and advertises that in // its descriptor; if the relay dies it fails over to another, so attacking a // single relay's IP can't take the network down. Overridable with /rvrelay. extern std::vector vBtfMeetingRelays; // The relay this node is currently registered at (set by ThreadBtfAccept). extern std::string strBtfActiveRelay; // The active relay, or the first seed if none active yet ("" if the list is empty). std::string BtfActiveRelay(); // Record the relay this node just registered its service at (thread-safe). void BtfSetActiveRelay(const std::string& relay); // If set (via /announcerelay=host:port), this node announces that relay on // Nostr so other nodes discover it automatically -- no manual seed-list edit. extern std::string strBtfAnnounceRelay; // Every relay to try: curated seeds + relays discovered from Nostr announcements. std::vector BtfAllRelays(); // Copy this node's .btf identity (lazily loading or generating it): the x-only // pubkey (= the .btf address) and the x25519 secret for the end-to-end channel. bool BtfGetIdentity(unsigned char pubkey[32], unsigned char enc_sk[32]); // This node's printable .btf address, or "" if the identity failed to load. std::string BtfLocalAddress(); // Resolve a .btf address via the public discovery relays: fetch the owner's // self-certified descriptor and return its meeting node ("host:port") and // x25519 public key for the end-to-end channel. bool BtfResolve(const std::string& btfAddr, std::string& meetingHostPort, unsigned char enc_pub[32]); #endif