Skip to content

Next Step Microgrant: plebbit: serverless, adminless, decentralized reddit alternative #143

@estebanabaroa

Description

@estebanabaroa

1. What is your project?

Plebbit is serverless, adminless, decentralized Reddit alternative built completely with IPFS/IPNS/pubsub/ENS. It doesn't use any central server, central database, public HTTP endpoint or DNS, it is pure peer to peer (except for the web client that can't join a P2P swarm directly, web clients use interchangeable HTTP providers).

How it uses the IPFS/ENS stack:

  • IPFS for immutable data, like a published comment or a recent subplebbit page
  • IPNS for mutable data, like replies to a comment, upvote counts, new posts/comments published on a subplebbit, etc
  • Pubsub for authors publishing comments/votes to a subplebbit and for the captcha challenge exchange between authors and subplebbits
  • ENS for subplebbit names and usernames (also works with public key hashes for people who don't want to use crypto)

How we solve pubsub DDOS/spam:

Nondeterministic pubsub (like user generated comments) is susceptible to spam attacks that would DDOS it, as well as makes it impossible for moderators to manually moderate an infinite amount of bot spam. We solve this problem by requiring publishers to first request a challenge (captcha or other) from the subplebbit owner's peer. If a peer or IP address relays too many challenge requests without providing enough correct challenge answers, it gets blocked from the pubsub. This requires the subplebbit owner's peer to broadcast the result of all challenge answers, and for each peer to keep this information for some time.

What is a "post"

A post is an IPFS file for its immutable content, like timestamp, title, author signature, etc. Each post's IPFS file also contains its own IPNS name which links to its mutable content, like its upvote count, replies, etc. Each post is part of a linked list, i.e. it points to the previous post's IPFS CID.

What is a "subplebbit"

A subplebbit is an IPNS record updated every 5 minutes, it contains the latest post's CID, the title, description, the CIDs of the latest post pages sorted by new, hot, top, etc. It also contains the pubsub "topic" address to publish to it. Full schema available at https://github.com/plebbit/plebbit-js#schema

Full whitepaper: plebbit/whitepaper#2

2. How are you planning to improve this project?

Release alpha client and get our community to test it. Alpha client will have the following functionalities:

  • Create a subplebbit using a GUI (Electron client with bundled IPFS binary)
  • Publish posts, comments and votes over pubsub using a GUI (Web and Electron clients)
  • Request and serve simple image captcha challenges over pubsub using a GUI (Web and Electron clients)
  • Get a feed of multiple subplebbits using a GUI, with preloading optimizations of IPFS/IPNS data (Web and Electron clients)

3. Will the work be Open Source?

yes

4. If selected, do you agree to complete weekly updates and a grant report upon conclusion?

yes

5. Does your proposal comply with our Community Code of Conduct?

yes

6. Links and submissions

Additional questions:

Metadata

Metadata

Assignees

Labels

type:micrograntAdoption Microgrant (https://github.com/protocol/ipfs-grants/blob/master/MICROGRANTS.md)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions