mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-11-13 23:39:08 -05:00
184 lines
5.0 KiB
Markdown
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
|
|
|
|
|