diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-21 16:05:02 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-21 16:05:02 +0000 |
| commit | 22c9ccd8f17815c960e797a545ab3cb1385ffcf8 (patch) | |
| tree | 7a166bc829223763906848a6108c783f216d0a88 /src | |
| parent | 68cca2e28a5edc9b8da72f483980818e4a13fb52 (diff) | |
fix: use hex format for pubkey in NIP-11 document
The NIP-11 specification requires the pubkey field to be a 64-character
hex string, but we were incorrectly using npub (bech32) format.
Changes:
- Add Config::relay_owner_pubkey_hex() method to get hex format
- Update NIP-11 document to use hex format instead of npub
- Update test to verify 64-char hex string instead of npub format
Fixes nak relay command error:
'must be a hex string of 64 characters'
Diffstat (limited to 'src')
| -rw-r--r-- | src/config.rs | 8 | ||||
| -rw-r--r-- | src/http/nip11.rs | 7 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/config.rs b/src/config.rs index 4b1e8d9..271a340 100644 --- a/src/config.rs +++ b/src/config.rs | |||
| @@ -574,7 +574,13 @@ impl Config { | |||
| 574 | Keys::parse(nsec).context("Invalid relay_owner_nsec") | 574 | Keys::parse(nsec).context("Invalid relay_owner_nsec") |
| 575 | } | 575 | } |
| 576 | 576 | ||
| 577 | /// Get the relay owner's public key (npub format) for NIP-11 | 577 | /// Get the relay owner's public key (hex format) for NIP-11 |
| 578 | pub fn relay_owner_pubkey_hex(&self) -> Result<String> { | ||
| 579 | let keys = self.relay_owner_keys()?; | ||
| 580 | Ok(keys.public_key().to_hex()) | ||
| 581 | } | ||
| 582 | |||
| 583 | /// Get the relay owner's public key (npub format) | ||
| 578 | pub fn relay_owner_npub(&self) -> Result<String> { | 584 | pub fn relay_owner_npub(&self) -> Result<String> { |
| 579 | let keys = self.relay_owner_keys()?; | 585 | let keys = self.relay_owner_keys()?; |
| 580 | Ok(keys.public_key().to_bech32()?) | 586 | Ok(keys.public_key().to_bech32()?) |
diff --git a/src/http/nip11.rs b/src/http/nip11.rs index 7c58175..f7af3c2 100644 --- a/src/http/nip11.rs +++ b/src/http/nip11.rs | |||
| @@ -100,7 +100,7 @@ impl RelayInformationDocument { | |||
| 100 | Self { | 100 | Self { |
| 101 | name: config.relay_name(), | 101 | name: config.relay_name(), |
| 102 | description: config.relay_description.clone(), | 102 | description: config.relay_description.clone(), |
| 103 | pubkey: config.relay_owner_npub().ok(), | 103 | pubkey: config.relay_owner_pubkey_hex().ok(), |
| 104 | contact: None, // Could be added to config if needed | 104 | contact: None, // Could be added to config if needed |
| 105 | supported_nips: vec![ | 105 | supported_nips: vec![ |
| 106 | 1, // NIP-01: Basic protocol flow | 106 | 1, // NIP-01: Basic protocol flow |
| @@ -145,10 +145,11 @@ mod tests { | |||
| 145 | assert_eq!(doc.name, "Test Relay"); | 145 | assert_eq!(doc.name, "Test Relay"); |
| 146 | assert_eq!(doc.description, "A test relay"); | 146 | assert_eq!(doc.description, "A test relay"); |
| 147 | 147 | ||
| 148 | // Verify pubkey is present and is a valid npub | 148 | // Verify pubkey is present and is a valid hex string (64 chars) |
| 149 | assert!(doc.pubkey.is_some()); | 149 | assert!(doc.pubkey.is_some()); |
| 150 | let pubkey = doc.pubkey.unwrap(); | 150 | let pubkey = doc.pubkey.unwrap(); |
| 151 | assert!(pubkey.starts_with("npub1")); | 151 | assert_eq!(pubkey.len(), 64); |
| 152 | assert!(pubkey.chars().all(|c| c.is_ascii_hexdigit())); | ||
| 152 | 153 | ||
| 153 | assert!(doc.supported_nips.contains(&1)); | 154 | assert!(doc.supported_nips.contains(&1)); |
| 154 | assert!(doc.supported_nips.contains(&11)); | 155 | assert!(doc.supported_nips.contains(&11)); |