Previous Tildes and r/TheoryOfReddit discussions on this:
tl;dr: Do you believe your Ethereum scaling technology can handle Reddit's scale? It's time to let the Ethereum community hear about it. Send your demo in the comments by July 31, 2020.
This is your chance to earn some fame but, to be clear, there is no prize if your solution is chosen or modified to meet Reddit’s needs. Our lawyer made us write this.
In conjunction with the Ethereum Foundation, Reddit is inviting Ethereum scaling projects to show the community how your scaling solution can be used to bring Community Points to mainnet. Our goal is to find a solution that will support hundreds of thousands of Community Points users on mainnet today, and can eventually scale to all of Reddit (430 million monthly users).
We’ve evaluated some of the most promising scaling solutions, and have learned a few things:
- There are plenty of awesome projects that we don't know about yet. We seem to learn about a promising new scaling solution every day.
- Most existing scaling solutions focus on the exchange use case, which favors optimizing for transfers. Many of these designs don't take into consideration the costs of obtaining tokens or entering the scaling system, which can be significant. Community Points distributions have cost an order of magnitude more gas than all other operations combined, primarily due to on-chain storage costs associated with onboarding new users.
- It's unclear how to determine the best solution. There is a lot of code, a lot of documentation, and a lot of hype out there. But there are very few objective real-world reviews or comparisons of various products/implementations.
- We need the Ethereum community's help to figure this out.
Do you have a scaling project that meets the criteria below? If so, share your demo in the comments of this post by July 31, 2020. Please note that all demos need to simulate Community Points usage for 100,000 users.
We also invite all scaling experts in the Ethereum community to comment on any demos submitted to enable a better understanding of the trade-offs and compromises between different solutions.
We will review the demos and plan to share any updates by September. While we don’t expect any novel scaling projects, we hope that you, the Ethereum scaling expert, can show us how to scale Community Points.
Demos should include:
- A live proof of concept showing hundreds of thousands of transactions
- Source code (for on & off-chain components as well tooling used for the PoC). The source code does not have to be shared publicly, but if Reddit decides to use a particular solution it will need to be shared with Reddit at some point
- How it works & scales
- Cost estimates (on-chain and off-chain)
- How to run it
- APIs (on chain & off)
- Known issues or tradeoffs
- Summary of cost & resource information for both on-chain & off-chain components used in the PoC, as well as cost & resource estimates for further scaling. If your PoC is not on mainnet, make note of any mainnet caveats (such as congestion issues).
Scaling. This PoC should scale to the numbers below with minimal costs (both on & off-chain). There should also be a clear path to supporting hundreds of millions of users.
- Over a 5 day period, your scaling PoC should be able to handle:
- 100,000 point claims (minting & distributing points)
- 25,000 subscriptions
- 75,000 one-off points burning
- 100,000 transfers
Decentralization. Solutions should not depend on any single third-party provider.
- We prefer solutions that do not depend on specific entities such as Reddit or another provider, and solutions with no single point of control or failure in off-chain components, but recognize there are numerous trade-offs to consider
Usability. Scaling solutions should have a simple end user experience.
- Users shouldn't have to maintain any extra state/proofs, regularly monitor activity, keep track of extra keys, or sign anything other than their normal transactions
- Transactions complete in a reasonable amount of time (seconds or minutes, not hours or days)
- Free to use for end users (no gas fees, or fixed/minimal fees that Reddit can pay on their behalf)
- Bonus points:
- Users should be able to view their balances & transactions via a blockchain explorer-style interface
- Exiting is fast & simple
Interoperability. Compatibility with third party apps (wallets/contracts/etc) is necessary.
- Scaling solutions should be extensible and allow third parties to build on top of it
- APIs should be well documented and stable
- Documentation should be clear and complete
- Third-party permissionless integrations should be possible & straightforward
- Simple is better. Learning an uncommon or proprietary language should not be necessary. Advanced knowledge of mathematics, cryptography, or L2 scaling should not be required. Compatibility with common utilities & toolchains is expected.
- Bonus Points: Show us how it works. Do you have an idea for a cool new use case for Community Points? Build it!
Security. Users have full ownership & control of their points.
- Balances and transactions cannot be forged, manipulated, or blocked by Reddit or anyone else
- Users should own their points and be able to get on-chain ERC20 tokens without permission from anyone else
- Points should be recoverable to on-chain ERC20 tokens even if all third-parties involved go offline
- A public, third-party review attesting to the soundness of the design should be available
- Bonus points:
- Public, third-party implementation review available or in progress
- Compatibility with HSMs & hardware wallets
- Minting/distributing tokens is not performed by Reddit directly 
- One off point burning, as well as recurring, non-interactive point burning (for subreddit memberships ) should be possible and scalable
- Fully open-source solutions are strongly preferred
 In the current implementation, Reddit provides signed data for claims, but does not submit the actual claim transaction for the user (the user does that themselves). Note that smart contracts are considered independent of Reddit provided there is a path to decentralizing control over them.
 Subreddit memberships are currently implemented as a contract acting as an ERC777-style operator that can burn points on a monthly basis, but we are open to changing that implementation.
Community Points Overview
To help you get started, this is an overview of how Community Points work today and some stats on how it's used. We are open to changing most implementation details, provided the basic requirements (above) are met.
Usage stats over the past month
Number of Community Points holders: ~17,500
Number of transfers: ~20,000
Number of subreddit memberships: ~800
Community Points is built around 3 contracts:
- SubredditPoints: the ERC20 token
- Distributions: manages token supply & token claims
- Subscriptions: enables membership subscriptions in the form of recurring token burn
Deployed Contracts & Source Code
Points Distribution & Claims
Token supply is controlled by distribution rounds managed in the Distributions contract and triggered by Reddit. For each round (occurring ~monthly), Reddit submits a proposal for points distribution to a subreddit for approval. Once approved, Reddit issues signed claims for individual users according to the agreed upon points distribution. These claims can be redeemed on-chain. Claims are obtained from Reddit, and submitted to the Distributions contract, which validates the claim and calls the Subreddit Points contract to mint points.
Subreddit memberships are obtained by burning points via the Subscriptions contract. Redditors can optionally configure their membership to be renewable on a monthly basis without additional interaction. The Subscriptions contract is granted permission to burn points by being configured as an ERC777-style default operator in the Subreddit Points contract.
We'll be watching this thread and answering questions. Looking forward to what comes out of this!