DONUTS: a case study in tokenized incentives

I’ve been following the $DONUTS experiment on the r/ethtrader subreddit for a while now. At a high level, it’s actually doing in production many things we imagine communities doing with SourceCred: minting crypto (ERC-20 tokens) based on reputation scores (in this case a function of Reddit karma), using those tokens for community governance (DONUT-weighted Reddit polls and Aragon DAO votes) and generating revenue (e.g. you can buy the sub’s banner ad space using a Harberger Tax). It’s also doing so at scale (238k subscribers), has active engagement from a growing subset of users, and has a market on Uniswap that, while relatively small, is now liquid enough for contributors to sell for USD if they want. It has also faced some controversy and backlash from parts of the community, something SourceCred will likely also see in more established communities. So I thought it time for a deeper dive into the DONUTS.

In this post, I provide a brief history of the project, describe the basic DONUTS tokenomics and governance, show some relevant stats I gathered, and reflect on my personal experience as a contributor – I was part of the original airdrop of tokens, got a few due DONUTS from a handful of comments I’ve made in the past, and have sold some on Uniswap.

I plan on posting this to r/ethtrader, getting some DONUTS for it, estimating the value of those tokens, and posting it here.


Fun fact, @cslarson (head moderator of r/ethtrader and founder of DONUTS as far as I can tell) was actually hacking on SourceCred before DONUTS happened. He, along with @lkngtn and @jvluso had recently coded up credao at a hackathon, a project that mints ERC-20 tokens in an Aragon DAO according to Cred scores, when he got the call from Reddit offering support for prototyping DONUTS on r/ethtrader. Can’t blame him:)

The introduction of DONUTS around 11 months ago was controversial. Some were enthusiastic about tokenizing karma, while others were vehemently opposed. This split eventually resulted in much drama and 6/10 of the sub’s mods leaving , with those opposing leaving and creating their own sub, r/ethfinance (19.8k subscribers currently, compared to r/ethtrader’s 238k). SourceCred has imagined this dynamic potentially appearing when introduced to communities, especially in more mature communities with established power structures.

r/ethtrader engagement seemed to drop off in the wake of the split, but activity continued to be comparable to other crypto subreddits (my totally unscientific impression based on popping in now and then). Lately, with the rise of DeFi, Reddit introducing community points (Reddit is looking to roll this out to more subreddits if successful), and general bull market excitement, engagement seems to have picked up, with people generally excited about DONUTS.

After an intial burst of low-volume trading activity, the market died down until a couple months ago, when the price of DONUTS spiked. Since then the token has showed signs of life, seen increasing volume and liquidity, and recently garnered a listing on CoinGeko.. Market cap as of time of writing is ~$175k.

This is very interesting I think, as the “long tail” of communities using SourceCred may have similarly small and illiquid markets, only feasible using Automated Market Makers (AMM) such as Uniswap, Bancor, etc. Is $175k mcap and $37,629 in the liquidity pool (current amount) enough for contributors regularly cashing out to pay rent?


Like in SourceCred’s internal Credsperiment, there are two tokens, one a non-transferrable reputation token (CONTRIB) and a tradable token (DONUTS). Voting on governance decisions, such as whether to change the issuance rate of DONUTS, is done via a function of CONTRIB and DONUTS. Vote power per contributor is calculated as: min(CONTRIB, DONUT). 1 CONTRIB = 1 DONUT. So, if you sell DONUTS you have less voting power than those who HODL. This also keeps people from simply buying up DONUTS to sway votes. Note that these equations may have shifted.

Tokens are minted and managed in an Aragon DAO. Tokens are distributed weekly based on the following formula:

  • 5% for moderators
  • 95% for posts and comments (proportional to karma)

I find it interesting that SourceCred has also converged on ~5% as a reasonable “tax/royality/service fee/tribute” from projects using it.


Token distributions are first posted to r/ethtrader in the form of a CSV, where contributors can comment. The latest one just went up,

DONUTS distribution across contributors looks like a typical power law distribution seen generally in subreddits…

