delvtech / council Goto Github PK
View Code? Open in Web Editor NEWFlexible DAO governance smart contracts, developed by Delv.
License: Apache License 2.0
Flexible DAO governance smart contracts, developed by Delv.
License: Apache License 2.0
The only way to be removed from the GSC today is for your voting power to drop below the required threshold, then get kicked. If voting power comes from delegation, you have no control over this.
Ideally, inactive voters that don't want to be on the GSC will naturally drop below the threshold and be kicked, but adding the ability to manually leave is trivial and gives the voter more control.
How important is it that DAY_IN_BLOCKS
matches actual block time? Keep in mind that block times will be 12 seconds post merge:
This mapping returns 0 for default, we should make it private and then add a modified version of the default getter which returns the default mapping instead of zero.
Credit: @daejunpark
History.sol
simpleProxy.sol
OptimisticGrants.sol
OptimisticRewards.sol
VestingVault.sol
Missing:_getWithdrawableAmount()
Incomplete: _syncVotingPower()
The current event will emit a true for events which are deleted but are positive without meeting quorum, these events don't actually get executed making this event hard to parse. We should add a second bool field for quorum passing.
Credit: @daejunpark
ICoreVoting.sol
Missing natspec comments
https://github.com/element-fi/council/blob/d371ac82184fc26e19e958bd0b861f83e74b2955/contracts/interfaces/ICoreVoting.sol#L5
ILockingVault.sol
Missing natspec comments
https://github.com/element-fi/council/blob/d371ac82184fc26e19e958bd0b861f83e74b2955/contracts/interfaces/ILockingVault.sol#L5
IVotingVault.sol
Has natspec comments
The README included a broken link to our old Immunefi bounty program. Once we've landed on a new vendor, we should add updated details to the README.
related to: delvtech/hyperdrive#975
The method is called largeSpend, but the contract variables are highSpendLimit:
The comment calls it large spend limit even though the param is highSpendLimit:
CoreVoting.sol
Timelock.sol
History.sol
OptimisticRewards.sol
VestingVault.sol
This would make it possible to see what actions have been registered.
It would also make it possible to see what actions are being proposed in CoreVoting. When the actions are hashed off chain, we can only see a callHash for Timelock proposals.
A batch of calls may be doubly executed in Timelock
.
Consider the following two scenarios where increaseTime()
is executed after execute()
for the same callHash
:
increaseTime()
for the callHash
that has already been executed. (Difficulty: High)increaseTime()
near the end of the original waiting period, but increaseTime()
is delayed for some reason until the original waiting period passes, and immediately adversaries front-run execute()
before the increaseTime()
transaction. (Difficulty: Medium)Then, callTimestamps[callHash]
becomes non-zero again, and the subsequent execute() may lead to double execution of the same batch of calls.
Add an extra condition require(callTimestamps[callHash] != 0);
in the increaseTime()
function to ensure that the given callHash
is active.
Currently proving membership puts the entire voting power on a time delay. This makes topping-up votes to maintain membership difficult.
simple solution:
Implement a top-up method that does not adhere to the locking period.
Currently votes last forever till a contract call deletes them, plus they can be deleted after the min voting time has passed. This means (1) we need constant execution on chain to remove old proposals (2) even though we allow longer voting times it's hard to coordinate.
We should swap so that the proposal is unlocked after a min voting time and expired after max voting time. It can be executed during the period between min and max but only deleted without execution after the max.
In the current design, merely having more YES votes than that of NO votes is enough to execute a proposal. This means that a proposal will be executed, even if we have only a single YES ballot, zero NO ballot, and a lot of MAYBE ballots. There may exist scenarios where this behavior is problematic, and it may be considered to require a certain minimum quorum (ratio) of YES ballots.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.