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:
- The recorded audio + video chunks are assembled into a native MP4 manifest.
- The manifest and chunks are written to your Octra Circle.
close_drop(room_id, manifest_uri)is called onPipokeRoomsto seal the VOD URI on chain. The room flips toROOM_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.