The proposed distribution is then submitted as a proposed airdrop in the Aragon DAO using the AirdropDuo app, where token holders can vote to challenge (block) the distribution.


If the airdrop isn’t challenged, tokens are sent to the ETH addresses of contributors that have registered their address with Reddit.

Any community member can propose changes to the system. First by submitting a “Poll proposal post” to gauge sentiment. Then, if there’s support for the idea, there is a token-weighted Reddit poll. For example, here’s a recent poll where the community voted on a “DONUT halvening” which cut the new DONUT and CONTRIB issuance in half from 2m to 1m new DONUTs and CONTRIBs per week.

This is very interesting for SourceCred, as governance surrounding the issuance rate of Grain is still an open challenge. This seems like a relatively simple way for the community to negotiate issuance. So far votes have seemed relatively drama free.

Selling DONUTS

During the %900 price spike a couple months ago, i couldn’t help but sell most of my DONUTS for DAI.

I have to say, getting paid on-chain for content I created on Reddit was a quite thrilling experience for me. Very validating of the future we’re creating.

Today when I checked the DAO for new airdrops, I had four waiting for me.

Unfortunately, with an estimated gas fee of $4.07, 3/4 of the airdrops were worth less than the estimated gas to claim them. So I just claimed the 25,295 token drop for $45.08, minus $4.07 in gas = $41.73. Not bad for some snarky Reddit comments :smirk:

The liquidity pool looks like it’s growing.

The price is up %16 in the last 24 hrs

This brings up another interesting issue. While SourceCred’s Grain token is going to be pegged 1:1 to the USD for the forseeable future, other projects that use it are going to just open a market on Uniswap, add some liquidity, and likely see price volatility. Will contributors need to become amateur traders? Learn about Uniswap, liquidity pools, potential politics around moving the price? The r/ethtrader community of course knows all this, but will your standard OSS contributor? Will they want this abstracted? Will that potentially rob people of upside if the coin moons?

I for one am enjoying the fact that my posts are collecting growing streams of crypto tokens :roller_coaster: :sunglasses:


Wow, great write-up! Happy to answer any questions if anyone has any.

For history, i worked on daoify-ing ethtrader via a few different projects (dappening, recdao) before being approached by Reddit. I was involved in credao because i could contribute an aragon app i had built for moving donuts on-chain from being centralised in reddit.

Yes, distribution is calculated primarily from post & comment karma but I’ve wanted to stress that principally what we want is a metric for contribution (hence calling the non-transferable token CONTRIB). Karma is just a simple and available proxy that may work for this but should be iterated and improved on. Different communities may also define positive contribution differently and there can even be competition in this regard. Reddit have backtracked here and I think that’s unfortunate :man_shrugging:.

I was proud of min(CONTRIB,DONUT) and Reddit have chosen to keep this even with their newer, in-house iteration of the Community Points protocol (for r/fortnitebr and r/cryptocurrency). That said I think now flash loans make this basically much less useful.


Thanks for the backstory @cslarson!

Was wondering about this. My general sense, from our experience using SourceCred for valuing contributions here, and in our trial distributing DAI on the MakerDAO forum, is that for forums generally, when not too much money is flowing, people generally don’t change their behavior too much. At least that’s my subjective impression. If that’s the case with community points, perhaps simple and available proxies like karma may work well, as long as those tokens aren’t too valuable. Speaking of which, since OP, my $41.73 worth of DONUTS is up to $65.62. Woot! :rocket: :partying_face:


If more money is involved, and Sibyls and gaming become a bigger problem, could see demand for more robust reputation systems. Did not realize communities has such control (at least for now) on calculating contribution scores. Looking at the r/CryptoCurrency ($MOONS) distribution proposal posted yesterday, it looks like the community “can review the data and optionally propose an alternative distribution, if they wish.” using the below process:

To propose an alternative distribution:

