Based on comments by @burrrata, as well as conversations with @s_ben, @tables, and @ianjdarrow, I think it may be time for us to make an ERC20 token that tracks Grain.
This would tremendously simplify the process for contributors selling Grain to receive $. Currently, every transaction requires either:
- Going through OpenCollective + PayPal, which incurs middlemen fees of around ~13%
- Having PL manually send a wire to the contributor, which requires exchange of banking information, and is generally a pain
It would be great if PL could simply publish a smart contract with a DAI budget, and that smart contract allows exchanging Grain for DAI.
However, we are not ready to make Grain a “fully on-chain” asset:
- For ease of iteration with technologies like boosting, and Grain voting, Grain to be off-chain so we can build fast and gas-free UIs
- Managing custody of on-chain assets is a bit like juggling razor blades, and if you drop one you lose all your money
- There’s no way to run SourceCred on-chain anyway, so we’re going to need an oracle no matter what
I propose that we start tracking Grain as two quantities: “Governance Grain” and “Financialized Grain”.
Governance Grain is Grain that is associated with a known identity within SourceCred (e.g. a Discourse user or GitHub account.) Grain starts as governance Grain, since it is paid out to identities based on their cred. Governance Grain is tracked in a public Git repository alongside our Cred (and everyone in the project can audit the state history and verify that Grain is being managed faithfully).
Financialized Grain is Grain that is tracked by an ERC20 token. An identity with Governance Grain can convert their grain into Financialized Grain by publicly authenticating their identity, and requesting that some portion of their Governance Grain be converted to Financialized Grain and sent to a particular address. The holders of Financialized Grain can then use it like any other ERC20, including trading it on decentralized exchanges. The holders of Financialized Grain can also convert it back to Governance Grain by burning the token in a transaction that specifies a SourceCred identity to receive it.
Governance Grain is used for SourceCred’s own governance, e.g. boosting, participating in cred-weighted voting, etc. Financailized Grain is used for exchanges and transfers. Ideally, for tax purposes, contributors would register income not when they receive governance grain, but when they convert their governance grain into financialized grain. Will need to talk to tax lawyers to see if we can work that out.
From a technical / process perspective, there are a number of open questions we’d have to resolve:
- How do we authenticate contributors’ requests to transfer Grain? (We could have a 2fa style thing, where they need to post a Gist form GitHub, a post from Discourse, and/or a verification on Discord.)
- How would we manage the keys to the bot that can mint Financialized Grain? We really need that bot not to get hacked.
- How do we read the Ethereum state to find all of the Financialized->Governance transactions?
I don’t have much experience writing smart contracts, and as you can probably tell from my “razor blades” remark above, I find them kind of scary. So I’d want support from an experienced community (e.g. Aragon) in implementing this system.