# 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