* You can create a CSV with alternative contribution scores or propose changes to the algorithm used to calculate them from karma (as long as the changes can be implemented easily).
* The amount of Moons distributed to a user will be proportional to their contribution score. Contribution scores cannot be negative.
* Make a poll to have the community vote on your proposal. Include an accurate description of the changes you are proposing.
* If the poll meets quorum (20% of Moons need to vote in it) and passes (according to the weighted results), it becomes the official contribution measurement (unless there is evidence of abuse in the vote, such as bribery). Algorithm changes will carry forward to future distributions.
* In case of multiple polls passing, the one with the most Moons cast in favor will be the official one.
* If no alternative passes, the data provided here will become official.

Then, “After the scores are finalized, Reddit will sign the data and publish the final, official data. After that, people will be able to claim their Moons through the Vault in the Reddit mobile app.” This has me wondering about control of the infrastructure. Have asked for more info in a comment on the thread, which will hopefully earn me $MOONS:)

This formula does seem a very elegant, simple solution (good for governance). Flash loans I thought would only be available for DONUTS, no? Also, there are grace periods on distributions on $DONUTS? So the community would have time to revert any malicious decision?


Looking at the r/CryptoCurrency ($MOONS) distribution proposal posted yesterday, it looks like the community “can review the data and optionally propose an alternative distribution, if they wish.”

ah that’s great language they use there - i wasn’t aware and i take back my slight slight. they refer to karma in variable names in their new contacts, and since they are also now the single source (for the new protocol version they must sign and validate the claims) i made a bad assumption.

This formula does seem a very elegant, simple solution (good for governance). Flash loans I thought would only be available for DONUTS, no?

With min(CONTRIB,DONUT) I wanted to tie both reputation and economic stake in the community to voting weight. If a user sells their full economic stake then this reduces their weight to 0. With flash loans this is irrelevant because as part of the voting tx they could flash borrow the $DONUTs to re-max and restore their full vote weight, but without actually having to really buy them back. Actually, as long as snapshotted token is used this is not really a concern and min(CONTRIB,DONUT) I think still works. Alas, $DONUTs are not snapshotted (actually i thought min(C,D) removed the need to use minime and so i could save on gas!).

Also, there are grace periods on distributions on $DONUTS? So the community would have time to revert any malicious decision?

Yes, the grace period would be during the Challenge Period. Currently this is set at 3 days within which it can be challenged, escalating it to needing to pass a vote. There are stakes involved with issuing a challenge-able proposal.


You mention r/ethtrader having 238k subscribers but the actual activity fluctuates significantly and of course the split resulting in r/ethfinance affected this too. Another data point is that in the most recent distribution, covering a month, 211 unique reddit users earned $DONUTs. I think with a larger community there may be possibility of a significantly higher market cap than the ~150k for r/ethtrader and that opportunities for sybil attacks on the contribution metrics more likely.

One modification I like but was not implemented was to have votes only from a subset of users count towards the contribution score. This could be a manual or voted list or it could be based on earning some threshold level of CONTRIB. I think this offers a layer of protection from sybil attacks. If (content) voting were public then algorithms to detect manipulation might also be developed.


Yes was wary of posting that number, as it’s a bad proxy for activity, but gives a general sense of a sub’s size. Definitely think a larger community could have a higher mcap, especially if its sub’s eyeballs are as valuable as r/ethtrader’s (arguably on the high side).

I see the current banner ad is going for 100,000 DONUTS/day, which at current price is ~$256/day. If that was average, you’d be seeing ~$7,700/mo. Not bad. Have you seen demand for special memberships (badgers, GIFs in comments)? Just bought another month for 5,000 DONUTS (~$12 at current price) just to experiment and give back. But aside from enthusiasts, is there organic demand for the features (admittedly I’m not so excited about such features)?

Btw, looks like my membership purchase has been hanging for a couple mins… image

Presumably because of high gas fees and Reddit waiting to see a payment tx go through. Don’t mind personally, but a regular web 2.0 user might be worried about that.

We implemented something similar for Maker actually. They were seeing brigading on applications for new collateral types (i.e. handful of new accounts would be created that only liked content supporting their coin). Obviously didn’t want to pay shills for this. So we implemented a feature that changed the amount of Cred a like mints (creates) based on Trust levels in Discourse,


