Pipoke
Rooms

Drops

A Drop is a Twitch-style single-host live broadcast on Pipoke. You go live, you talk to your audience, the audience listens. When the drop ends, the recording is sealed as an on-chain VOD that anyone can replay.

Pipoke runs on Octra Devnet today. Any fee, price, or limit referred to here is a contract setting chosen for testing. Every one is owner-settable, and mainnet values will be different. These docs describe how the mechanics work, not what the numbers are.

#Open a drop

A drop opens with open_drop(...) on PipokeRooms. The open tx writes a room record with:

Field Meaning
room_id Global room ID. Encodes the shard in the upper bits.
host Your wallet.
parent_kind PARENT_KIND_DROP = 0
parent_id Zero for drops (drops are not nested under a community).
status ROOM_STATUS_OPEN = 1
opened_epoch The open epoch.
manifest_uri Set at close, points at the sealed VOD.
entry_price Raw POKE cost per paid listener. Zero for free drops.
paid_count Running tally of paid listeners.
tx_hash The on-chain open tx.

While live, the manifest URI takes a placeholder shape:

livekit://drop-{room_id}?v=2&t={title}&c={category}&tags={comma_delimited}

The v=2 is the manifest schema version. The query params carry the drop's metadata (title, category, tags) so the live view can render without an extra lookup. The thumbnail and description are pulled from the indexer's in-memory meta store.

#Categories

The drop wizard ships a fixed taxonomy of 12 categories so the rooms hub stays browsable.

Music, Talk, Tech, Crypto, Art, Gaming, IRL, Comedy, Education, News, Wellness, Other.

You pick one at open time. You can edit tags later but not the category.

#Audience

Anyone with the link can join as a listener. The rooms hub shows the drop in its category page and in followers' feeds if the host is followed. There is no cap on listener count.

If the drop has a non-zero entry_price, the listener pays before getting a listen token. The split is recorded on the listener tx as three amounts:

Share Field Where it goes
Creator share creator_amt The host.
Pool share pool_amt A protocol-wide pool.
Burn share burn_amt Burned.

The exact split is a contract setting. Paid and free listener counts are tracked separately on the room record so the host can see real paid attendance.

#Audio, video, screen share

The host can publish:

  • Audio (always)
  • Video (a webcam stream)
  • Screen share (a tab, window, or full screen)

LiveKit handles the WebRTC mesh. The Pipoke app sends real-time data over the same connection (chat, reactions, hand-raises).

#Chat

Drops have a chat sidebar. Chat messages route through the rooms gateway and persist for the duration of the drop. Tips are dropped in the chat as inline pokes.

#End and seal

When you end the drop:

  1. The recorded audio + video chunks are assembled into a native MP4 manifest.
  2. The manifest and chunks are written to your Octra Circle.
  3. close_drop(room_id, manifest_uri) is called on PipokeRooms to seal the VOD URI on chain. The room flips to ROOM_STATUS_CLOSED = 2.

After seal, the VOD plays back on the same drop page. There is no separate "uploaded recording": the close-and-seal step is the upload.

#Sealed manifest

The sealed manifest carries:

Field What it is
title, description, category, tags Drop metadata.
thumbnail_uri Extracted from the first chunk at close.
duration_ms Recorded duration.
chunks The list of chunk URIs that make up the VOD.

The Pipoke indexer reads the manifest lazily when the drop is first viewed as a replay.

#See also