-
Notifications
You must be signed in to change notification settings - Fork 74
Description
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
-
Have you submitted to the IPFS Community Showcase?
https://github.com/ipfs/community/blob/master/projects/plebbit.md -
Have you added your project to the IPFS Ecosystem Directory?
yes
Additional questions:
- For each team member(s), please list name, email, Github account, and role in the project.
- Esteban Abaroa estebanabaroa@protonmail.com @estebanabaroa https://twitter.com/estebanabaroa front/backend dev
- Rinse rinse12@tutanota.com @Rinse12 https://twitter.com/rinse_12 front/backend dev
- Abideen Sadiq Ayinde abideenayinde7@tutanota.com @Abydin https://twitter.com/Abideen_AS/ frontend dev