r/daonuts•
burrrata

Daonut Design Flavors

A place to submit and discuss designs for the daonut protocol.

Posted Feb 4, 2019, 8:37 PM UTC

854
burrrataOP•

Daonut Protocol Design #0.1

  • identifying the moving parts

We want the protocol to be connected to Reddit because Reddit has users, engagement, and 0 onboarding costs. This means we need to create a way to keep the native feel and functionality of Reddit, while augmenting it with the capabilities that a web3 platform like Ethereum provides.

One way this might look is a system where users post, comment, and upvote on a Subreddit as usual. A set of oracles would send data to a DAO on Ethereum, and then that DAO would allocate doanuts to users who have linked their reddit usernames to an Ethereum account. Those users would then be able to use daonuts to vote on proposals that are managed and maintained on a website (http://daonuts.org/ ?) that has a UI that interfaces with the Ethereum contracts. These contracts could be as complicated or simple as desired. The mods of the Subreddit then only have 1 job, to enact the outcomes of the Ethereum contract votes on the subreddit. This requires a few things:

  • a protocol to get data from web2 (the subreddit) to web3 (the Ethereum contracts) and verify/enforce it's authenticity
  • a protocol to link Reddit usernames to Ethereum accounts and verify that with the Ethereum contracts via the above protocol
  • a way to hold mods accountable to enact the outcomes of the Ethereum contracts

A few proposed solutions:

  • To build a "data bridge" between web2/web3 a set of "Data Validators" (bots like the ones from RECDAO) are created where each bot has an Ethereum account. At each "block" / state transition all the Data Validators run the bot algorithm, but only 1 Data Validator is randomly chosen to send that data to an Ethereum contract. The rest of the Data Validators then verify that the data sent is accurate and submit yay or nay signals. If so the submitter is deemed to be honest they get a small reward, but if not they get slashed. This works if > 50% of Data Validators are honest. This way anyone who wants can spin up a bot and stake a small amount of ETH to become a Data Validator.

  • Once the data bridge is built, it's easy to verify users. A user creates an Ethereum account with ETH. Then the user sends a small amount of ETH along with a random blurb of data to a "registration contract" that has 3 lists, pending confirmed, and spam accounts. On every block/state transition period Data Validators check the registration contract for pending accounts and then check to see if any usernames in the subreddit have posted the same data. If so, the account is marked as verified, and if not it is removed from the pending validators set to prevent someone else from registering it. If multiple accounts are found that published the same random data, the first one to publish is verified and the rest are marked as spam. This requires that the blocks are fast so that someone doesn't take someone elses identity.

  • After linking their username with an Ethereum account mods can choose to stake some Eth to become a mod and enact the outcomes of Ethereum contract votes. Mods != Data Validators, because if mods do not do their job the data validators will slash their stakes.

8
Peng_Fei•

My only issue with the website is, it's adding an extra barrier to governance. I don't see it necessary to go about it in this way. We could leave the governance on Reddit.

5
burrrataOP•

Does Reddit allow you to quickly try out new things like staking token-lock periods before and after votes, quadratic voting mechisms, or any other cryptoeconomic mechanisms we dream up and want to test?

2
Peng_Fei•

I mean, all of that sounds neat in principle. But if you want maximum results, leaving the governance to Reddit would be best. You would be requiring people to visit an entirely different website, just to vote.

4
burrrataOP•

Agreed, but it's a tradeoff: maximum results now that are limited by Reddit's functionality, or creating a fully on-chain voting process that the community can control as they wish. Maybe it makes sense to start with just simple voting that Reddit allows and move towards a more decentralized model, but frankly if someone's going to go to the trouble of linking a Reddit username with a wallet and they're going to manage their tokens in that wallet, they're also going to be able to go to a site to submit their votes. The intersting part of this project is that it's NOT the polling process on Reddit, but a new version that allows for more interesting cryptoeconomic games. I think we should embrace that.

2
carlslarson•

Those users would then be able to use daonuts to vote on proposals that are managed and maintained on a website

Why not use the polling functionality within Reddit?

To build a "data bridge" between web2/web3 a set of "Data Validators"

Are the data validators the oracles submitting to the smart contract? (do we call this the oracle model?) So one is chosen to submit data then is that data is essentially voted in by the other validators? If I understand this right I wonder if it's right to think of it as a formalising the "social" validation I proposed. The social validation is replaced with the oracles/validators. In the recdao model the new data is accepted by the dao from a vote, so implicitly accepted if a user doesn't vote, or explicitly accepted for those that do. Whereas in the oracle model we "trust" the validators to do their job and not cheat. How many validators would be needed?

2
burrrataOP•

Why not use the polling functionality within Reddit?

Does Reddit allow you to quickly try out new things like staking token-lock periods before and after votes, quadratic voting mechisms, or any other cryptoeconomic mechanisms we dream up and want to test?

Are the data validators the oracles submitting to the smart contract? (do we call this the oracle model?) So one is chosen to submit data then is that data is essentially voted in by the other validators? If I understand this right I wonder if it's right to think of it as a formalising the "social" validation I proposed. The social validation is replaced with the oracles/validators. In the recdao model the new data is accepted by the dao from a vote, so implicitly accepted if a user doesn't vote, or explicitly accepted for those that do. Whereas in the oracle model we "trust" the validators to do their job and not cheat. How many validators would be needed?

It's pretty much just a copy of a simple PoS mechanism where the validators vote on the validity of a block of data, but in this case the block of data is stuff from Reddit rather than tx and contract execution. Validators all vote on whether or not the data was submitted correctly, and we "trust" them not to cheat because if they do they will lose their stake. Again, this works if > 50% are honest. If the price of admission is low, and all you have to do is run an automated script on a cheap VM, then it's trivial to do this. We could even create a 1 line deployment script that people can use to set it up (like Parity has when you want to spin up one of their nodes).

This ways users focus on creating and voting on proposals, not validating a data bridge between Reddit and Ethereum.

3
carlslarson•

Does Reddit allow you to quickly try out new things like staking token-lock periods before and after votes, quadratic voting mechisms, or any other cryptoeconomic mechanisms we dream up and want to test?

I guess we have to weigh the benefits of having that freedom vs the UX benefit of being within Reddit. To my mind participation is already tough and moving away from Reddit for that would add friction.

This ways users focus on creating and voting on proposals, not validating a data bridge between Reddit and Ethereum.

I agree, this sounds good!

6
burrrataOP•

Ok cool. I think it's up to the community to decide, but yeah it's a tradeoff. Ultimately though the direction is still the same, it's just a matter of how many steps we want to take to get there. We could go ahead and release it as a beta with the built in Reddit polling, and then work on the more complex voting mechanisms and UI in parallel and release that as an option when it's ready?

Cool! I've been brainstorming that model for a week now so I'm glad you like it. Plus it generalizes to ANY community that wants to implement it because the data bridge is community driven vs permissioned by a platform (because you can scrape your own data rather than asking a platform to give it to you)

4
carlslarson•

Happy to kick this off!

The recdao model

  1. User can publicly connect an Ethereum address to their Reddit user.
  2. Reddit distributes initial, and weekly reports of sub activity (users, user Ethereum address, karma, mods, time as mod, mod activity, etc.). Reports can be independently verified by external monitors - scripts pulling karma scores from comments and posts. Social mechanism for raising alarm.
  3. An open source script run by anyone can create a merkle tree from the report, running the data through the communities chosen distribution algorithm. The merkle root is submitted to be accepted by the dao through a vote (a governance vote that requires a stake from the submitter).
  4. The merkle root that was submitted can be independently verified by anyone running the script against the data + algorithm. If shenanigans then raise alarm with community.
  5. After the merkle root is accepted (passes vote), users submit their own tx which includes their data & merkle proof to be validated. The smart contract validates the proof against the accepted merkle root and awards the karma and tokens accordingly.
4
burrrataOP•

I like the idea of a script that can be run and verified by anyone. And the merkle proof makes it easier than ever :)

