Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 36 additions & 10 deletions 90.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@ This NIP defines the interaction between customers and Service Providers for per
Money in, data out.

## Kinds
This NIP reserves the range `5000-7000` for data vending machine use.
This NIP reserves the range `5000-7000` and `36107` for data vending machine use.

| Kind | Description |
| ---- | ----------- |
| 5000-5999 | Job request kinds |
| 6000-6999 | Job result |
| 7000 | Job feedback |
| Kind | Description |
|-------------|------------------------|
| 5000-5999 | Job request kinds |
| 6000-6999 | Job result |
| 7000 | Job feedback |
| 36000-36xxx | Addressable job result |

Job results always use a kind number that is `1000` higher than the job request kind. (e.g. request: `kind:5001` gets a result: `kind:6001`).

Addressable job results always use a kind number that is `31000` higher than the job request kind. (e.g. request: `kind:5107` gets a result: `kind:36107`).

Job request types are defined [separately](https://github.com/nostr-protocol/data-vending-machines/tree/master/kinds).

## Rationale
Expand Down Expand Up @@ -102,6 +105,8 @@ This param data will be encrypted and added to the `content` field and `p` tag s

Service providers publish job results, providing the output of the job result. They should tag the original job request event id as well as the customer's pubkey.

A spontaneous job result does not need to include `request`, `e`, `i` or `p` tags.

```jsonc
{
"pubkey": "<service-provider pubkey>",
Expand All @@ -118,9 +123,30 @@ Service providers publish job results, providing the output of the job result. T
}
```

* `request`: The job request event stringified-JSON.
* `amount`: millisats that the Service Provider is requesting to be paid. An optional third value can be a bolt11 invoice.
* `i`: The original input(s) specified in the request.
## Addressable job result (`kind:36107`)

Addressable events can be used for DVM results which contain data that can be replaced on a relay. For example, data from IoT devices can be
high frequency and storing all 6xxx DVM events from an IoT device per day would result in large numbers of events stored on a relay.

A spontaneous addressable job result does not need to include `request`, `e`, `i` or `p` tags.

The d tag can have any value, but using a human-readable string such as "iot-device-123-event-8333" can improve usability.

```jsonc
{
"pubkey": "<service-provider pubkey>",
"content": "<stringified-json-array>",
"kind": 36xxx,
"tags": [
["request", "<job-request>"],
["e", "<job-request-id>", "<relay-hint>"],
["i", "<input-data>"],
["p", "<customer's-pubkey>"],
["amount", "requested-payment-amount", "<optional-bolt11>"]
["d", "<unique-string>"]
],
}
```

## Encrypted Output

Expand Down Expand Up @@ -187,7 +213,7 @@ Any job feedback event MIGHT include results in the `.content` field, as describ
* Upon completion, the service provider publishes the result of the job with a `kind:6000` job-result event.
* At any point, if there is an `amount` pending to be paid as instructed by the service provider, the user can pay the included `bolt11` or zap the job result event the service provider has sent to the user

Job feedback (`kind:7000`) and Job Results (`kind:6000-6999`) events MAY include an `amount` tag, this can be interpreted as a suggestion to pay. Service Providers MUST use the `payment-required` feedback event to signal that a payment is required and no further actions will be performed until the payment is sent.
Job feedback (`kind:7000`) and Job Results (`kind:6000-6999` or `kind:36000-36999`) events MAY include an `amount` tag, this can be interpreted as a suggestion to pay. Service Providers MUST use the `payment-required` feedback event to signal that a payment is required and no further actions will be performed until the payment is sent.

Customers can always either pay the included `bolt11` invoice or zap the event requesting the payment and service providers should monitor for both if they choose to include a bolt11 invoice.

Expand Down