CredSperiment System Overview

Disclaimer: This content is outdated.

Please see SourceCred in 5 minutes for the latest overview of the CredSperiment.

This post describes the initial design of the CredSperiment, as envisioned in August 2019. Since then, the system has changed materially. Please view this document as a piece of history in SourceCred’s evolution, but not an up-to-date view of how SourceCred operates.

The CredSperiment creates a game in which people are rewarded for contributing to SourceCred, based on SourceCred’s own scores. It revolves around quantities (Cred, Grain, and Dollars) and flows between quantities (Donating, Earning, and Boosting).

This document gives an overview of these quantities and relationships. The goal is to define the general shape of the system and its information/incentive flows.

Quantities: Cred & Grain

Cred

Cred is a score which represents how much one has contributed to the project. Every contributor to the project has an associated cred score. The cred score can (and will) fluctuate in both directions; a contributor’s cred might increase (because their contributions have been adding a lot of value) or might decrease (because their contributions are going stale, or being re-assessed downwards).

Cred is not transferrable between identities, and never will be.

Grain

Grain is a point accumulator that represents how much one has supported the project. One can earn grain based on their cred cred, or by contributing to the project financially. Unlike cred, grain does not dynamically recompute. It’s more like a currency or token, in once one receives grain, its theirs until they spend it. However, unlike a currency or token, grain is not transferrable, and is not exchangeable for money.

We might someday make a token influenced by grain (see grain), but that’s speculative at this point.

Flows: Donating, Earning, and Boosting

Donating: Dollars → Grain

Anyone can receive grain by donating money to SourceCred. The system is simple: for every dollar contributed to SourceCred via our opencollective instance, the patron will receive one grain. This reflects the fact that grain represents “proof of support”, and financial support is valued!

Note that you cannot convert grain back to dollars. Also, the amount of grain you earn per dollar donated might change in the future. (Also, we might make the dollar-grain ratio different than 1, e.g. 100 grain per dollar, to make the numbers feel larger.)

Earning: Cred → Dollars OR Grain

A dollar-grain represents the option to receive one dollar (thus getting paid for your contributions) or one grain (thus supporting the project, by choosing to work for free).

Every week, we will decide a dollar-grain payout amount. For the short term, I expect the dollar-grain payout amount to be fixed each week, although later we may make it based on the total amount of cred created that week.

That dollar week payout amount will be split between all contributors based on their cred score. For example, if the dollar-grain payout amount is 1000, and you had 15% of the total cred, you would receive a dollar-grain payout of 150.

If contributors decide to take the dollar payout, it will be paid to them via OpenCollective; otherwise it will be added to their Grain balance. To simplify the project’s cash graingement, dollar-grain will convert to grain by default after a month or so.

Boosting: Grain → Cred

Supporters can spend grain by using it to ‘boost’ a contribution. Boost as in signal boost–a booster brings more attention and cred to a particular contribution.

When a contribution is boosted, two things happen:

  • New cred is minted, which flows to that contribution (and from there to its author, its dependencies and references, and so forth).
  • Subsequently, a new connection is made in the graph, connecting the contribution to the person that boosted it

It makes sense that boosting results in new cred minting; the booster is sending an expensive (and therefore trustworthy) signal that the contribution is valuable. It might seem more surprising that the booster gets connected to the cred graph.

Consider that the booster is actually doing a service to the project: they are investing the time and energy to discover which content/contributions are really important, and they are spending their own resource to send that signal. Since they are doing work, they deserve some cred. How much cred? That depends on whether the content they boosted was actually important.

This is why we create an edge between the boosted content and the booster. If the contribution goes on to earn more cred in the future, then the booster may make a lot of cred. Thus, boosting acts as a prediction market on the future cred of a contribution. If someone finds an important contribution that currently receives little cred, they stand to benefit by boosting it to broader attention, since as it gets re-valued upwards, the booster will gain cred (and therefore, more grain).

