All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Inherit
ProtocolVersion
andERC165
inDAOFactory
andPluginRepoFactory
. - Inherit
ProtocolVersion
inDAO
andPluginRepo
. - Added a
nonReentrant
modifier to theexecute
function in theDAO
contract. - Added
allowFailureMap
toIDAO.Executed
event. - Added
initializeFrom()
reinitializer toDAO
contract. - Support ERC-6372 in TokenVoting plugin.
- Added missing
virtual
keyword toPermissionCondition
andPermissionConditionUpgradeable
. - Added
PermissionCondition
andPermissionConditionUpgradeable
to have ERC-165 support forIPermissionCondition
implementations. - Changed
TokenVotingSetup
to receive theGovernanceERC20
andGovernanceWrappedERC20
base contracts as constructor arguments to reduce theinitCode
size because of limitations on the Goerli testnet. - Revert with errors (
ConditionNotAContract
,ConditionInterfacNotSupported
) if thegrantWithCondition
function inPermissionManager
is called with a condition address that is not aIPermissionCondition
implementation. _grantWithCondition()
doesn't acceptALLOW_FLAG
anymore as valid condition input.- Revert with an error (
GrantWithConditionNotSupported
) if theapplySingleTargetPermissions
function inPermissionManager
is called withPermissionLib.Operation.GrantWithCondition
. - Fixed logic bug in the
TokenVoting
andAddresslistVoting
implementations that caused thecreateProposal
function to emit the unvalidated_startDate
and_endDate
input arguments (that both can be zero) in theProposalCreated
event instead of the validated ones. - Changed the
createProposal
functions inMultisig
to allow creating proposals when the_msgSender()
is listed in the current block. - Changed the
createProposal
functions inAddresslistVoting
to allow creating proposals when the_msgSender()
is listed in the current block. - Changed the
createProposal
functions inTokenVoting
to allow creating proposals when the_msgSender()
owns at leastminProposerVotingPower()
tokens in the current block, also if they are delegated. - Changed the
isMember
function in theTokenVoting
plugin to also take delegators of the token into account. - Fixed and clarified the NatSpec comments according to the Code4rena audit suggestions.
- Changed the solidity compiler pragma from
0.8.17
to^0.8.8
for files that external developers inherit from.
- Removed unnecessary ERC-165 check for
type(UUPSUpgradeable).interfaceId
fromsupportsInterface
inPluginRepo
.
- Adds check to
Multisig.initialize()
that members length isn't bigger than max uint16. - Added
PlaceholderSetup
contract and adapted deploy scripts.
- Added check to
execute()
inDAO
to prevent griefing attacks if the caller provides insufficient gas on actions being allowed to fail. - Disallow creating a new proposal in the Multisig plugin in the same block where the settings have been changed.
- Updates
MultisigSetup
to be used as Release 1 Build 2.
- Created the
IMultisig
interface.
- Renamed the function
getImplementationAddress
toimplementation
inIPluginSetup
. - Moved
NO_CONDITION
constant toPermissionLib
. - Use the
calldata
instead ofmemory
keyword inPluginSetup.prepareInstallation
. - Moved
_disableInitializers
inside the constructors ofPluginCloneable
andPluginUUPSUpgradeable
. - Changed license from
MIT
toAGPL-3.0-or-later
. - Renamed
DAOSettings.name
toDAOSettings.subdomain
. - Fixed the ERC165 interface ID and
supportsInterface
computations. - Replaced non-upgradeable contract dependencies by upgradeable ones for the cloneable
Admin
plugin. - Refactored
ProposalBase
intoIProposal
. - Refactored the
auth
modifier to always usewhere = address(this)
and adapted errors. - Use OZ's upgradeable contracts for
PluginCloneable
. - Renamed
getDAO()
todao()
and changed thedao
state variable mutability to private.
- Removed unused
DaoAuthorizable
dependency fromPluginSetupProcessor
. - Merged
IMembershipContract
intoIMembership
. - Removed the
_auth
inPermissionManager
that allowed for having theROOT_PERMISSION_ID
permission for a specificwhere
target contract. - Removed the
WITHDRAW_PERMISSION_ID
. - Removed
DaoAuthorizableCloneable
andDaoAuthorizableBase
. - Moved the array length check for the
MintSettings
fromTokenVotingSetup
intoGovernanceERC20
contract.
- Added support for release metadata.
- Added
IMembership
andIMembershipContract
and theMembershipContractAnnounced
event. - Added a
metadata.json
file for all plugins. - Added
startDate
andendDate
to theProposalCreated
event. - Added the
ProposalBase
,Proposal
, andProposalUpgradeable
contracts to refactor and unify the proposal creation and execution process across all governance plugins. - Adds
startDate
andendDate
to Multisig proposals. Execution and approvals of proposals have now to be in the boundaries of these 2 dates. - Adds
IEIP4824
- Adds
event NewURI
implementations fordaoURI()
andsetDaoURI()
definitions inDAO
- Added check that plugin and DAO subdomains only contain
a-z
,0-9
or a dash (-
). - Adds
allowFailureMap
to the plugins for creating proposals. - Added verify steps into deployment scripts.
- Changed the folder structure of the
contracts
folder. - Renamed
PreparedDependency
toPreparedSetupData
. - Changed
CallbackReceived
which now emits the sender as well. - Renamed the
AddressesAdded
andAddressesRemoved
event toMembersAdded
andMembersRemoved
. - Avoided integer division in the
MajorityVoting
execution criteria to avoid precision loss. - Replaced
ProposalParameters.minParticipation
byminVotingPower
inTokenVoting
andAddresslistVoting
. - Rescaled and renamed
PCT_BASE = 10**18
toRATIO_BASE = 10**6
. - Changed the type of
ProposalParameter.minApprovals
,MultisigSettingsUpdated.minApprovals
fromuint256
touint16
, and addedapprovals
(uint16) in theProposal
struct. - Changed
_canVote
logic to revert for votes being cast withVoteOption.None
. - Changed
callId
inDAO.execute()
fromuint256
tobytes32
. - Changed the
createProposal
function signature which expectsuint256
allowFaiureMap
argument. - Changed all occurences of
oracle
tocondition
. - Renamed
ItemSingleTarget
andItemMultiTarget
inPermissionLib
toSingleTargetPermission
andMultiTargetPermission
. - Renamed
bulkOnSingleTarget()
andbulkOnMultiTarget()
inPermissionManager
toapplySingleTargetPermissions()
andapplyMultiTargetPermissions()
- Renames plugins
TokenVoting
,AddresslistVoting
,Admin
andmultisig
to be compliant to the new naming rules. - Renames
name
inPluginRepoRegistry
andDAORegistry
tosubdomain
.
- Removed redundant storage of
totalVotingPower
inProposalParameters.Tally
inTokenVoting
andAddresslistVoting
and obtain it fromsnapshotBlock
andvotingToken.getPastTotalSupply
andaddresslistLengthAtBlock
instead. - Removed
prepare*DataABI()
fromIPluginSetup
&PluginSetup
and all the other contracts that inherit fromPluginSetup
. - Removes
open
parameter from Multisig proposals. - Removes
Tally
struct as well asaddressListLength
and movesapprovals
inProposal
. - Removes
freeze
functionality. - removes EIP-165 implementation from
ProposalBase
.
- Added the
Multisig
plugin and setup contract. - Added a
VotingMode
enumeration to specify if the vote should be conducted inStandard
,EarlyExecution
, orVoteReplacement
mode. - Added the
Admin
plugin and setup contract. - Added NFT compatibility by using OpenZeppelin's
IVotesUpgradeable
interface inERC20Voting
and renaming the contract toTokenVoting
. - Added extra check in
PermissionManager
to disallow giving DAO specific permissions to ANY_ADDR + giving any other permissions to ANY_ADDR unless oracle is passed. Also, freeze can only be used when where is not ANY_ADDR. - Added
resolver
check in initialize function andsetDefaultResolver
ofENSSubdomainRegistrar.sol
. - Added test related to
resolver
inens-subdomain-registry.ts
. - Added
_checkUpdateValidity
method toPluginSetupProcessor
to prevent updates to the same or earlier versions that would lead to double initialization. - Added more tests for the
PluginSetupProcessor
. - Added
PluginSettings
to theMultisig
plugin - Added
onlyListed
to thePluginSettings
of theMultisig
plugin.
- Abstracted the
Addresslist
to be used byAddresslistVoting
andMultisig
. - Changed the order of the
_voteOption
and_tryEarlyExecution
inMajorityVoting
. - The plugin-wide settings are now stored in a
private
VotingSettings
struct and made available through getters. - Structured the
getProposal
return data by adding astruct ProposalParameters
andstruct Tally
. - Bounded
minDuration
between one hour and one year and prevent integer overflows during the start date calculation (HAL-03, HAL-04). - Changed
MajorityVoting
to useminParticipation
and unified the parameter order. - Fixed the early execution criterion in
MajorityVoting
by calculating theworstCaseSupport
quantity. - Renamed the names of folders, files, contracts, events, functions, and parameters in
MajorityVoting
to match with the SDK and Subgraph naming:AllowlistVoting
toAddresslistVoting
andallowlist
toaddresslist
VoteCreated
andVoteExecuted
toProposalCreated
andProposalExecuted
voteId
toproposalId
user
tomember
- Fixed inheritance incompatibility with OZ contracts for
Plugin
,PluginCloneable
, andPluginUUPSUpgradeable
. - Throw an error in
MajorityVoting
if the vote creator tries to vote before the start date. - Refactored mocks for
PluginUUPSUpgradeable
andPluginCloneable
and the respective setups. - Moved
event.ts
from/test/test-utils/
to/utils/
.
- Remove empty helpers array initialization in
AddresslistVotingSetup
. - Removed the redundant base class
DaoAuthorizableBaseUpgradeable
. - Removed
isApprovedForAll
check from initialize function ofENSSubdomainRegistrar.sol
. - Removed test related to
isApprovedForAll
inens-subdomain-registry.ts
.
- Added
00_create-plugins-repo.ts
for creating and registering plugin repo for plugins. - Added
00_allowlist_voting_setup.ts
and10_erc20_voting_setup.ts
for deploying plugin setup. - Added
getMergedAbi()
function toabi.ts
. - Transferred the core docs from aragon/builders-portal to this repository.
- Added
AllowlistVotingSetup
andERC20VotingSetup
. - Added utility functions (
deployPluginRepoRegistry
,deployPluginSetupProcessor
,deployPluginRepoFactory
, andfilterEvents
) to the test suite. - Added
DaoAuthorizableBase
class. - Added
DaoAuthorizableClonable
using OpenZeppelin initialization. - Added mocks and tests for the
Plugin
andPluginSetup
classes. - Added
PluginSetupProcessor
to be the main class processingPluginSetup
contracts and applying permissions in the installing DAO. - Added
DaoAuthorizableUpgradeable
and a free_auth
function to provide anauth
modifier to the different plugin types and prevent code duplication. - Added
PluginCloneable
,PluginTransparentUpgradeable
. - Added goerli configuration to deploy to the Goerli testnet.
- Added
AragonPlugin
andAragonUpgradeablePlugin
for developers to inherit from for their concrete plugin implementations. - Added helper function
test/test-utils/ens.ts
deploying theENSSubdomainRegistrar
andENS
-related contracts. - Added Multi Target Bulk Permission object for
PermissionManager
with the oracle option as well. - Added Abstract
PluginSetup
for the devs to inherit from for their concrete plugin manager implementation. - Added the
solidity-docgen
hardhat plugin by OpenZeppelin to automatically generate documentation viayarn docgen
. - Added deployment script for
ENSSubdomainRegistrar
. - Added
ENSSubdomainRegistrar
Component
to register subdomains at the ENS. - Added
IPluginRepo
interface for plugin PluginRepo contract. - Added
PluginRepo
contract. - Added
InterfaceBasedRegistry
base to be used for creating any ERC165-based registry such as DAO-Registry andAragonPluginRegistry
. - Added
AragonPluginRegistry
contract for registeringPluginRepo
s. - Added
PluginRepoFactory
contract for creatingPluginRepo
s. - Added testing for
PluginRepo
,InterfaceBasedRegistry
,AragonPluginRegistry
andPluginRepoFactory
. - Added deployment script for
managing-dao
,plugin-registry
andpluginRepo-factory
. - Added an abstract
ERC165RegistryBase
Component
to register contracts by their address based on their ERC165 interface ID. - Added a concrete
ERC165Registry
implementation. - Added ENS support for
PluginRepoRegistry
. - Added minting functionality to the
initialize
function ofGovernanceERC20
.
- Updated
Verify.ts
for verifying new contracts. - Split
permissions.ts
into three files corresponding to00_ens-permissions.ts
,10_dao-registry-permissions.ts
and20_plugin-registrty-permissions.ts
. - Refactored
setupENS
function. - Renamed
UPGRADE_PERMISSION
to be more specific toUPGRADE_DAO_PERMISSION
,UPGRADE_PLUGIN_PERMISSION
, etc. - Refactored
DAOFactory
to usePluginSetupProcessor
. - Refactored NatSpec comments and names for the contracts related to the
Plugin
andPluginSetup
. - Renamed
PluginTransparentUpgradeable
toPluginUpgradeable
. - Refactored
AdaptiveERC165
into an independentCallbackHandler
contract and separatedERC165
from it. - Adapted
Component
to useDaoAuthorizableUpgradeable
until it is fully refactored to becomePlugin
. - Refactored
DaoAuthorizable
to use the newly introduced, free_auth
function to prevent code duplication. - Improved
Counter
examples and added respectivePluginSetup
example contracts. - Renamed
PluginManager
toPluginSetup
and refactored it to be a two-transaction process consisting of aprepare
and anapply
step. - Replaced
AragonPlugin
andAragonUpgradeablePlugin
byPlugin
andPluginUUPSUpgradeable
, respectively. - Changed
DAORegistry
to use theENSSubdomainRegistrar
so that a DAO name can only be registered once. - Updated deploy script to correctly use
ERC1967Proxy
. - Renamed
hasPermission
toisGranted
in bothPermissionManager
andIPermissionOracle
. - Renamed several contracts, methods, variables, and constants as well as associated folder names.
- Updated deployment scripts for
managing-dao
,dao-registry
,aragon-plugin-registry
,dao-factory
. - Changed
registry.ts
todao-registry.ts
and updated testing. - Changed
Registry
toDAORegistry
and updated to inherit fromInterfaceBasedRegistry
. - Bumped
@openzeppelin/contracts
and@openzeppelin/contracts-upgradeable
to4.7.0
and fixedGovernanceWrappedERC20
accordingly. - Refactored import statements.
- Changed
ERC165RegistryBase
toInterfaceBasedRegistry
. - Changed order of deployment scripts.
- Changed folder structure of tests.
- Refactored event names and NatSpec comments.
- Renamed
TestComponent
,TestSharedComponent
toTestPlugin
,TestPluginComponent
. - Renamed
createProxy
function tocreateERC1967Proxy
. - Replaces custom ERC1271 interface with Openzeppelins interface.
- Switched order of where and who for the events in
PermissionManager
. - Extends
VersionCreated
event withPluginSetup
andcontentURI
- Markes parameters of
InstallationApplied
asindexed
- Removed
AppStorage
and related helpersPluginERC1967Proxy
,TransparentProxy
. - Removed
PluginConstants
that were related to the previous, indexd plugin setup solution. - Removed restrictions regarding plugin's address in
PluginRepo
. - Removed
deepEqual
overwrite ofequal
property in Chai Assertion used for testing of emitted events. - Removed
ERC165Registry
. - Removed
Component
andMetaTxComponent
. - Removed
MerkleMinter
deployment fromERC20VotingSetup
.
- Added tests for the
ACL
andIACLOracle
. - Allow tokens to be minted to DAO's treasury by passing address(0) as receiver in
TokenFactory
.
- Generalized
MerkleMinter
and made it aMetaTxComponent
. - Generalized
MerkleDistributor
and made it aMetaTxComponent
.
- Added workflow and scripts in
.github/helpers/contracts/dummy-dao/
to create dummy daos, deposits and proposals on contract deploy. - Added
VoteConfig
struct in theDAOFactory
to allow better typechain support for the creation of daos. - Added
MetaTxComponent
.
- Renamed the event
SetMetadata
toMetadataSet
. - Completed the
IDAO
interface and changedDAO
accordingly. - Decoupled
Permissions
fromBaseRelayRecipient
. - Fixed OZ contracts-upgradeable
Initializable
.
- Removed
Relay
interface fromPermissions.sol
.
- First version of the package, exposing the JSON artifacts.