This likely isn’t needed as much for other SourceCred plugins, as the Cred score of the person liking, commenting, or otherwise interacting with the contribution will influence how much Cred is flowed, similar to how a high-ranking webpage on Google will confer a higher page rank on other sites it links to. However, we do mint an equal amount of Cred on every like in Discourse, as we found that minting Cred on likes instead of activity (posts/comments) increased the quality of scores (review is good signal).

I’m personally generally wary of hard thresholds, as they can be hard to set properly, and are potentially exclusionary and amenable to collusion attacks (i.e. let’s just set the threshold high enough we can shoot down any competing voices before they have real power). That said, it still seems unclear how to balance this with the legitimate need to create and maintain healthy ingroup/outgroup boundaries. Perhaps it’s just human nature and binaries will win :man_shrugging:

Have my eye on tools for detecting manipulation. Since SourceCred is a graph, there are general tools that address this (e.g. it’s relatively easy to do data viz to detect dramatic changes in the shape of a graph, then investigate). How to make the distinction between malicious gaming and healthy gaming (and it is a fun game), and deciding how bad actors are punished raises yet more interesting open issues around decentralized governance however:/


P.S. After posting last reply, I saw a small notification icon on my MetaMask icon on my browser toolbar (Brave). Of course, it was MetaMask asking me to connect to Reddit and confirm the tx. After I confirmed ($1.72 gas fee), a couple minutes later the membership went through.

I now have my badges:)


Aaaaand, the price of $DONUTS shot up some more while my tx was pening. Membership is now ~$18.71 :roller_coaster: :money_mouth_face:

If DONUTS moon and this becmoes my Bitcion pizza moment, I will be bemused…yes, bemused :sweat_smile:


Hey @s_ben and @cslarson reddit/r/Eth_Man and Maker MakerMan here.

Very cool to see your write-up on DONUTS Ben and carl coming over to contribute.

Some additional info for your case study (a bit old I need to update this).

I have been encouraging other governance systems to adopt carl’s Vote=Min(EconomicToken,GovernanceToken) model because I feel that governance should both require an economic stake of some kind that can trade and a governance token that does not move to be important requirements to measure governance participation (ala what vote).

There are other issues one could talk about but I have found profoundly interesting the idea that as the rewards in these systems stabilize that gaming aspects appear. I was talking to my friend who just lost his job as a politician saying that I think governmental systems appear to have the same issues regarding participants tilting the system towards themselves and gaming the rather unchanging system until literally the actual usefulness and activity of governance itself becomes a useless overgamed, massively tilted arena of activities that no longer serves the intended goals for all the participants.

In this vein the link I posted above some time ago I was doing an analysis of what DONUT governance was doing and discovered how with the above min(D,C) formula governance was basically losing votes due to participants selling their DONUTs. This has implications for the functioning of governance generally based on voting needing to meet or exceed previous thresholds etc. Example from the above is at the time I wrote that voting power of the 80+M Donuts was down to approximately 46M. carl asked for further work to understand some more details of what was going on, but while I am very interested in getting an on-chain analytics group going to generally address on-chain analytics that can be applied universally across different ecosystems I have not connected with a developer to get something going to use to raise additional funds to grow a solid analytical group providing data services to various governance communities or various DeFI projects. (not yet anyway)

One thing I asked in reddit of carl was whether there was a way we could see how DONUT distributions were determined so we could actually propose changes to the distribution model there to be more like what soureCRED was doing. Perhaps in time we will get to something like what $MOONS is doing and maybe even use some variation of sourceCRED methodology as well. We also still via governance need to work up some concepts related to governance utilizing the monetary value of DONUTs to pay for distributions generally, as well as pay developers like carl for upgrades to the system. In the end these systems ideally should have as a goal to become self sustaining, self supporting but since this is highly coupled to reddit there needs to be some level of co-operation between reddit and their subreddit communities. Ideally some of the economic value of $DONUTS should also flow up to them to help cover the support and co-operation needed to improve these systems generally.

One thing I saw you ask ben was whether there was a way to determine if there was cheating in the system. I was watching this show called “Connected” on Netflix where the host talked about use of Benford’s Law in detecting all kinds of ‘fraud’ in all kinds of systems.

