diff options
Diffstat (limited to '45.md')
| -rw-r--r-- | 45.md | 35 |
1 files changed, 28 insertions, 7 deletions
| @@ -4,7 +4,7 @@ NIP-45 | |||
| 4 | Event Counts | 4 | Event Counts |
| 5 | -------------- | 5 | -------------- |
| 6 | 6 | ||
| 7 | `draft` `optional` `author:staab` | 7 | `draft` `optional` |
| 8 | 8 | ||
| 9 | Relays may support the verb `COUNT`, which provides a mechanism for obtaining event counts. | 9 | Relays may support the verb `COUNT`, which provides a mechanism for obtaining event counts. |
| 10 | 10 | ||
| @@ -16,24 +16,45 @@ Some queries a client may want to execute against connected relays are prohibiti | |||
| 16 | 16 | ||
| 17 | This NIP defines the verb `COUNT`, which accepts a subscription id and filters as specified in [NIP 01](01.md) for the verb `REQ`. Multiple filters are OR'd together and aggregated into a single count result. | 17 | This NIP defines the verb `COUNT`, which accepts a subscription id and filters as specified in [NIP 01](01.md) for the verb `REQ`. Multiple filters are OR'd together and aggregated into a single count result. |
| 18 | 18 | ||
| 19 | ``` | 19 | ```json |
| 20 | ["COUNT", <subscription_id>, <filters JSON>...] | 20 | ["COUNT", <subscription_id>, <filters JSON>...] |
| 21 | ``` | 21 | ``` |
| 22 | 22 | ||
| 23 | Counts are returned using a `COUNT` response in the form `{"count": <integer>}`. Relays may use probabilistic counts to reduce compute requirements. | 23 | Counts are returned using a `COUNT` response in the form `{"count": <integer>}`. Relays may use probabilistic counts to reduce compute requirements. |
| 24 | In case a relay uses probabilistic counts, it MAY indicate it in the response with `approximate` key i.e. `{"count": <integer>, "approximate": <true|false>}`. | ||
| 24 | 25 | ||
| 25 | ``` | 26 | ```json |
| 26 | ["COUNT", <subscription_id>, {"count": <integer>}] | 27 | ["COUNT", <subscription_id>, {"count": <integer>}] |
| 27 | ``` | 28 | ``` |
| 28 | 29 | ||
| 29 | Examples: | 30 | Whenever the relay decides to refuse to fulfill the `COUNT` request, it MUST return a `CLOSED` message. |
| 30 | 31 | ||
| 31 | ``` | 32 | ## Examples |
| 32 | # Followers count | 33 | |
| 34 | ### Followers count | ||
| 35 | |||
| 36 | ```json | ||
| 33 | ["COUNT", <subscription_id>, {"kinds": [3], "#p": [<pubkey>]}] | 37 | ["COUNT", <subscription_id>, {"kinds": [3], "#p": [<pubkey>]}] |
| 34 | ["COUNT", <subscription_id>, {"count": 238}] | 38 | ["COUNT", <subscription_id>, {"count": 238}] |
| 39 | ``` | ||
| 35 | 40 | ||
| 36 | # Count posts and reactions | 41 | ### Count posts and reactions |
| 42 | |||
| 43 | ```json | ||
| 37 | ["COUNT", <subscription_id>, {"kinds": [1, 7], "authors": [<pubkey>]}] | 44 | ["COUNT", <subscription_id>, {"kinds": [1, 7], "authors": [<pubkey>]}] |
| 38 | ["COUNT", <subscription_id>, {"count": 5}] | 45 | ["COUNT", <subscription_id>, {"count": 5}] |
| 39 | ``` | 46 | ``` |
| 47 | |||
| 48 | ### Count posts approximately | ||
| 49 | |||
| 50 | ``` | ||
| 51 | ["COUNT", <subscription_id>, {"kinds": [1]}] | ||
| 52 | ["COUNT", <subscription_id>, {"count": 93412452, "approximate": true}] | ||
| 53 | ``` | ||
| 54 | |||
| 55 | ### Relay refuses to count | ||
| 56 | |||
| 57 | ``` | ||
| 58 | ["COUNT", <subscription_id>, {"kinds": [4], "authors": [<pubkey>], "#p": [<pubkey>]}] | ||
| 59 | ["CLOSED", <subscription_id>, "auth-required: cannot count other people's DMs"] | ||
| 60 | ``` | ||