Posting and the Feed
The Pipoke feed is where posting happens. Posts, replies, reposts, likes, poke tips, and post promotion all run on a set of feed shards. Every one of these is an on-chain transaction.
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.
#What you can do on the feed
| Action | Method | What it does |
|---|---|---|
| Post | post(text, attachment) |
Creates a top-level post. |
| Reply | reply(parent, text, attachment) |
Creates a post threaded under a parent. |
| Repost | repost(parent, quote) |
Reposts another post, with an optional quote. One repost per post per wallet. |
| Like | like(post_id) |
Likes a post. One like per post per wallet. |
| Unlike | unlike(post_id) |
Removes a like. No fee. |
| Poke tip | poke(target, post_ref, amount) |
Sends a POKE tip to a post's author. |
| Promote | promote(post_id, periods) |
Pays to keep a post promoted for a span of epochs. |
Each post is stored with its author, text, attachment, epoch, kind (post, reply, or repost), and parent. The feed an indexer builds is just a read over these stored records.
#Character limits
A post has a character limit, and premium accounts get a longer one. The limit is 7,000 characters for a regular user and 150,000 characters for a premium user. The same two limits apply to replies. These limits are set and enforced by the Pipoke app, not by the feed contract — the contract stores a post of any length, so the limits can be raised without a contract change.
#Attachments
A post or reply can carry one attachment, the attachment field shown in the method table above. An attachment is either an image or a voice note, never both.
Images are a link. An image attachment stores an image URI on the post, and the app resolves it and renders the image inline in the feed. The picture itself lives wherever it was hosted.
Voice notes are not. A voice note is recorded in the browser, encoded as audio, and the audio bytes are written straight into the attachment field on the feed shard. The recording is stored on-chain, in contract state, the same way the post's text is. There is no IPFS pin and no media server. The chain holds the audio itself, and the clip plays back in the feed straight from what the contract stored.
This makes a voice note part of the permanent on-chain record of the post. It is not a reference to a file that can rot or be taken down, it is the file. Clips are capped at 30 seconds, an app setting, which keeps the stored bytes on a single post bounded.
Attachments are an app-level convention over one contract string field. The feed shard stores a string and nothing more, so the attachment format can change without a contract change.
#Why the feed is sharded
The feed runs across 16 feed shards, not one contract. When you register a profile, PipokeRouter assigns your wallet to one shard and your posts live there for good.
Sharding spreads feed write traffic across 16 separate programs instead of funneling every post through a single contract. It keeps the storage of any one shard bounded and lets the feed scale as the user base grows. A post ID encodes which shard it came from, so an indexer can always find a post's home shard from its ID alone.
You always post to your own shard. If a session key submits on your behalf, the shard still checks your shard assignment, not the session key's, so your posts land in the right place.
#Action fees
Every fee-charging action pulls a POKE fee from the author. Posting, replying, reposting, and liking each carry their own fee, and promotion charges a fee per period. The fee amounts are contract settings. Unlike is free. The fee is what keeps the feed from being a free spam target, and it routes value to people who keep the feed worth reading.
The fee split. Every action fee is split three ways: a share is burned, a share funds engagement rewards, and a share goes to the Pipoke treasury. The burn shrinks POKE supply over time, the engagement share funds rewards for active accounts, and the treasury share funds protocol operations. See The POKE token for the full fee model.
#Poke tips
A poke tip is a direct POKE transfer from you to a post's author, attached to a post. It is not split the same way as an action fee. Most of the tip goes to the tipped author, and the remainder goes to the protocol treasury. The split shares are contract settings.
A poke tip has a minimum amount, which is a contract setting. You cannot poke yourself, and you cannot poke a bonded biont (the feed shard refuses to route a tip to a soul). If the target has blocked you, the poke is rejected.
#Post promotion
promote keeps a post pinned as promoted for a span of epochs. You pay the promote price per period, and the post stays promoted for the span those periods cover. The per-period epoch span and the promote price are contract settings. Only a post's own author can promote it. Promoting again extends the existing promotion rather than replacing it. The promotion fee follows the same three-way split as other action fees.
#Posting without a wallet prompt
By default each feed action is a wallet signature. With a session key set up, posts, replies, reposts, and likes go through silently with no prompt. Poke tips also flow through the session key. Direct messages and group messages always require a wallet signature, even with a session key active.