The token contract has a delegateWithSig function, allowing a meta-transaction approach to redelegation. It’d be fairly simple to set up, eg, an OpenZeppelin autotask that allows anyone to redelegate their tokens, cost-free, with transaction costs funded by the DAO.
Fair-use limits of, say, one redelegation per week (or even less) can be applied to prevent abuse; anyone wanting to abuse it by spreading tokens around many addresses would still have to pay costs for moving the tokens, so a griefing attack would be expensive for the attacker.
This could also be applied to other methods that are possible with signatures, such as onchain voting.
If an ERC-20 transfer is around 50k gas and the delegation transaction is around 80k, would such a griefing attack be a concern? For every X amount an attacker spends they’d get 1.6x for their money to be spent by the DAO right? I’m not too familiar with OpenZeppelin but how easy would that task be to toggle on/off if needed?
I guess another solution might be to also have a daily/weekly/etc cap on such free delegations for everyone collectively? So 1000 (or whatever the number is) per week and any address can participate, but once the cap has been reached, people will have to wait until next week if they want to do a free delegation? And that would be in addition to each individual address’ once-per-month cap. Not sure how technically feasible that logic is though. Or maybe I’m overthinking and all of that would just be overkill.
It’s fairly easy to toggle the task on and off. We could also build ratelimits in as you suggest - that’d be a good idea. Finally, we can also make the service only available for accounts with more than a certain balance of tokens to delegate, to avoid wasting gas on very small delegations.
This should be worked into the delegation/re-delegation website right? Assuming that the user hasn’t triggered one of those caps/restrictions, they should be able to just one-click delegate. For example if someone wanted to delegate to me, they would go to my link (example: https://delegate.ens.domains/?delegate=serenae.eth), click Delegate, sign with wallet, and that’s it.
Or if that user has triggered one of those caps/restrictions, the redelegation website would still allow them to delegate, but would fallback to making the user execute an on-chain transaction themselves.
Just thinking of ways we can make this as painless and fewest-clicks as possible for good UX!
I really like the objective here. The existing model where holders have to pay to redelgate their votes isn’t a great model.
Some of the proposed guardrails in this thread are a good idea. Perhaps certain voting windows of time could be set up? That way delegates and ENS holders could better know when to focus communication efforts about upcoming votes. One could imagine ENS holders might check in on what their delegate has been doing once a year or every couple months.
Scheduling a free delegation window might help them all sync that up that check in such a way that educational materials or other resources could be created for them on a similar timeframe.
I believe free change windows could promote a more fair environment for campaigning. The delegates might be incentivized to campaign at the same time and so be able to see and respond to arguments that otherwise might crop up quite quickly.
As far as a proposed cadence, I’m not sure but it should probably mirror the pace of the voting on several proposals? Maybe once every quarter for two weeks? I’m not sure how much activity the DAO will really have.
Thanks, @nick.eth, for proposing a fix and taking the idea to Temp Check.
I very much support the initiative to find drastically lower-cost alternatives for ENS token holders to delegate, or redelegate, their governance power for their ENS tokens.
Because of finding I had excessive value in a mere browser extension wallet like MetaMask, I sent my ENS tokens from that MetaMask wallet address to a hardware wallet. After learning via the ENS Discord that this reset the delegation to zero, I looked into redelegating via the current official means https://www.withtally.com/governance/ens.
Found it would require >US$60 in transaction fees.
Conclusion: ENS high-quality governance delegation will degrade with time unless we implement a low-cost or free alternative to re-delegate.
This is bordering on off-topic but I think I should also just say for reference that it’s critical we allow activities such as delegation on Layer 2 systems as soon as possible (which is basically now). That’s the only long-term solution to fees; paying out of pocket for them is a perhaps worthwhile patch but who knows where fees are headed on L1 in the long term.
In general, I do not believe that the DAO should ever subsidize gas fees, for any reason. My fear is that it is a slippery slope from here, to where proposals are made for the DAO to cover some or all of the gas fees when a name is registered. With so much interest in ENS and so many holders of the $ENS token, even a targeted subsidy program would be hugely costly.
Putting my reservations aside, I would be interested in fleshing this out. Some of the things that immediately come to mind:
Is there a way to make this more targeted or based on need? What would that application process look like?
How much is the DAO prepared to spend on this? There would obviously have to be a cap on fees each year.
How often can a single wallet utilize the subsidy?
Can bad actors exploit this by spreading tokens across different wallets and draining accessible funds? What are other sybil issues that are likely to arise?
Does this initiative encourage delegate changes for no reason? Do gas fees create needed friction here?
I don’t find the slippery slope argument that compelling; making it easier to delegate and vote is a clear good for participation in the DAO. It could potentially be costly - I would suggest a good first step would be to authorise, say, 10 ETH to a bot, with fairly strict limits on who can use it and how, and see how it goes.
I’d rather avoid any kind of application process, both because it’s less open and because of the overhead of it.
This is a good question - but I think we could start with something fairly small and see how we go.
I think monthly at most would be fine; maybe even less frequently than that. People have also suggested ‘delegation windows’, which has potential but also makes it harder for people to use.
They could, but it would be costly for them too. A transfer costs 57k gas if neither sender nor recipient account have delegated. A delegate transaction is 98k gas. So a determined griefer could at a one-time cost of 57k gas per account cost us 98k gas per account per month (or however often redelegation is allowed). I can think of a few ways to combat this, but it’d be a very slow griefing attack with no obvious gain, so I’m not sure we need to buy ourselves problems by worrying about it upfront.
Longer term, a good solution would be to bridge the tokens to an L2, conduct voting there, and send a single L2->L1 message to execute the final result if a proposal passes.
I think the primary issue is delegates basically had to set themselves up before claiming to delegate to themselves.
This really wasn’t clear. Also given the nature of the airdrop UI people basically were asked to delegate on claim which probably isn’t optimal.
Some restrictions, conditions on being able to utilize a system to re-delegate I think would be important. I also have seen that the competition between earning return (via LP) vs. governance is a strong liquidity dividing restriction.
Coming from Maker where we absolutely must work executives on chain I come to realize that polling or other governance agendas can be achieved by using various forms of snapshots provided there is sufficient warning of when these will happen and what will be included in the snapshot.
I do think there are some sybil issues in here that someone could creatively drain this contract but with some reasonably careful design and limitations this should be mitigatable.
Example: A person can only re-delegate for free if they have held their ENS for at least 30 days in their wallet.
Issue becomes not just what to offer (terms/conditions) but then coding it all up. Right now I probably can’t even vote my own ENS because I delegated it to someone else and unable without a mainnet tx to delegate it back to myself. I suspect others are in similar situation.
It doesn’t help that gas fees are really unpredictable right now and it’s likely not all of us are sitting on massive piles of ETH just waiting to be burned up in gas fees.
I do understand that these delegation transactions have a more complex workload and thus do need to use more gas… but as someone with a very limited amount of liquidity there’s no way to get around it at all.
I also dont think a “hardship application” process is the solution either. People always lie and try to game systems like that, leaving those of us who actually need it empty-handed.
In my experience of being poor (litterally and figuratively) the only thing that helps is free universal access to a necessity for either a short period of time or doled out at wide regular intervals.
Considering the size of this community and it’s potential for growth maybe monthly is too frequent?
Is it possible 3 month, 6 month, or even yearly “one time free pass” for assigning delegation is better?
Requiring a certain ‘hold time’ is an interesting idea. It’d require a subgraph or something of the sort to efficiently measure, though.
I’m getting the sense that there’s mixed opinions on this, largely around the scope and cost of such a measure. How would people feel about me putting forward a draft proposal for a very limited scope trial? Something like the following:
Max 10 ETH funding, total.
Funds voting transactions for delegates with >100 tokens (one per delegate per vote).
Funds redelegation transactions for anyone with >100 tokens (one per account per 3 months).
If approved on a snapshot vote, the funds can be put up by True Names, and later reimbursed by the DAO out of a workstream operating budget, once we have one.
I think a draft proposal is a great idea! And with limitations like that it seems like the actual cost could be kept quite low.
Also if it becomes apparent that the system is being misused or ends up eating up too much funds that could be used elsewhere then we could always change it? Right?
That’s what amendments are for
In my opinion I think this is some that will benefit the ENS community and help equalize access. And with more available delegates the community can grow and develop equally while not feeling like there are “paywalls” or feeling like a lack of liquidity excludes them from participating!
I support any mechanism to make redelegation free for users. In my experience, any cost to change delegation leads to a very high rate of leaving it as is, which goes against the spirit of ENS governance.
I like the idea of making things like redelegation easier/cheaper, but as others have said I’d be concerned about an unforeseen attack vector. Gas prices are unpredictable and there are 137k accounts. That’s a lot of potential redelegation going on.
A small-scale experiment would be fine, but I don’t know that this idea will have the desired positive impact on participation.
I also feel that it will be very difficult to measure the benefits. For instance, the fact that a delegate vote is changed doesn’t necessarily mean it is “good”. Conversely, if this subsidy allowed a person to change from a delegate who was not participating to one that was, it would be objectively good. Whether the amount of “good” is worth more than the cost to the DAO, is very difficult to measure.
Would be interested in a small scale experiment all the same.