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

5.0 KiB

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

{
"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:

{
  "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

{
  "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

{
  "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