On-Chain Tally: DAO v1.1 Limits and a Deposit-Paired Voting Proposal

Hey @david-fi5box, glad it picked your interest!

Yup, thank you for picking it up!! It was briefly mentioned in Tradeoff section, but merits a deeper analisys:

  1. State contention is not a road blocker for voting at the current levels of participation, worst case scenario a user just need to sign again a tx :white_check_mark:
  2. State contention tho is an issue for DoS potential: attacker can keep busy the VoteMeta cell, effectively denying participation of others to the vote :cross_mark:

As you are well aware this is a problem felt by deeply by the entire ecosystem, so much that we had over the years attempts over attempts to fix it, namely Intent Cells, Open Transactions and (weird but intriguing) PoW gated access to cells:

  • PoW gated access to cells is still in the ideation phase, needs research
  • Open Transactions would be the cleanest solution: we have working designs, but what’s currently lacking is EcoSystem agreement.
  • Intent Cells are the best candidate: user transforms VoteRightOwner into an intent cell by using a special lock on it (very similar to Delegation in this model) and an aggregator makes sure that his vote is included.

Side Note: user can choose which Lock he prefers, we don’t need to force everyone to use Intent Cells (nor Delegation OFC). Again, if he so prefers, a user can just keep signing again until his vote is included.

Not really a thing:

  • VoteMeta just store little constant information: not who voted, but what is the aggregated result and small Vote meta information
  • VotingRightOwner stores more information: there must be an entry for each vote participated to. That said, this entry can later on be garbage collected once the vote ends, so it doesn’t grow indefinitely and it’s proportional to the number of active votes at a certain moment.

We have the following trade-offs:

  1. Want to keep current deposits? → Fully off-chain system, doable, tricky part is to make sure it’s auditable, transparent and operator resistant.
  2. Want to have an elegant simple verified on-chain system? → You need to put a special lock on those deposits, hence withdraw and re-deposit.

Anything in the middle and you get way more complexity than you bargained for.

Yesterday I was explaining @chenyukang the reasoning underpinning the presented design:

Back to us

Thank you for the feedback @david-fi5box, keep it coming :hugs:

Phroi

PS: If you prefer, I can transform this design sketch into code and we can test it out together

2 Likes