Link to the netflix show in case you want to check it out.

Interestingly one lady used this to identify 100’s of russian bots that were spamming either FaceBook or Twitter to create bot networks by taking the accounts that were connected and simply looking at how many likes these were getting and noticing they didn’t follow Benford’s law. Another guys uses Benfords law to determine how many times an image has been compressed and hence whether it is genuine or whether it was likely altered. etc. I only started researching this because it seemed so interesting and from what the show presented it looks like Benford’s law is pretty much a universal law of natural phenomena which is observably broken in a number of ‘un-natural’ types of systems.

As to dealing with sybil attacks it is probably best to use two combined approaches. One is a time based approach and another is a threshold. I have not tried this yet because I don’t have the data to analyze but it would be really awesome to apply Benford’s law to the karma of the people liking a post. It would also be interesting to apply Benford’s law to the source cred data generally. Taking all the posts a person makes and looking at the total number of likes and seeing if they follow the law or not. If we had the user names for the likes we could apply the same methodology to number likes the users that liked a particular post got and asking if that follows the benford statistics or not.

As to collecting data regarding what is going on with $DONUTS if I ever hook up with someone who can pull on-chain data and provide data sets for some of this then I will be able to start producing say weekly or monthly reports. Not just how how distributions are going (we have multiple csvs on that) but also what is going on with the vote over time as well as the banner, special memberships etc.

Haha Ben. Welcome on board the /r/ethtrader special membership train!

I just happened in here from another link and Ben you know how excited I am about the work sourceCRED is doing. I really hope someday the technology is applied to our governments and public enterprise across the board. If you didn’t know about Benford’s law - don’t feel bad. I read a lot and have never heard of it until seeing that Netflix episode.


I am copying some governance information posted in /r/ethtrader that you are welcome to add to your post Ben.

I have worked up another state of governance report based on my previous one. I am still consistency checking so these numbers may change.

20200520 85.3.M 81.6M 46.6M 57.1%
20200808 98.1M 93.3M 42M 45%

As to what wallets are doing:

DATE 0-vote wallets DONUTs in 0-vote wallets wallets with more DONUTS than CONTRIB DONUTS in wallets with D>C
20200520 281 24.1M 55 21.9M
20200808 661 50M 44 8.3M

Interesting fact is the number of new wallets with CONTRIB over this time is only up 4 from 553 to 557 unique registered wallets. Wallets with DONUTS up from 753 to 1091.

We have more wallets now with DONUTS than > 0 CONTRIB.

How many wallets with CONTRIB can vote?

DATE Wallets > 0 vote Wallets with > 0 CONTRIB % voter retention
20200520 473 553 85.5%
20200808 431 557 77.4%
1 Like

Sup Eth/Maker_Man! I’m a little disappointed you’re not @Cred_Man, but still glad to have you :stuck_out_tongue: If you opt in, you’ll start getting some Grain (redeemable for DAI (manually, no Uniswap, yet)). See this announcement on our Discord for deets.

I really like the simplicity and elegance of this. Easy for all participants to understand, which helps with gaming.

This assumes an absolute threshold, not a relative one, right? The threshold could be something like, 30% of the available voting power, which can fluctuate.

Would definitely be curious to see the algorithm. I assume they’re keeping the contribution scores secret, to avoid gaming. In the $MOONS distribution proposal that went up the other day, it says, “You can create a CSV with alternative contribution scores or propose changes to the algorithm used to calculate them from karma (as long as the changes can be implemented easily).” But do you know if they provide raw upvote/downvote, karma data to start with?

Re: what SourceCred is doing, as far as monetary policty (e.g. how much Grain is released each week), for now @decentralion, our TBD (Temporary Benevolent Dictator), basically determines this themselves, with input from the community. We have plans to progressively decentralize this, but have only theorized so far about how that might look. E.g., is Grain distributed in proportion to Cred created in a given week (i.e. as a proxy for work done)? Is Grain distributed by how much is invested via boosting (on roadmap for later this year)? Is it done in order to keep a prudent reserve and smooth out volatility for contributors? All of the above? Lots of open questions and ideas. Following projects like DONUTs closely in part to learn from real word outcomes.