1, 4, and 5 could be improved though:

User can publicly connect an Ethereum address to their Reddit user.

How?

The merkle root that was submitted can be independently verified by anyone running the script against the data + algorithm. If shenanigans then raise alarm with community.

Let's stake this so that there's skin in the game.

After the merkle root is accepted (passes vote), users submit their own tx which includes their data & merkle proof to be validated. The smart contract validates the proof against the accepted merkle root and awards the karma and tokens accordingly.

Too much work. Let's just have a dedicated data validator set that handles this automatically so users can focus on the fun part: trading and then voting on controversial things and then arguing about them lol

3
carlslarson•

How?

Possibly within their Reddit user profile.

Let's stake this so that there's skin in the game.

I agree and with recdao all governance polls required a stake. If the poll passes then the stake is returned otherwise it's burned.

Too much work. Let's just have a dedicated data validator set that handles this automatically so users can focus on the fun part: trading and then voting on controversial things and then arguing about them lol

Maybe you could explain this more? It perhaps sounds more complicated than it is. The data is all within the dapp and the user just clicks to submit their data+proof. Though if there is a way to do this cost effectively and trustlessly without the user submitting the data themselves I'm all ears. Can you describe the data validator?

4
burrrataOP•

Check out the section titled "A few proposed solutions:" in the above Daonut Protocol Design #0.1 comment