Supporters can also use boosting to guide the project to focus on their priorities. For example, if I want to see a feature added, I can promise to boost every PR that makes progress towards the feature. (In the future, we’ll have a way to boost bugfixes or feature requests directly.)

An early version of boosting might focus on discourse posts, essentially creating “reddit gold” for SourceCred. We could do things like pin boosted topics for the next week, and/or create a weekly curated newsletter containing all the boosted posts.

When multiple people boost content, the later boosters will get less cred from the content than the early boosters, creating an incentive to boost early. Bandwagoners get less cred for their grain.

Some open questions

What cred scores do we use for the purpose of issuing grain-dollars?

Use scores for that week

We could use the “instantaneous cred” computed each week. This is nice because it gives a very clear connection between the work someone did and the grain they earned. Short feedback cycles are nice, especially for giving humans a sense of accomplishment and agency. However, it may be too short-term biased (should we keep paying grain for old-but-valuable contributions?) and it may take time before we have an accurate assessment of the value of recent contributions. (Note that SourceCred already has an exponential time decay built in, so “cred for this week” really means “cred from mostly this week, with a smear of cred from other recent weeks”

Use scores for an older week

We could pay out for cred with a fixed time decay, e.g. this week we pay out for cred earned 2 weeks ago. This gives a bit of extra time for us to figure out what contributions are worth.

Payout towards lifetime cred

We calculate each contributor’s lifetime cred (i.e. how much cred they earned across all weeks) and their lifetime cred. Then, if their lifetime cred is higher than their lifetime payout, they earn a fraction of the difference. This had the advantage that it allows for retroactive changes in the cred of old contributions, and also adds a material time-delay factor (implicit ‘vesting’).

Notes

My inclination on this question is to use a mixture of paying based on the most recent week, and paying towards lifetime cred. This ensures that there’s always a positive feedback cycle for recent contributions, but that the long-term payout converges to long-term cred earned, smoothing over timing details. This gives us flexibility to launch large retroactive changes to the algorithm or to cred normalization.

How fast to issue Grain (/ Grain-Dollars)?

The rate at which we issue Grain-Dollars is limited by the size of the treasury, since we shouldn’t issue more Grain-Dollars than we have dollars to back it. However, we don’t have such a limitation on issuing Grain directly. However, I’d prefer to only issue Grain-Dollars (and not raw Grain), as that makes the value of an Grain more clear: every Grain in circulation represented either one dollar contributed to the project, or one dollar of potential payment that was declined.

Nonetheless, we still have flexibility in deciding how much Grain to issue. Suppose that we learn through experience that 1/k of the dollar-grain is converted to dollars, and the rest goes to grain. And we have a flow of d dollars coming in per week from donations. Then we could afford to pay up to k*d dollar-grain every week without experiencing negative cash flow. Or, SourceCred could pay less than that, and build up a treasury.

Rather than issuing a fixed amount of dollar-grain every period, I’d rather have it be based on the total cred created. That way, rather than contributors competing to split up a fixed reward every week, they are cooperating to grow it.

How much cred-per-grain when boosting?

Boosting converts grain into cred. And per discussion above, cred may generate more grain. Clearly, we are setting up a feedback cycle here. If we tune it poorly, there will be exponential runaway growth in the amount of cred and grain, and it ruin the value of the system. So we can’t set cred-per-grain too high. However, if we set cred-per-grain very low, then there won’t be much of a reason to use boosting. So we’ll need to find a good balance here.

Implementing boosting will be a fair bit of technical work, so we’ll have time to reason through this.

[edit note: I replaced instances of “mana” with “grain”. See here for context]

1 Like

Exciting to see some ideas take shape. A few thoughts:

The contributors can choose to get paid in dollars, or they can ‘re-contribute’ their earnings back to SourceCred, in which case they are acting as supporters as well as contributors, and they receive mana instead.

As a contributor, I think I’d only do this if there was a possibility to obtain returns.

Closing the loop, supporters will be able to use mana to “boost” contributions, creating new cred. This means that supporters can use their mana to guide attention within the project. Supporters can even earn cred if they are wise with their boosts.

The mechanism of using mana to guide attention/work by boosting seems like the best way for investors and contributors to communicate/transact. Part of me is wary of a single party (say a large corp) coming in and just taking over, turning contributors into de facto employees, where those not doing their bidding get their cred diluted to near zero. But I imagine competition in most bigger projects, driving diversity of ideas and spreading cred/dollars around.

Cred is not transferrable between identities, and never will be.

…However, unlike a currency or token, mana is not transferrable, and is not exchangeable for money.

I’m not sure this is enforceable. While the project is small and not much money is involved, I don’t think it’s a problem. But one only needs look at Twitter (which likewise has a ToS forbidding exchanging accounts for money), to see the enforcement problems. There’s already a burgeoning market for selling Twitter accounts, as well as sponsored tweets, many of which don’t have the required #spon tag disclosing sponsorship.

Note that you cannot convert mana back to dollars. Also, the amount of mana you earn per dollar donated might change in the future. (Also, we might make the dollar-mana ratio different than 1, e.g. 100 mana per dollar, to make the numbers feel larger.)

This is a big variable. As an “investor”, I want some assurances of the “purchasing power” of my mana in the future, no? I know there are discussions about diluting mana over time to address issues, but I imagine people putting dollars into the project will want more clarity before they invest.

Supporters can also use boosting to guide the project to focus on their priorities. For example, if I want to see a feature added, I can promise to boost every PR that makes progress towards the feature. (In the future, we’ll have a way to boost bugfixes or feature requests directly.) An early version of boosting might focus on discourse posts, essentially creating “reddit gold” for SourceCred. We could do things like pin boosted topics for the next week, and/or create a weekly curated newsletter containing all the boosted posts.

As a cautionary tale, the r/ethtrader subreddit that is experimenting with basically this (turning reddit gold/karma into a token called donuts that is currently being monetized (e.g. you can set the subreddit banner)). Fascinating ongoing experiment, but it did recently devolve into a moderator “purge”, causing a “fork” in the community, with a sizable chunk of the community moving to a new non-monetized subreddit,

https://www.reddit.com/r/ethtrader/comments/cs84ar/6_of_10_moderators_are_leaving_ethtrader_a/?utm_source=share&utm_medium=ios_app

Could be a good project to follow and learn from. They have product support from Reddit apparently, and are trying this for real. But also probably some good lessons to be had in governance and expectation management. People will get upset if they invest significantly in SourceCred and have it change too dramatically on them.

When multiple people boost content, the later boosters will get less cred from the content than the early boosters, creating an incentive to boost early. Bandwagoners get less cred for their mana.

Will this not inhibit the boosting of valuable contributions after the fact, once they’ve revealed themselves as valuable? I see this is an open issue in other posts, but it strikes me as a tricky problem to solve.

However, I’d prefer to only issue Mana-Dollars (and not raw Mana), as that makes the value of an Mana more clear: every Mana in circulation represented either one dollar contributed to the project, or one dollar of potential payment that was declined.

Agree. Sound mana!

Nonetheless, we still have flexibility in deciding how much Mana to issue. Suppose that we learn through experience that 1/k of the dollar-mana is converted to dollars, and the rest goes to mana. And we have a flow of d dollars coming in per week from donations. Then we could afford to pay up to k*d dollar-mana every week without experiencing negative cash flow. Or, SourceCred could pay less than that, and build up a treasury.

This is contingent on the earlier (tentative) decision to only allow contributors to convert their dollar-mana to dollars in a certain time window (e.g. 1 month following distribution), before it is converted to regular mana, which cannot be converted. Otherwise, the treasury could build up liabilities in the form of mana, possibly resulting in a “run on the bank” should contributors decide to cash out at once. It could also result in a situation where people let mana build up, leave the project, and are then offered money to boost contributions.

Rather than issuing a fixed amount of dollar-mana every period, I’d rather have it be based on the total cred created. That way, rather than contributors competing to split up a fixed reward every week, they are cooperating to grow it.

Agree with this. It’s also the general consensus I’ve picked up from earlier discussions around this.

Boosting converts mana into cred. And per discussion above, cred may generate more mana. Clearly, we are setting up a feedback cycle here. If we tune it poorly, there will be exponential runaway growth in the amount of cred and mana, and it ruin the value of the system.

I mean, if SourceCred mana mooned and I made a ton of money for my thot leadership on discourse, I’d be okay with that:) But it’s not sustainable, true, and I want that more.

