Make Donuts Decentralized Again! ๐ฉ
Donuts were meant to be decentralized. A true donuts is open and transparent to it's core. Currently though, it feels more and more like we've been talking about donuts, but really just been dealing with donutholes. It doesn't have to be that way...
โ
We come from humble beginnings, a ragtag group who believed that by combining flour, sugar, and oil in new ways we could create something revolutionary: not just bread, not just cake, but something more... something delicious. After trying time and time again we finally got it. Donuts! But we've lost our way, we've starting fighting over the holes rather than remembering where we came from: the dream of decentralization.
โ
I propose that we change this. We have the technology, we have the will, let's make donuts decentralized again! In this thread we can propose the values, features, and applications we want for our donuts. We can talk about donuts with sprinkles, glaze, and jam. We can do whatever we want... we are free. So please, share your ideas, share your desires. What do you want in a decentralized donut protocol?
Posted Jan 25, 2019, 12:43 AM UTC ยท edited
One take on a rough outline for how a more decentralised Donut system would work can come from the approach taken with r/recdao.
Obviously this just covers the how the mechanism around distribution could work. I would be very interested to here alternative suggestions or improvements! A working implementation of the above actually already exists. Though I would need to dust it off a bit! And it could do with some other eyes on it.
One issue with the above is that a user who has not submitted/linked an ethereum address could of course not take custody of their allocation because they would not be included in the merkle tree and thus have valid, authenticatable data there. There perhaps needs to be a way for users who missed creating this link to still receive their back-allocation once they do.
Also, interfacing with Reddit is a major issue. With much of the above there were off-reddit sites to accomplish tasks like voting and registration. And a browser plugin modified the Reddit interface to do some of the interesting things you could do (on-chain upvote content, stake to remove content, tip) but of course a browser plugin hack like this is not a great interface. Anyway, leaving that issue aside for now and just focusing on how to best implement the dao and distribution in the most efficient and decentralised way possible is I think worthwhile.
Bonus on-main-chain tx costs may limit participation in polls, particularly governance polls and the above model needs these for each to accept each distribution. Is it worth exploring a side chain for this? The parity erc20 bridge? A donut dpos side-chain?
YES. I really really liked that system because it's completely independent of the web2 platform you're mirroring and people have an option to challenge the data if they find a discrepancy.
- With staking added you could incentivize people to look for incorrect information and get rewards for doing so, but if someone tries to cheat and that can be proven then they get slashed :)
- You might also be able to add a zero knowledge proof that verifies that the computation was performed in the correct manner as well, although that would be require research and computation to setup and get right. Maybe a stretch goal lol
โ
Could this be in a TCR or some kind of public database where people can verify that the data is correct and then vote to approve/challenge it accordingly?
That still puts all the power in the hands of the Reddit mods and the Reddit platform in how they choose to allocate donuts. What about a completely decentralized model where the participants of the system can also vote on the mechanism that allocates donuts? The crawler/oracle sends the raw data to the donut allocation contract, but people decide the rules on how that contract allocates donuts based on the data it receives. Could be an "upgradable" contract or just a pointer that can be modified. I think you also get voting and upgradable runtime by default on Substrate so maybe it would work as a sidechain too rather than just a contract/dApp.
So rather than sending ALL the data to the contract you just send a root hash that people can check against? And is the voting to approve the new data that goes into the allocation contract to disperse tokens accordingly, or is it to vote on how those tokens are allocated? Sorry, just a little confused with this part
โ
Yes. I think opt in is much more empowering and low maintenance than opt out. When people opt in it sends a much stronger signal than just going with the default :)
โ
Shall we give it a test run here on r/donuttrader? lol
โ
I agree. Once we get a working mechanism to link web2 data to the web3 world, then we can start to play with more interesting cryptoeconomic mechanisms and things like subreddits that mirror the decisions of an onchain dApp vs Reddit poles/mods :)
โ
You thinking plasma, a Substrate chain, or something else entirely? I'm quite partial to Rust so I would LOVE to roll a Substrate chain, esp because then you get voting and wallets and light clients built in (although you don't get the pooled security of Polkadot yet). That might make more interesting cryptoeconomic games difficult and also limit participation by the broader Ethereum community. What are you thinking?
Can you describe this more? Where in particular are the stakers providing input?
My knowledge of zkp is very limited so we'd need a mentor or another dev to come in an advise if they zkp could benefit here.
Yes, very interesting. There are some TCR systems already available. I wonder if they would work. Also, can you describe more specifically how and what and when things go into the TCR.
Yes, I don't think I described completely enough. Reddit can provide weekly metrics. These are externally verifiable, though perhaps not all are. Or yes, these could perhaps also be independently provided. (Maybe you mean a system more generic than Reddit?) There is an existing decided algorithm that consumes these metrics and spits out the distribution (and merkle tree). How the distribution breaks down comes from the contract (voted on) but then is applied to the list to get the actual distribution (and verifiable merkle root).
Yes, it's quite efficient to do it like this. props to u/heliumcraft who taught me about it!
Both. A vote would be needed to change the distribution algorithm (say changing mod allocation from 8% to 9%). And also each distribution period (new merkle root) would need to be accepted with a vote.
I'm not so familiar with substrate so can't really comment on how applicable it would be here. In the past I had looked at the ERC-20 bridge that I believe parity did a lot of the work on but is now also worked on by POA network (?). Anyway this article describes mechanics around that. It could be built on a sidechain others are also using, or on it's own sidechain (with donut validators!) This would help remove the limiting factor that tx costs cause to participation (less people voting in each weekly poll to accept a new merkle root would be pretty boring let alone needing to pay for the privilege).
Here's a few ideas on how staking can be used to get accurate information from web2 to web3 systems...
โ
Simple Staking For Oracle Validators:
- to be a staker you have to have a minimum balance necessary for staking
- you can then choose to be added to a validator pool
- every block a validator (or set of validators) is chosen from the validator pool (via collective coin flipping or some other randomness mechanism)
- for this block the validator's job is to run the web crawler code and submit the results to the minting contract along with a timestamp
- everyone has access to the web crawler code as well as the raw data that the validator submitted at X time
- if the validator submits correct data, they get a reward
- if the validator is challenged and proved to be submitting incorrect data, their stake is slashed and a new validator is chosen to submit that block
With this mechanism we have a decntralized "data feed" from an arbitrary web2 platform to a web3 contract that functions under the assumption that the majority of validators are honest. If they are not, then the system will fail.
โ
Staked TCR / Prediction Market As An Oracle:
- rather than having a validator set, simply have a TCR where on a regular interval people can submit data from the web2 platform, but in order to submit data you have to do so along with a stake
- people can add stake to the original proposer's stake
- if people stake that the data looks accurate, and the majority agrees with them, they get a reward equal to the original amount staked
- if people stake that the data looks false, and the majority agrees with them, they get the original amount staked
- this way you get the same rewards either way and are incentivized to go with what you think most people will do, which in an honest majority, probably works out
These require active engagement to maintain the system, but I guess my solution to require voting on merkle roots also does... Interesting, though. Perhaps if it was a dpos or whatever based sidechain (donut chain validators) then they could do double duty here.
Here's a few ideas on how to act on data in a web3 setting (assuming that we have an oracle/data feed in place). This could involve voting on stuff like banners, changing staking levels, or even consensus changes like how tokens are allocated based on input data.
โ
TCR For Voting: (separate from the validator/oracle TCR)
- Anyone can submit proposals, however they must stake some tokens to that proposal (signalling that they think it's a high value idea like people do submitting predictions to Numerai)
- quick overview of Numerai's model: https://medium.com/numerai/numerais-master-plan-1a00f133dba9
- the community can then also stake onto proposals
- after a staking/voting period, the proposal with the most stake is passed
- if the proposal fails the submitter's stake is burned and given to anyone who staked against them
- if the proposal succeeds, the submitter receives their stake back
This incentivizes people to only propose things they genuinely care about enough to put some skin in the game, however, there's no upside if something passes other than having it go through. This means that the reward of proposing something is that it goes through, but the consequence of spamming is having your stake slashed. There can also be a minimum threshold where if < X% of the total population does not vote then the proposal is considered invalid and the proposer's stake is still slashed for proposing something no one cares about. Since tokens are going to be minted and allocated often, they're not "scarce" like Bitcoin and are meant to be used and burned.
this is perhaps a little harsh. i think it's not quite the right mechanism for the actual vote, but i think this is actually really close to what daostack does with boosting. worth looking into their system as it could potentially be leveraged here. with recdao i believe i had the submitter (for a gov poll) also submit like 1000 tokens and they were lost if the proposal failed. i think props needed 2/3 or something. yes, that's right.
Can you please explain this a little more and/or link to the mechanism that does this so I can understand it better? I know it's common thing, and it's been proven to work, but I really want to know exactly what you're describing beyond a vague notion in my imagination.
No worries! Scripts I used are all here. I will try to walk through it.
Is this assuming that the votes would be made on Reddit and the result then sent to the web3 contract as a merkle root?
The votes could be on chain. Anybody could submit the merkle root (along with a stake deposit like any other gov vote). The vote is for the merkle root to be accepted by the dao. Once it is accepted then people can submit their tx (with their data and proof supplied to them via the dapp ui) and they are allocated their tokens (as long as they don't cheat).
Regarding TCRs, apparently someone built one on via Substrate. Maybe that could be used as a state machine that keeps track of the data feed from Reddit bots/users? Each "block" is a new period where data is submitted, and people can vote/stake on that block within a challenge window.
- https://twitter.com/gautamdhameja/status/1088457165549883394?s=09
- https://www.reddit.com/r/dot/comments/aje0df/token_curated_registry_built_on_substrate/
โ
TBH you could also probably do this with a Plasma chain right?
- is there a minimal viable plasma spec that's actually being used in the wild?
u/bornswift, any feedback you could provide on this would be welcome. Or alternative models?
Thanks for involving me in these discussions. I think the goal of complete decentralization makes a lot of sense in the long term, but we should also be mindful that any step in this direction, even small ones, will be impactful. Having a little centralization provides a dramatically better user experience, preventing the need to have each user run a custom client. Introducing some checks and balances into the design will likely be the best path forward in the short-term. For complete decentralization, all data will have to exist on the blockchain/decentralized-datastore as the source of truth with Reddit acting as a client to view this data. I imagine this will take a lot of re-engineering in Reddit to use this instead of it's centralized database as the source of truth. For now, we can assume that a little centralization is okay as long as it's auditable and we can easily mitigate abuse of the authority. As an example, Reddit can publish a list of active moderators to a smart contact daily. Any of the moderators then have the power to migrate necessary data on-chain (ie. update token balances). If a moderator misbehaves, the other mods can vote to amend the state. Mods can be replaced using poll voting or less technical solutions (ie. community outrage). If there was the ability to "fork" the subreddit, it would further encourage good behavior from the mods. I think your idea of creating an ethereum side-chain makes a lot of sense for these types of applications. My team and I have put together a solution in Azure that makes it easy to set these networks up. You can get a free Azure trial account to try it out.
Yeah I can't really speak to the Reddit end - when I worked on this before with r/recdao project I had multiple interfaces, but much tried to rely on a custom browser plugin to augment the Reddit UI. Other parts, though, were reasonable enough to have off-reddit.
How does this integrate with Reddit donuts? Is this a replacement for Reddit donuts... donuts that are purely on-chain?
Yes, this approach would replace the existing donuts system.
I think participation rates are going to be very low if it's not integrated into Reddit.