3
shouldbdan•

Hybrid Proposal

To quote another proposal:

make the daonut protocol as decentralized as possible.

I don't necessarily agree with this goal. While it's commendable to decentralize as much as possible, there are other things that should be considered as well. Reddit is a centralized service that's offering to integrate tokenized donuts. This is huge for adoption. Reddit has massive network effects that can't be overcome by blindly decentralizing everything. What does moving donuts on-chain provide us here? Not security. It provides us flexibility.

I think the goal should be to make something decentralized enough without sacrificing usability.

An initial hybrid proposal is not only the easiest to implement but will create the least friction for end users to adopt. This approach doesn't have to be the final state of daonuts, but we should admit that whatever state daonuts exists in will ultimately be in some sense a hybrid as long as Reddit is involved. Personally, I'm super excited Reddit is involved, and I think the future of Ethereum will see a lot of hybrid apps where some parts are centralized and other parts are decentralized, and I think we should welcome this.

(But, parenthetically, I haven't been involved in these conversations between Reddit devs and u/carlslarson. Maybe they really want to make this super decentralized and have ideas about how to solve usability issues. If so, then I say go for it. I hope this proposal doesn't deflate any tires. I don't want people who had a really cool ultra decentralized solution in mind to forget about it. But I haven't seen a lot of discussion about user experience, and I'm having a hard time imagining it under other proposals.)

Benefits

There are a lot of benefits to a hybrid model:

  • Less friction. The more integrated this is into Reddit, the easier it's going to be for average users, and the more adoption it's going to get.
  • Quicker to implement. We can get a hybrid approach running much faster than a fully decentralized approach.
  • More secure. As we've seen, complex smart contracts are hard to build. The simpler the smart contract, the less area there is for attacks.
  • Cheaper and faster. Ethereum hasn't solved the scaling problem yet. Keeping some of the interactions on Reddit's servers means we're not pushing excess interactions on-chain where gas costs and congestion can become a problem.
  • Better democracy. We're already having a hard time getting people to vote in governance polls. If we put extra steps (registering an Ethereum address, using a Web3 browser) in front of people, we're going to have even more abysmal participation rates.
  • Pragmatic and honest. Whatever solution we have is going to be gameable by Reddit to some extent. Even with a fully decentralized solution, as long as we're basing it on Reddit comments and upvotes, it'd be easy for Reddit to fake if they really wanted to. On some level we have to trust Reddit. The hybrid solution acknowledges this.

So what is the hybrid model?

Reddit continues with all current donut services (creation, allocation, polls, badge purchases, banner purchases, gifting to other users, etc). And hopefully they keep building out more features to integrate donuts into Reddit natively. Then they also provide a bridge. Instead of me running the bridge, Reddit runs it. They add a button somewhere on r/ethtrader where you can click "tokenize donuts", and you enter an Ethereum address and the amount of donuts, and now you can send them to that address. Now you don't have to trust me to not steal your donuts, and you don't have to worry about u/ProofOfDonut having too many donuts. You just trust Reddit not to generate donuts unless someone clicks that button.

What if we want to move more features on-chain?

What's described above is step 1, and it's easy for both us and Reddit.

From here we can build out a contract for Reddit to interact with to offload some things from Reddit. Example: Currently Reddit only allows 49% of donuts to be transferred. What if we want to modify that? The contract function Reddit uses to tokenize donuts could look something like mint(address, amount, earned, minted). The earned parameter is the number of donuts the user has earned. The minted parameter is the number of donuts the user has already minted. Rather than Reddit deciding if new donuts should be minted, we can have the contract reject the minting of new donuts under certain conditions, and the conditions could be modified at a later date.

Another example: u/DCinvestor has thrown out the idea of making all donuts transferable but with only earned donuts counting in polls. So if you transfer donuts, you lose rights to vote in a poll until you get those donuts back. We could have a getVoteWeight(earned, current) function that returns an int representing the number of donuts that should count in a poll. When a user votes, Reddit calls this function to see how many donuts should count in the poll. Initially this function returns getNonTransferable(earned) which initially just returns earned / 2 + 1, meaning only half of donuts are transferrable and the other half is the only thing used to weight polls (status quo). We could change the logic to make getNonTransferable return 0 and getVoteWeight to return min(earned, current). Now when someone votes, Reddit calls getVoteWeight and it will only count earned donuts (not bought) but it will exclude any earned donuts which have been transferred.

Ultimately that leaves us with the goal of defining the interface of the contract that Reddit builds its system on top of. We provide functions like mint, getVoteWeight, and getNonTransferable which Reddit interacts with, giving us the ability to modify how Reddit behaves.

With this proposal our goal shifts from figuring out how to deal with issuance (we let Reddit do that) to figuring out how to build a contract that Reddit can directly integrate with. I think this would allow us to focus on the things that would provide the greatest value to the community.

4
burrrataOP•

Hmmm I appreciate your focus on UX, and you're right that Reddit's collaboration is HUGE and should be explored (plus the whole thing is on Reddit anyways). Not sure what to say other than that I agree there lol :)

