Intro
Recently, Lido DAO voted for increasing voting duration from 24 hours to 72 hours. It would allow more LDO token holders to participate in voting to have a more meaningful outcome in general, especially on strategic decisions and major protocol upgrades.
From the technical perspective, Lido DAO governance processes rely on Aragon infrastructure, and original Aragon DAO Voting app has no way to change voting duration. We have developed, reviewed and audited an upgrade for DAO Voting which provides voting duration tuning. Auditors reported a major note that voting duration changes could affect current and previous votings. While we acknowledge the finding, the duration upgrade is still feasible if we properly and thoughtfully tackle it with operations by carefully drawing the actions and possible conditions. Basically, dev team would have to ensure no vote, either running or concluded, is retroactively affected by the change in the voting duration.
Prerequisites
Upgrade planning should be done considering that any votes started within 48h (in the following sections we extend the margin to 72h for further consistency) before the voting upgrade vote start and not enacted before its enactment would get their voting time frame updated as well.
Therefore, we setup the prerequisites to secure the upgrade procedure:
- we should ensure that there are no unexecuted votings in last 72h
- we should avoid running other Aragon votings in parallel
- we should not run omnibus multipurpose voting for the upgrade itself, just a standalone voting for the one upgrade point only
So, we propose to declare the “Aragon voting silence week” period devoted solely to the upcoming upgrade lasting 7 days.
Note that running another voting within the “silence week” doesn’t raise any extra risks. Only some additional visual and communications encumbering may be introduced. So, we encourage to not create and to not vote for another votings during the silence week to keep the process smooth and convenient.
Actions overview
The overall actions plan is following:
- Pre-deploy new DAO Voting contract implementation
- Announce the upgrade across Lido public communication channels
- Run standalone voting with necessary upgrade actions
- Enact voting if quorum reached
- Re-schedule the omnibus flow to start votings on Tuesdays
Timetable
April-04-2022 (Mon) 12:00 midnight +UTC: Start “Aragon voting silence week”.
All previous Aragon votings should be already executed or rejected.
No new votings except the upgrade one are expected.
April-05-2022 (Tue) 10:00 AM +UTC: DAO Voting contract implementation deployment deadline (it’s ok to be there ahead of schedule).
April-06-2022 (Wed) 03:00 PM +UTC: Public announce for the upcoming upgrade voting.
April-07-2022 (Thu) 12:00 noon +UTC: Upgrade voting start.
April-08-2022 (Fri) 12:00 noon +UTC: Enact voting if succeeded.
Technical details
Why do we need “Aragon voting silence week”
Voting duration changes are retroactive. If the unexecuted votings exist that fall into the new extended voting duration, then the votings become ongoing and final decision could be overrode with the new votes. To ensure that this behavior wouldn’t been used incorrectly, we have to setup a 72h margin excluding all other votings before the upcoming upgrade. It’s not a problem if someone started another voting during the upgrade period. We only want to say that these votings could be misinterpreted, and it’s better to avoid vote for them.
DAO Voting implementation outline
You could proceed with the following audited commit to review the changes.
Key points:
- we introduce new
UNSAFELY_MODIFY_VOTE_TIME_ROLE
role to be responsible for duration changes; - to be able to change the
voteTime
variable, we add theunsafelyChangeVoteTime
setter function guarded by the new role; - new event
ChangeVoteTime
provides a way to record all duration changes.
Upgrade script steps
An upgrade script will implement the following five steps:
- Push new voting app version to app repo.
- Upgrade the
DAO Voting
contract implementation (it follows the proxy pattern). - Grant
UNSAFELY_MODIFY_VOTE_TIME_ROLE
toDAO Voting
. - Update voting duration with
unsafelyChangeVoteTime
to 72 hours. - Revoke
UNSAFELY_MODIFY_VOTE_TIME_ROLE
fromDAO Voting
.
Contingency plans
- If something goes wrong before the voting upgrade will start, we will announce necessary actions and estimations on research forum to perform upgrade later.
- If something goes wrong during the voting upgrade before the quorum will be met, we will communicate key Lido stakeholders to vote against the upgrade (which, of course, may help or not).
- If something goes wrong after the voting upgrade will be enacted, we need to schedule a war room asap to discover the purposes and options to mitigate the issue.