So we can’t set cred-per-mana too high. However, if we set cred-per-mana very low, then there won’t be much of a reason to use boosting. So we’ll need to find a good balance here.

This strikes me as an important enough parameter that it might need to be decided eventually by governance or free market pricing.

Impressions

Seems like a smart design. It also introduces some new structures and unknowns though, which will need to be figured out. For instance how to set variables such as cred distributed per week, mana/cred ratio, etc., seems important. For now we can just play with different values, but eventually these seem important enough drivers of the system that either governance, free market pricing, or both may be needed.

Psyched to play:)

2 Likes

This is so cool

also lit af, but rather than “promising” is there a way to stake to make it real?

Could you please? I’m really really excited about SourceCred, but with everything else on my plate it’s hard to keep up. A weekly synopsis would be awesome

Some Open Questions

:100:

This is my biggest disappointment with the SourceCred project so far, I feel like all my comments/contributions are just lost in the shuffle of the endless brainstorm. It would be nice to have a clear way to represent contributions and recognize them immediately to provide a little positive boost for contributing

Too long. After 2 weeks I’ve completely forgotten about everything and am on to something else. With the pace of innovation in the blockchain space and just the overwhelming nature of life immediate feedback is more fun and rewarding because the connection between action and reward is concrete

Overall that sounds reasonable, but be aware… people hate retroactive loss. On an emotional level humans weight loss WAY more than they weight gains. Even though the system you describe here is rational, it’s not going to appeal to the subconscious biases of contributors and will discourage contributions. No one likes having things taken from them, and no one wants to contribute if they know that in the future they might have their rewards taken from them