To me the most exciting part IS designing the protocol and experimenting with cryptoeconomic mechanisms. I don't care which subreddit or platform picks it up first. I want to create something that can generalize to all of Reddit and arbitrary data on the internet, but this is a great place to start.

Maybe there's a way to separate "core protocol" research from community specific discussions like how to allocate donuts or voting on r/ethtrader? For example: I can't weigh in on your example of transferable/non-transferable donut weight because I don't care. I want to create a framework where communities can decide for themselves and try stuff out. If we were able to separate out those concerns then maybe we could collaborate more effectively so that we don't accidentally argue over points that could actually be decoupled?

3
icarebot•

I care

6
burrrataOP•

Thanks bot :) Glad you're holding down the fort lol

4
carlslarson•

I agree that a more general protocol can ultimately offer more value and I think it's a good objective. It is also harder. Do you agree?

3
burrrataOP•

Mmmm I dunno about harder. Integrating with web2 platforms means lots of back and forth, and ultimately you don't have control. Building a permission-less decentralized application is a little more technically demanding, but all in all probably would require the same amount of "effort" albeit a different type of effort. There's been a lot of good points raised that collaborating with Reddit is huge and it would be stupid not to explore that. With that in mind:

  • how can the community get involved in your discussions with Reddit so that you're not the bottleneck?
  • why not build both in parallel: we draft a fully decentralized protocol, but start by releasing the version that has the smoothest UX even if that means more Reddit and less web3. Then as users (or Reddit) want to upgrade to a more decentralized option we'll be ready and have a working model they can just plug into. Then there's no fork between those who want a Reddit based protocol and those who want a decentralized version, users get maximum flexibility, and there's a clear road-map and upgrade path.
1
carlslarson•

how can the community get involved in your discussions with Reddit so that you're not the bottleneck?

Before the announcement yesterday, a lot of conversations were necessarily private because that path had not yet been decided and approved. I think now that it's approved we should seek to communicate openly.

we draft a fully decentralized protocol, but start by releasing the version that has the smoothest UX even if that means more Reddit and less web3

Let's talk more about this as we draft up a goals doc. I'd support language to this affect such that we want to provide a fully decentralised protocol and provide paths for hybridizing or compromising that with web2 when necessary. For instance, the oracle bridge is a kind of hybridization path.

2
shouldbdan•

Thanks for the reply. When I read your proposal here are some immediate hurdles I see:

  1. Users have to register an Ethereum address with their Reddit account in order to even be able to get donuts. Ignoring privacy considerations, I believe this is going to lead to low levels of adoption. The thing that made donuts work so far is people automatically get them. They don't have to opt in, donuts just show up in their account every week like magic. After a while, people start to wonder what they are, and people can immediately start to experiment with them by buying badges or sending them to other users.
  2. Users have to leave Reddit and go to daodonuts.org to interact with the contract. To make it better users could install a browser extension, but then users have to install a browser extension. People aren't going to do that, and adoption is going to suffer.
  3. On top of that users would have to be using a Web3 browser to interact with donuts at all. Again, the charm of donuts as they currently are is that people can play around with them in an environment they're comfortable with: on Reddit with the Web2 browser they're already using.

Solving these hurdles would be good ways to address the usability issues I've raised.

2
burrrataOP•
  1. Agreed, but if we're targeting crypto-currency related subs that's less of an issue. IMHO that's something that can be ironed out after a PoC.

  2. Chrome is reducing the functionality of browser extensions and there's a lot of friction installing new stuff anyways esp if it's applications specific. At least with Metamask it works across all Ethereum/web3 things and not just a single dApp

  3. Not necessarily. The Polkadot Apps UI allows users to interact with DOTs without a Web3 browser. If we built on Substrate/Polkadot there's a high likelihood that we would get this functionality built in. Regarding an Ethereum implementation: the website could have a built in wallet creator, and users could use that or use their own wallet (Metamask, ledge, etc...).

