diff --git a/100.md b/100.md new file mode 100644 index 00000000..1728d123 --- /dev/null +++ b/100.md @@ -0,0 +1,183 @@ +# 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 + +