Using min(CONTRIB, DONUT) to vote on issuance, as done for the recent DONUT halvening, seems like a promising solution. The trick, of course, is balancing the interests of contributors and investors. Or, on a macro scale, capitol and labor. I like the simplicity of having a single number. Semi-regular voting on Cred/Grain issuance could be a fair, efficient way for these two parties to negotiate and perform “price discovery”.

Flowing Cred and Grain to dependencies is part of SourceCred’s long-term vision. E.g. in the upcoming beta release, the default is that communities using SourceCred will by default flow 5% of their Cred and Grain to SourceCred. SourceCred is likewise looking to start flowing Cred and Grain to its dependencies, including Discourse, which is OSS.

As far as being tightly coupled with Reddit, that makes me a little nervous…Seems like Reddit could pull the plug on this at any time, for example if legal implications get too onerous for them. In which case, subreddits have the ERC-20 tokens (very valuable), but lack all the infrastructure to, for instance change the banner ad, charge advertisers, etc. Reddit founders seems into the idea of ‘self sovereign communities’, and I belive them. Just don’t trust shareholders of large centralized platforms generally…path to sovereignty is long.

Benford’s law looks very interesting! Will have to check out doc.

If you ever get a decent $DONUT budget, might know a guy;) He’s pretty busy, but analyzing Reddit is his hobby, so might be swayed.


Yes. I can’t remember whether we have a hard or floating governance threshold maybe carl will comment on this. I thought there was some general concern over the loss of voting power and shifting of this. Right now since voting is on-chain governance participation is going to be really expensive due to high on-chain tx costs lately.

carl wrote be back on this. He said he had a script that could collect all the karma from posts so we could try to figure out how reddit is allocating and then we could alter the allocation ourselves. I think this is the first natural step towards governance having full control over how rewards work. What I don’t think we will ever have data on is who is doing the likes/dislikes on karma because I really would like to run a Benford distribution on the secondary accounts karma against all the posts being made and the account owners. I have a sneaking suspicion we would find significant deviations in a large number of accounts from Benford’s law indicating and identifying reddit bots that then could be eliminated from rewards.

Ah yes - as centralized as it gets with the Temporary Benevolent Dictator. One thing I will say is that in the few systems I have been involved in almost everyone of them with a goal of decentralization are highly centralized somewhere. Compount/Maker with highly centralized governance tokens (governance where like 3-10 whales can dictate to rest of community everything by the sheer size of their vote/ownership). Reddit is pretty similar. From cursory examination I see a lot of this across the space. I am not entirely sure how to manage the issue of a vote that has significant value against 1 vote 1 person kind of governance approaches. We are still stuck with seeking to disconnect real people with wallets and having various sybil attacks arise simply because people can break up their total ‘power’ into multiple wallets and have them treated as different people when in reality they are one person. So far there is no real good answer to this problem that retains privacy and anonymity. I consider this one of the hardest problems in the space imo. carl’s vote=min(DONUT,CONTRIB) with CONTRIB being a non-moving token is a very interesting approach to this issue. But bots can create many accounts and still no real way to identify them…

I think the above as an experiment should be interesting. I hope we can get some real community growth so we get some decent data on a growing thriving community vs. one that seems (so far) after the break to be mostly static.

I think this is a good and right vision. Be open to changing that 5% to optimize the effect. Part of what flows up should also find a way to flow back down again to create a nice loop to optimize.

I completely agree that the community not being entirely independant of reddit itself is cause for concern. Literally reddit could take everything away at the drop of a hat and that is bad. We have to hope that reddit sees some value in this kind of growth and might open up to having independent decentralized communities managing their own rewards, banners, special memberships, reddit/account features etc. I think this will require significant retooling in reddit itself to be more open but it may also create significant security issues etc. This is a tough balance and reddit really isn’t designed for a decentralized community model.

It really would be interesting to apply Benford’s model to the sourceCRED datasets