A grain allocation policy is a procedure for determining how much grain should be given to each contributor, given as inputs the current cred distribution-over-time and the history of past grain allocations. We currently have an “immediate” policy that considers only recent weeks, to quickly reward good work on the project, as well as a “balanced” policy that pays greater amounts to people who are “underpaid”. A person is underpaid if the share of grain that they’ve been paid is less than their current share of cred.
@decentralion and I noted in a discussion that our current “balanced” policy has the property that if cred inflation matches or outpaces grain inflation, the balanced policy actually turns into another short-term policy. In particular, old contributions may not receive any grain, because although new grain is being minted and thus the old contributions are being proportionally underpaid, they’re drowned out by all the new contributions.*
We think that this property is undesirable. If someone makes a valuable contribution early on, and that contribution continues to provide value to the project for years to come, the contributor should continue to earn grain for that contribution.
Furthermore, after significant changes to the weights or graph structure that cause there to be a high concentration of underpaid nodes, the current system will send approximately all payments to those nodes. This is problematic for anyone relying on income streams, which may halt until the distributions have a chance to catch up.
We discussed the idea of a more balanced “balanced” policy that pays people in proportion to how much they’ve been underpaid, as long as this proportion doesn’t veer too far from their current total cred. I commented that I think that this can be done without too much difficulty, with a pointwise correction for overpayment (through some non-linear activation; a sigmoid probably works nicely) followed by normalization.
I’ve now sketched this out. Here’s an interactive notebook: https://observablehq.com/@wchargin/balanced-distribution-sketch
Here’s a screenshot:
A key difference between this policy and the current implementation of the “balanced” policy is that this policy is continuous in both the effect size and the underpayment amounts, whereas the current “balanced” policy has a threshold past which all payments are just zero.
* Note: I haven’t carefully worked out the exact dynamics and necessary conditions here, but this seemed plausible to both of us on the call.
Disclaimer: With the current values of SourceCred on SourceCred, such a policy change would probably benefit me (@wchargin) personally. But, as discussed above, our motivations for this change are not self-serving.