3
carlslarson•
  1. Users have to register an Ethereum address

Users wouldn't necessarily have to do this. There are ux options here.

  1. Users have to leave Reddit and go to daodonuts.org

I don't think we want this. For me what is massive here is the Reddit integration. But I think we all agree there.

  1. On top of that users would have to be using a Web3 browser to interact with donuts at all.

There are many options for providing Web3. Don't be too limiting until we know for sure it's a real limitation. A website, for instance, can just provide web3 and wallet functionality all itself. No metamask needed.

2
shouldbdan•

A website, for instance, can just provide web3 and wallet functionality all itself.

Yeah, Reddit could run an Ethereum node and connect us on the back end... but then we'd be trusting Reddit again? In this case why decentralize rather than let Reddit run the things it can on its servers?

But that would solve the usability issues. If Reddit is up for that and you've got people up for building this out in a fully decentralized way, then heck yeah! Go for it! At that point, the only objection I have is that it sounds like an insane amount of work to me. But you guys sound like you have a much better handle on it than me, so maybe I can just drop into the shadows at that point and benefit from whatever cool system you guys build.

2
carlslarson•

Haha! I want to show you something I wrote last week. You describe model#2. Basically I was trying to frame the high level approaches this project could take. See if it makes sense. Maybe there are others? Sure, I favor 4. Or 3 with a transition to 4. But 2 is definitely an option and has some advantages worth considering.

Models for interaction between r/ethtrader and Ethereum

1 A) User controlled bridge for transferable tokens

  • (ala u/shouldbdan)
  • applications (voting, badges, etc.) fully hosted and interacted with on Reddit
  • distribution/minting on Reddit
  • tokens movable on-chain via bridge

2 B) Reddit bridge to Ethereum

  • special deposit/withdraw location within Reddit (replaces u/ProofOfDonut)
  • like user bridge but slightly improved security
  • applications fully hosted by Reddit
  • distribution/minting on Reddit
  • tokens movable on-chain via bridge

3 C) Reddit bridge from Ethereum

  • distribution/minting on-chain
  • transfer to Reddit for use in applications
  • applications fully hosted by Reddit

4 D) Reddit reads Ethereum.

  • distribution/minting on-chain
  • all application use is on-chain
  • Reddit provides interface to applications
  • application back-end fully decentralised

I'll jump back into the conversation tomorrow!

Edit. Numbers -> letters so as not to imply and necessary progression that needs to be taken.

3
burrrataOP•

I like 4, then 3, then 2, and then 1 (in that order)! lol

Also, what if we trialed this on r/donuttrater first and THEN r/ethtrader? Then the stakes are SUPER low and we can feel more comfortable experimenting. Also, then people from r/ethtrader can test it out before voting to incorporate it into the sub.

We could also create a testing subreddit specifically for demo purposes. Then people can make decisions about a real experience they had vs theories and assumptions.

2
carlslarson•

Yep, there or here, even. Dogfooding :)

2
burrrataOP•

Cool!

We were at 1, and it sounds like we're moving to stage 2, and then iteratively moving towards 4? Is that how you feel as well?

2
shouldbdan•

Haha, yep. I am proposing something like model #2 - with the additional point that more functionality can be integrated between Reddit and the contract than simply issuance.

2
DCinvestor•

Another example: u/DCinvestor has thrown out the idea of making all donuts transferable but with only earned donuts counting in polls. So if you transfer donuts, you lose rights to vote in a poll until you get those donuts back.

This model has a lot of virtues, including:

  1. Limits your voting power in governance polls to what you have actually earned
  2. Creates a "reserve demand" for Donuts, based upon their governance authority (which I believe will actually appeal to many folks). Any reserve demand should reduce the velocity of Donuts.
  3. Allows you to temporarily or permanently spend your influence points on whatever you want (which once tokenized, could really be anything). Although you may miss out on future use cases for this evolving asset, you could always re-buy up to your entitled stake for governance purposes.
3
burrrataOP•

The Goal: make the daonut protocol as decentralized as possible.

  • assuming this is the goal, the following design proposals will attempt to move towards that from the current donut protocol on r/ethtrader
  • if that is not the goal, please comment and express your views as to why! :)
2