Open radicleart opened 2 years ago
I feel like we haven't quite cracked vote delegation yet. The "direct delegation" method is only minimally invasive and will be fine to use for smaller DAOs. I created a delegate-vote-many
but I did not submit it because it would require the delegate to send a list of delegatee principals and amounts in order to deploy that voting power. It just does not scale. For map based delegation there is the problem that people can rescind their delegation and actually remove votes made by the delegate. I think that is very dangerous and prone to abuse. Attackers could choose to rescind at the last moment. I'm of the opinion that once voted, you should not be able to pull the votes / tokens until the vote is over. And for the latter, if you can only rescind delegation when the tokens are not locked up in voting, then it becomes very hard for the delegatee to get their tokens back. We then need a two step mechanism with tokens and an allowed amount, which then eventually unlock and cannot be used again by the delegate. (Also allowing the delegatee to reclaim the votes "on behalf" of the delegate.)
On rescinding - we also have rescind-time-lock
which we reasoned could be set a day or so before the end to prevent the vote from being gamed. It could also be set so the delegatee can only rescind at the start, first day or so - preventing this attack but allowing voter to get their votes back.
I'll take a closer look at the third option this week - tracking delegation via a dedicated token - to see how it plays out.
Do you want to allow multi level delegation, where one user delegates his votes to another, that delegates his votes to another, that delegates to another etc?
I gave a quick look at #6 and it looks like it is possible. And main problem that I see is that user at the bottom of such delegation chain might not be able to reclaim his tokens until users at the top reclaims their tokens first. And this pose a threat to whole voting mechanism, because you can't force users to reclaim their tokens, they may want to keep them locked on purpose to attack DAO.
There is a check in edg-transfer/transfer
line 47/132 of governance extension which prevents transfer of delegated tokens - does this not prevent this multi level delegation?
I feel multi-level delegation, although pretty cool, can also be dangerous. It seems hard, if not impossible, to properly unwind the delegation chain. I'm working on a few alternatives. If one seems feasible I'll submit it as another concept PR.
We currently have two implementations;
See also this overview
Appreciate all opinions?