nips/100.md
2023-12-31 04:30:24 -03:00

184 lines
5.0 KiB
Markdown

# NIP-100
## NOSTR Decentralized Advertising Network (NOSTR-DAN)
-------------------
`draf` `optional`
This NIP defines the `kind:20100`: a parameterized event dispatched to a listener or pool of listeners to offer space for advertising,
a listener can answer accepting the offer and contracting the space.
## Motivation
-------------------
Most of the digital social networks are based on data-driven advertising, then NOSTR-based applications can also
take competitive advantages learning it from industry to improve earnings in the NOSTR ecossystem.
## Problem
-------------------
Using the centralized adversting networking is staying in hand of the big companies.
## Solution
-------------------
The implementation of the NOSTR Decentralized Advertising Network (NOSTR-DAN) allows the NOSTR-based applications
implement features to display ads to the users and distribute ads to the pool of partners.
## Competitive Advantages for Stakeholders
-------------------
| stakeholder | advantage |
| ----------- | ----------|
| investors and entrepreuners | profitable feature |
| content creators | profitable feature |
| tech professionals | new profitable industry, new NOSTR-jobs |
## Properties
| Property | Help |
| ---------| ---------|
|`action` | `start-offer`, `assign-offer`, `paid`, `cancel-offer`|
| `offer` | offer identity {`pubkey`, `created_at`, `created_at`, `expires_at`, `tags`, `description`}|
| `schema` | Accepted data schemas for the ad be displayed (example: https://schema.org/LocalBusiness), each pool can define your own custom schema |
| `schemaName` | What schema is being used to structure the ad |
|`cluster`| Marketing parameters about the audience cluster that will see the ad |
| `transaction`| Conditions to contract and pay the offer |
| `whitelist` | List of wallets that can contract and pay for this offer |
| `bannedlist` | List of wallets that CANNOT contract this offer |
## Schemas
The concept of schema is based on the https://schema.org/LocalBusiness to offer more freedom to pools and communities decide how to delivery your ads, because ads can have custom properties according to the industry and products/services evolutions.
## Example of usage
- The client dispatch the event to the pool offering space to advertisers
- The listeners (advertisers) understand the event and decide if contract or not the space
### Dispatched Event (Request Body)
The application send an event offering space to advertisers
```json
{
"kind": 20100,
"action": "start-offer",
"schema": [env.POOL.SCHEMA],
"offer": {
"pubkey": env.MYPUBKEY,
"created_at": 1704012878,
"expires_at": 1704016478,
"tag": env.TAG,
"description": "Announce your ecommerce on www.example.com"
},
"cluster":
{
"userAgent": env.WEBBROWSER.DESKTOP.[FIREFOX | CHROME | EDGE | ...],
"country": env.COUNTRY,
},
"transaction":
{
"paymentModel": "prepaid",
"price":
{
"btc": {
"min": 0.0001
},
"eth": {
"min": 0.001
}
},
"conditions":
{
"maxViews": 100,
"maxHours": 24,
"formats": ["image/png,jpg,gif", "text/html,plain", ...]
...another properties about the conditions (specified by Schema)
}
},
"whitelist":[env.LISTERNER.wallet.address],
"bannedlist":[env.LISTERNER.wallet.wallet.address]
}
```
### Listener contracted the space to display ad
The advertiser (listener) decided to contract the space to display the ad,
then answer with:
```json
{
"kind": 20100,
"action": "assign-offer",
"assign_at": "1704012879",
"cancel_at": "1704012880",
"offer": {
"pubkey": env.PUBKEY,
"created_at": 1704012878,
"expires_at": 1704016478,
"tag": env.TAG
},
"transaction": {
"currency": "btc",
"amount": 0.0001,
"wallet": env.MYWALLET.address
},
"schema":{
"schemaName": env.POOL.SCHEMA,
"properties": {
"format": "text/html",
"content": "",
...custom community schema of properties (specified by Schema)
}
}
}
```
### Client accepts contract and answer with wallet
```json
{
"kind": 20100,
"action": "assign-offer",
"assign_at": "1704012879",
"cancel_at": "1704012880",
"offer": {
"pubkey": env.PUBKEY,
"created_at": 1704012878,
"expires_at": 1704016478,
"tag": env.TAG
},
"transaction": {
"wallet": env.MYWALLET.address
},
}
```
### Listener (Advertiser) announces payment
```json
{
"kind": 20100,
"action": "paid",
"paid_at": "1704012879",
"offer": {
"pubkey": env.PUBKEY,
"created_at": 1704012878,
"expires_at": 1704016478,
"tag": env.TAG
},
"transaction": {
"wallet": env.MYWALLET.address
},
}
```
## REVIEW
- NOSTR-DAN needs only to members to work:
- The client that offers spaces to the advertisers
- The listeners (advertisers) that contract the spaces to advertise
- NOSTR-DAN community can create custom schemas for your ads, allowing the dynamic communication required by competitive industries and unpredictable market changes
- Members of the NOSTR-DAN can apply the whitelist and bannedlist to filter ads