Test deployment on devnet. It uses free test SOL, and data can be reset.
UPROAR

Run your own

This app is one reader of a public program. If you disagree with how it runs, you can read the same chain and make your own choices.

The program

Program address: 2BgbuMAkSP1QwCcCc955i7Bhqv6fwRTqtVZzQU3WqKD1

Source code, IDL and indexer: github.com/Rishab87/uproar

How data is stored

Names, profiles and session keys are accounts, because the chain has to enforce them. Everything else is an instruction: the text of a post lives in the signed transaction. The program accepts an instruction only if the signer may speak for that profile, so a successful transaction is the proof that a post is real.

The indexing rules

  1. Read only top-level instructions of successful transactions. The program rejects calls from other programs, so nothing else can count.
  2. A post's ID is its transaction signature. If a transaction holds more than one post, only the first counts.
  3. Order events by slot, then by signature in bytewise order, then by instruction index.
  4. Likes, reposts, follows, pins and profile edits are last-write-wins in that order.
  5. Name ownership follows moves in and out of each profile. The holder is whoever has one more in than out, which doesn't depend on order inside a slot.
  6. A delete counts only if it comes from the post's author.

Follow these rules and you reach the same state as this app's chain data, byte for byte. The indexer can print a state hash to compare.

Running the indexer

DATABASE_URL=postgres://... RPC_URLS=https://... uproar-indexer migrate
DATABASE_URL=postgres://... RPC_URLS=https://... uproar-indexer backfill
DATABASE_URL=postgres://... RPC_URLS=https://... uproar-indexer hash

What running your own means

If you run a public app, you are responsible for what it shows, under the laws that apply to you.