mirror of
https://github.com/nostr-protocol/nips.git
synced 2025-12-08 16:18:50 +00:00
Compare commits
2 Commits
2a33cceff6
...
nips/302
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0dd66f0661 | ||
|
|
3bbbe3ad71 |
59
302.md
Normal file
59
302.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
NIP-302
|
||||||
|
=========
|
||||||
|
|
||||||
|
Relay Pools
|
||||||
|
-----------
|
||||||
|
|
||||||
|
`draft` `optional`
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
This NIP introduces a system for the creation, management, and utilization of relay pools.
|
||||||
|
|
||||||
|
# Specification
|
||||||
|
|
||||||
|
## Creating a Relay Pool
|
||||||
|
|
||||||
|
Users initiate a relay pool by creating a Nostr event with `kind` 30010.
|
||||||
|
- The `content` field is the description of the relay pool.
|
||||||
|
- A `d` tag has the name of the relay pool (e.g. awesome-pool) as value.
|
||||||
|
- At least one `r` tag MUST be present with the third value as `"pool"`. These pool addresses are URLs clients can connect to.
|
||||||
|
- Zero or more `r` tags with third value as `"member"`, empty string, or missing signify a relay pool member.
|
||||||
|
- Zero or more `auth-required` tags with one of the following values: `nip-42` or `nip-98`. Clients wishing to connect to Relay Pools with an `auth-required` tag MUST support at least one of the NIPs before initiating a connection.
|
||||||
|
|
||||||
|
## Updating the Relay Pool
|
||||||
|
|
||||||
|
To update the relay member list of a relay pool, pool addresses, a new event of kind 30010 with the same `d` tag MUST be published.
|
||||||
|
Pool addresses and member relays are added or removed at any time.
|
||||||
|
|
||||||
|
## Joining a Relay Pool
|
||||||
|
|
||||||
|
Relay operators wishing to join a relay pool publish a Relay Pool Join Request event with `kind` 8000:
|
||||||
|
- `p` tag referencing the pubkey of the Relay Pool (event kind 30010).
|
||||||
|
- `a` tag addressing the kind 30010 event.
|
||||||
|
- a single `r` tag with the relay address (e.g., wss://cool-relay.cool-domain.com).
|
||||||
|
|
||||||
|
## Inclusion in the Relay Pool
|
||||||
|
|
||||||
|
Relay Pool Operators MAY include new member relays by updating the Relay Pool event and adding their `r` tag from the kind 8000 event.
|
||||||
|
|
||||||
|
### Leaving a Relay Pool
|
||||||
|
|
||||||
|
Member Relay Operators can request removal from a relay pool by publishing an Event Deletion (kind 5) referencing their Relay Pool Join Request event (kind 8000).
|
||||||
|
Upon receiving a kind 5 event, the Relay Pool Operator SHOULD issue a new event of kind 30010, removing the `r` tag that references the parting relay.
|
||||||
|
|
||||||
|
# Verification
|
||||||
|
|
||||||
|
Relay Pool Operators MAY require further steps as part of the application process (e.g. proof of work (mined event), payment or out-of-channel communication).
|
||||||
|
Relay Pool Operators MAY respond with kind 1 note to Relay Pool Join Requests events by referencing the event kind 8000 and/or tagging the requester's pubkey.
|
||||||
|
A Relay Pool is only successfully joined once a new Relay Pool event is published including the `r` tag from the Relay Pool Join Request.
|
||||||
|
|
||||||
|
# Client Connection
|
||||||
|
|
||||||
|
Clients can discover relay pools by subscribing to events of kind 30010.
|
||||||
|
Clients MUST connect directly to the relay pool addresses in order to be routed to member relays.
|
||||||
|
Relay Pools SHOULD distribute client connections among Relay Pool Members using a fair algorithm.
|
||||||
|
|
||||||
|
## Proxying and Authentication
|
||||||
|
Relay Pools MAY serve incoming WebSockets connections either by passthrough or by redirect.
|
||||||
|
Relay Pools that require authentication (e.g. for paid relay pools) MUST support either [NIP-42](42.md), [NIP-98](98.md) or both.
|
||||||
@@ -78,6 +78,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-96: HTTP File Storage Integration](96.md)
|
- [NIP-96: HTTP File Storage Integration](96.md)
|
||||||
- [NIP-98: HTTP Auth](98.md)
|
- [NIP-98: HTTP Auth](98.md)
|
||||||
- [NIP-99: Classified Listings](99.md)
|
- [NIP-99: Classified Listings](99.md)
|
||||||
|
- [NIP-302: Relay Pools](302.md)
|
||||||
|
|
||||||
## Event Kinds
|
## Event Kinds
|
||||||
| kind | description | NIP |
|
| kind | description | NIP |
|
||||||
@@ -109,6 +110,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `5000`-`5999` | Job Request | [90](90.md) |
|
| `5000`-`5999` | Job Request | [90](90.md) |
|
||||||
| `6000`-`6999` | Job Result | [90](90.md) |
|
| `6000`-`6999` | Job Result | [90](90.md) |
|
||||||
| `7000` | Job Feedback | [90](90.md) |
|
| `7000` | Job Feedback | [90](90.md) |
|
||||||
|
| `8000` | Relay Pool Join Request | [302](302.md) |
|
||||||
| `9041` | Zap Goal | [75](75.md) |
|
| `9041` | Zap Goal | [75](75.md) |
|
||||||
| `9734` | Zap Request | [57](57.md) |
|
| `9734` | Zap Request | [57](57.md) |
|
||||||
| `9735` | Zap | [57](57.md) |
|
| `9735` | Zap | [57](57.md) |
|
||||||
@@ -138,6 +140,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `30004` | Curation sets | [51](51.md) |
|
| `30004` | Curation sets | [51](51.md) |
|
||||||
| `30008` | Profile Badges | [58](58.md) |
|
| `30008` | Profile Badges | [58](58.md) |
|
||||||
| `30009` | Badge Definition | [58](58.md) |
|
| `30009` | Badge Definition | [58](58.md) |
|
||||||
|
| `30010` | Relay Pool | [302](302.md) |
|
||||||
| `30015` | Interest sets | [51](51.md) |
|
| `30015` | Interest sets | [51](51.md) |
|
||||||
| `30017` | Create or update a stall | [15](15.md) |
|
| `30017` | Create or update a stall | [15](15.md) |
|
||||||
| `30018` | Create or update a product | [15](15.md) |
|
| `30018` | Create or update a product | [15](15.md) |
|
||||||
@@ -207,6 +210,7 @@ Please update these lists when proposing NIPs introducing new event kinds.
|
|||||||
| `t` | hashtag | -- | |
|
| `t` | hashtag | -- | |
|
||||||
| `alt` | summary | -- | [31](31.md) |
|
| `alt` | summary | -- | [31](31.md) |
|
||||||
| `amount` | millisatoshis, stringified | -- | [57](57.md) |
|
| `amount` | millisatoshis, stringified | -- | [57](57.md) |
|
||||||
|
| `auth-required` | either nip-42 or nip-98 | -- | [302](302.md) |
|
||||||
| `bolt11` | `bolt11` invoice | -- | [57](57.md) |
|
| `bolt11` | `bolt11` invoice | -- | [57](57.md) |
|
||||||
| `challenge` | challenge string | -- | [42](42.md) |
|
| `challenge` | challenge string | -- | [42](42.md) |
|
||||||
| `client` | name, address | relay URL | [89](89.md) |
|
| `client` | name, address | relay URL | [89](89.md) |
|
||||||
|
|||||||
Reference in New Issue
Block a user