The concept of mana vs mana-dollars is confusing. Pick one or name them something different. It needs to be easy and fun

Same. Having governance weight might also be appealing, but yeah there needs to be a selfish reason to take an action

+1 to that

Same. I’m comfortable with market prices shifting, but the idea of an algorithm or core team that manages an algorithm changing things that affect my money really pisses me off lol

  • not saying that’s super rational or idea, but it is my gut reaction and that’s important to take into consideration

I’ve been involved in this experiment on an off for the past year so hmu if you have any questions/thoughts/ideas! :slight_smile:

:100:

Yeah I agree. This mechanism seems less than ideal and could lead to cramming before a deadline or discounting valuable contributions that are placed at the wrong time. Ideally it would be fluid and ongoing vs based on rigid time cycles (for example just look at how students behave during an academic year or corporations during a quarter)

+1

Ditto!

1 Like

Have talked to @decentralion about taking this on. My plate is full for the next few days with other commitments, but it’s on my TODO list to revisit.

This is my biggest disappointment with the SourceCred project so far, I feel like all my comments/contributions are just lost in the shuffle of the endless brainstorm. It would be nice to have a clear way to represent contributions and recognize them immediately to provide a little positive boost for contributing

Feeling this as well. Having a blast brainstorming, but that’s an expensive habbit, and have to keep that in check. Looking forward to the game starting next month with the discourse plugin integrated. Even though it’s not going to be a lot of money, that feedback signal, playing for real, will be engaging and I suspect incentivizing.

1 Like

The struggle is real. A newsletter and/or synopsis type thing would really help though. What are your thoughts around that?

