Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open Grant Proposal: Plebbit: fully P2P Reddit alternative using IPFS, IPNS over pubsub and Gossipsub #289

Open
estebanabaroa opened this issue Jun 6, 2023 · 0 comments
Assignees

Comments

@estebanabaroa
Copy link

estebanabaroa commented Jun 6, 2023

Open Grant Proposal: Plebbit: fully P2P Reddit alternative using IPFS, IPNS over pubsub and Gossipsub

Name of Project: Plebbit

Proposal Category: app-dev

Proposer: @estebanabaroa

(Optional) Technical Sponsor:

Do you agree to open source all work you do on behalf of this RFP and dual-license under MIT, APACHE2, or GPL licenses?: Yes

Project Description

Plebbit is a Reddit alternative that is fully P2P. The user interface looks exactly like Reddit, but the backend doesn't make any request to public HTTP endpoints, DNS, databases, etc. Instead it uses IPFS for immutable content (comments), IPNS for mutable content (communities metadata, votes, replies, comment pages) and Gossipsub to let authors publish to communities.

Link to the demo (already has active users) : https://plebbitapp.eth.limo

It handles DDOS/sybil resistance of the pubsub by making each pubsub topic authenticated (the pubsub topic name is a hash of the community owner's public key). To publish, authors must first complete an arbitrary challenge (captcha, password, whitelist, etc...) over pubsub, then the community owner confirms the success also over pubsub, and later publishes the comment/vote over IPNS and IPFS.

The pubsub message schema is described here (CBOR encoded) https://github.com/plebbit/plebbit-js#pubsub-message-types

The IPFS/IPNS file schema is describe here (JSON/base64 encoded) https://github.com/plebbit/plebbit-js#schema

Plebbit is not just a Reddit clone, it has several non-Reddit clients and libraries that we have been working on for 2 years:

Pure JS implementation: https://github.com/plebbit/plebbit-js
React hooks library: https://github.com/plebbit/plebbit-react-hooks
Reddit like UI: https://github.com/plebbit/plebbit-react (desktop, android app and web https://plebbitapp.eth.limo)
Imageboard like UI: https://github.com/plebbit/plebchan (desktop, android app and web https://plebchan.eth.limo)
CLI: https://github.com/plebbit/plebbit-cli
Old reddit like UI: TODO
Discourse like UI: TODO
StackExchange like UI: TODO
Rust client that compiles to WASM, Android and iOS: TODO

The goal is to completely replace centralized message boards, have clients that look like reddit, discourse, stackexchange, image boards, vbulletin, etc. all interoperable and fully P2P.

At the moment the web and android clients only use IPFS gateways (multiple for redundency), but eventually we'd like to add webtransport or webrtc or whatever gets released for IPFS in browser/mobile. The desktop clients bundle kubo (a forked build of kubo with our custom Gossipsub validator https://github.com/plebbit/go-libp2p-pubsub-plebbit-validator)

Value

Each user of plebbit is a full IPFS and Gossipsub user. The desktop clients are full IPFS nodes (bundles kubo). The browser and mobile clients use gateways, and eventually in the future push adoption, experimentation and improvement of IPFS and Libp2p in the browser/mobile. At first the user might not even know they are using IPFS or running a node, but with time they learn what it is, become evangelists or contributors to IPFS and Libp2p themselves.

There seems to be a lot of organic interest for P2P message boards built using IPFS, some recent threads about plebbit:

https://old.reddit.com/r/ethereum/comments/13x6j2t/reddit_is_shutting_down_its_free_apithird_party/ (500 upvotes, 85k views, 131 replies, 95% upvoted)
https://old.reddit.com/r/CryptoCurrency/comments/13zj98d/reddit_is_shutting_down_its_free_apithird_party/ (91 upvotes, 113 replies, 30k views, 75% upvoted)
https://news.ycombinator.com/item?id=36203610 (289 points, 204 comments, reached top 3 on front page)

Old threads about plebbit before the demo was functional:

https://old.reddit.com/r/CryptoCurrency/comments/syp7q6/this_dude_made_an_alternative_reddit_on_a/ (2300 upvotes, 864 comments)
https://old.reddit.com/r/technology/comments/t6fwnw/plebbit_a_serverless_adminless_decentralized/ (1600 upvotes, 556 comments)

Our twitter posts get a few hundreds views sometimes https://twitter.com/getplebbit

Deliverables

  • Improve the 3 GUI clients, the reddit like client, the old reddit like clients and the image board clients. They have a lot of bugs, clunkiness and performance issues (but they are already usable and have a few daily active users).
  • Design a "plebbit RPC" standard that will be used for stuff that can't be done in the browser, like for example managing the SQLite databases that store the community information. This is currently done via electron "exposeInMainWorld" but should be an API instead.
  • Implement more difficult pubsub challenges than just the default captcha to prevent spam. Like for example ERC20 token gating.
  • Add webrtc and/or webtransport in the web and android clients.
  • Test spamming pubsub topics and the custom Gossipsub validator in go.

Development Roadmap

  1. Improve the 3 GUI clients, the goal is for the GUIs to be completely smooth, fast and bug free, ready for mainstream adoption:
  • build and release old.reddit GUI client
  • testing and fix bugs added to https://github.com/orgs/plebbit/projects/3 and https://github.com/orgs/plebbit/projects/5
  • implement new interfaces related to running communities, moderating, configuring new pubsub challenge types
  • information about the publication on the challenge modal
  • 10 languages translations
  • add linking crypto wallets settings (signing)
  • tipping with several cryptocurrencies
  • improve dark mode colors
  • add playright tests
  • migrate to typescript
  • add embeds like twitter, youtube, reddit, etc
  • encrypt private keys at rest with a password
  • playlist with autoplay for video/audio
  • display IPFS stats during loading, like peer counts and bandwidth used

@Abydin and @plebeius-eth will work on this as frontend devs.

Funding: $30,000

Time: 120 days (concurrent with backend work)

  1. Implement "plebbit RPC":
  • implement "plebbit RPC": research and design the specs, write the code for it, migrate the functionality from electron "exposeInMainWorld" to the RPC, get all @plebbit/plebbit-js tests to pass
  • do do testing and fix all bugs added to https://github.com/orgs/plebbit/projects/4
  • fix 6 keepalive connections limit in the browser
  • user fetched thumbnails in desktop/android (can do native fetch without cors)
  • implement multisubs (user managed IPNS records with list of communities to show a multifeed)
  • implement editing community settings edit over pubsub
  • fetch default communities over IPNS (currently making a request to github)
  • resolve author addresses async (in react hooks)
  • crossposts
  • resolve addresses from multiple providers
  • moderator only feeds, like queues, reports, unmoderated, edited
  • sort by active (for imageboard, discourse or vbulletin style clients)
  • some setting for auto archiving old comments
  • web of trust recommendations from authors, i.e. look at the authors I upvote and find the subs they post in and recommend them
  • fallback to IPFS gateway on desktop app when P2P not supported, like on cellular

@estebanabaroa and @Rinse12 will work on this as backend devs.

Funding: $10,000

Time: 60 days (concurrent with frontend work)

  1. Implement more difficult and varied pubsub challenges:
  • text challenge (password, question, etc)
  • whitelist/blacklist challenge (based on author public key)
  • ERC20 staking challenge
  • ERC721 staking challenge
  • ERC20 tipping challenge
  • ERC20 balance challenge
  • ERC721 balance challenge
  • video captcha challenge
  • audio captcha challenge
  • more difficult image captcha challenge
  • settings for less or no captcha for users with karma in the sub
  • settings for less or no captcha for users with karma in other subs
  • settings for less or no captcha for users with certain roles like mods
  • adding challenges to the IPFS providers so that they dont get DDOSed, this requires extending the pubsub message interface
  • design an open RPC for uploading images and getting back URLs, must use the same challenge standard as the IPFS providers to prevent spam

@estebanabaroa and @Rinse12 will work on this as backend devs.

Funding: $10,000

Time: 60 days (concurrent with frontend work)

Total Budget Requested

# Description Funding Time
1 Improve the 3 GUI clients $30,000 120 days
2 Implement "plebbit RPC" $10,000 60 days
3 Implement more difficult pubsub challenges $10,000 60 days
Total $50,000 120 days

Maintenance and Upgrade Plans

In the short term, paid contributors will maintain it, I am funding the development myself from savings. In the long term, I think the project can eventually find sustainable (but not for profit) income through donations, grants, volunteers, taking a percent of tips/awards sent between users, selling community names or user names, selling avatars (like Reddit does), hosting nodes as a service, etc.

Team

Team Members

Esteban Abaroa (backend & frontend) https://twitter.com/estebanabaroa @estebanabaroa
Rinse (backend) https://twitter.com/rinse_12 @Rinse12
Abideen Sadiq Ayinde (frontend) https://twitter.com/Abideen_AS @Abydin
Plebeius (frontend) https://twitter.com/plebeius_eth @plebeius-eth

Team Website

https://plebbit.com

Relevant Experience

We have been building plebbit from scratch openly on github fulltime for 1.5 years and the demo is functional and has a few active daily users. We also have public dev chats where we have been communicating with each other daily for 1.5 years https://t.me/plebbitjs https://t.me/plebbitreact https://t.me/plebchanreact

Team code repositories

https://github.com/plebbit
https://github.com/plebbit/plebbit-js (pure JS implementation)
https://github.com/plebbit/plebbit-react-hooks (React hooks)
https://github.com/plebbit/plebbit-cli (CLI client)
https://github.com/plebbit/plebbit-react (Reddit like UI)
https://github.com/plebbit/plebchan (image board like UI)

Additional Information

We heard of Open Grants Program because someone commented on our github discussion plebbit/whitepaper#2 (reply in thread)

Best contact email: estebanabaroa@protonmail.com

Additional information: we already had a Protocol Labs $5000 grant in march 2022 and completed all the milestones #143

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants