mirror of
https://github.com/nostr-protocol/nips.git
synced 2025-12-08 16:18:50 +00:00
Compare commits
2 Commits
nip46-sign
...
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-98: HTTP Auth](98.md)
|
||||
- [NIP-99: Classified Listings](99.md)
|
||||
- [NIP-302: Relay Pools](302.md)
|
||||
|
||||
## Event Kinds
|
||||
| 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) |
|
||||
| `6000`-`6999` | Job Result | [90](90.md) |
|
||||
| `7000` | Job Feedback | [90](90.md) |
|
||||
| `8000` | Relay Pool Join Request | [302](302.md) |
|
||||
| `9041` | Zap Goal | [75](75.md) |
|
||||
| `9734` | Zap Request | [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) |
|
||||
| `30008` | Profile Badges | [58](58.md) |
|
||||
| `30009` | Badge Definition | [58](58.md) |
|
||||
| `30010` | Relay Pool | [302](302.md) |
|
||||
| `30015` | Interest sets | [51](51.md) |
|
||||
| `30017` | Create or update a stall | [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 | -- | |
|
||||
| `alt` | summary | -- | [31](31.md) |
|
||||
| `amount` | millisatoshis, stringified | -- | [57](57.md) |
|
||||
| `auth-required` | either nip-42 or nip-98 | -- | [302](302.md) |
|
||||
| `bolt11` | `bolt11` invoice | -- | [57](57.md) |
|
||||
| `challenge` | challenge string | -- | [42](42.md) |
|
||||
| `client` | name, address | relay URL | [89](89.md) |
|
||||
|
||||
Reference in New Issue
Block a user