I’m thinking just a breezy weekly or monthly roundup of the latest developments. New features merged, decisions made, highlights (e.g. SourceCred getting mentioned on the Unconfirmed podcast), etc.

2 Likes

This is an interesting design. I’ working on Relevant and have spent a bit of time thinking about pagerank + token mechanisms for content, so it’s cool to explore these in the context of OS/git.

In particular I’m very intrigued by how boosting could work in conjunction with personalized pagerank. If we want this mechanism to be Sybil-resistant, we’ll want to use personalized pagerank (I think @mzargham mentioned it in a separate thread). And there is actually a way to combine this with a paid-for boost by designating a ‘paid-for’ seed node. What is pretty cool is that you can actually set the relative weight of this node in relation to other seed nodes. In effect, you can define the impact Mana (or $) can have on cred. So you can say 10% comes from the paid node and the rest from other trusted nodes (like repo admins). This way there is a clear delineation between money power and cred power and less opportunity for a well-funded entity to take over.

Re: Giving Cred to the booster. Although the above personalization design can help with the Mana -> Cred feedback loop, I still think this is not a great idea. My intuition is that you will always be stuck between not giving enough Cred to provide enough prediction-market-like incentives and a self-fulfilling feedback loop (although if the intent is to simply give a little bit of Cred to investors it’s probably fine).

If you want betting-like incentives, a better way might be to allocate some % of Mana payout to the prediction game and have it go to the top-cred commits of the week (or whatever) that were boosted. This is what we do at Relevant for social content, but not sure you even need this prediction market type thing in the OS Repo assuming there are people willing to pay for bumping up features.

1 Like

@balasan I have been thinking about these feedback loops in @decentralion’s design and I made a rough cut at drawing them. Still working on more detailed feedback, but I’d like to get a round of feedback on whether this diagram is a useful reflection of the design.

The Pink diamonds and associated boxes represent the activities of the participants in the community. Any actor could be interacting through any or all of these touch points. @decentralion is essentially doing all of these roles, and the rest of us are doing at least “contributing” just by participating in this discussion. Yellow is the conserved flow of fiat, Blue is the conserved flow of Mana, and Green is the conserved flow of cred. By saying conserved I do not mean that these things cannot be created, merely that there are well defined rules about how they enter or leave “the system” and this map represents those structurally without getting into the details of the algorithms themselves.

At first glance it feels pretty good. Outstanding questions are really around what types of conversion rates for the various forms of value would help keep the system’s incentives aligned. I suspect this will require a lot of internal iterations; what can (or should) we learn in each of the ‘trust’ phases of SourceCred’s community (see Dogfooding SourceCred via OpenCollective for phases).

I am also very curious about how and to what extent the boosting based system will actually “curate” contributions. In the early CredSperiment this won’t be particularly apparent because we don’t yet have a enough unique contributors to see how the boosts entice them. Once more contributors come in, it will be interesting to see if they will be able to identify and gravitate towards the parts of the contribution graph with the most boosts.

5 Likes

This is so cool! If I could I would boost a bounty for you (or someone) to create a new thread with this diagram and a post explaining the entire mechanism in detail. It really makes a lot more sense when it’s laid out visually :slight_smile:

2 Likes

found it through searching for boosting! :slight_smile: Is there an update on this?

The diagram is definitely not totally up to date but its still not very far off, an updated version of this diagram with details regarding the current designs would make it relative straightforward to build a simple cadCAD model (building off of @burrrata’s cred castle toy model).

The system would be a lot like the network formation games described here:

but also adding the mechanism for boosting.
1 Like

Errata:

  • Mana is deprecated, but maps to “grain”
  • in “donate” the fiat to grain is a fixed rate
  • [not pictured] having cred results in grain according two drips, one slow and one fast
  • “claim reward” is cashing out grain for fiat, also at a fixed rate

there may be more but i figured i’d throw this here to avoid confusion prior to new diagrams.

1 Like