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
- Read only top-level instructions of successful transactions. The program rejects calls from other programs, so nothing else can count.
- A post's ID is its transaction signature. If a transaction holds more than one post, only the first counts.
- Order events by slot, then by signature in bytewise order, then by instruction index.
- Likes, reposts, follows, pins and profile edits are last-write-wins in that order.
- 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.
- 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 hashWhat running your own means
If you run a public app, you are responsible for what it shows, under the laws that apply to you.