diff --git a/contracts/access/manager/AccessManager.sol b/contracts/access/manager/AccessManager.sol index 72176f5e395..63b5ba5cede 100644 --- a/contracts/access/manager/AccessManager.sol +++ b/contracts/access/manager/AccessManager.sol @@ -110,6 +110,10 @@ contract AccessManager is Context, Multicall, IAccessManager { } constructor(address initialAdmin) { + if (initialAdmin == address(0)) { + revert AccessManagerInvalidInitialAdmin(address(0)); + } + // admin is active immediately and without any execution delay. _grantGroup(ADMIN_GROUP, initialAdmin, 0, 0); } diff --git a/contracts/access/manager/IAccessManager.sol b/contracts/access/manager/IAccessManager.sol index 8b3d3a79050..63c2754317c 100644 --- a/contracts/access/manager/IAccessManager.sol +++ b/contracts/access/manager/IAccessManager.sol @@ -52,6 +52,7 @@ interface IAccessManager { error AccessManagerUnauthorizedAccount(address msgsender, uint64 groupId); error AccessManagerUnauthorizedCall(address caller, address target, bytes4 selector); error AccessManagerCannotCancel(address msgsender, address caller, address target, bytes4 selector); + error AccessManagerInvalidInitialAdmin(address initialAdmin); function canCall( address caller, diff --git a/test/access/manager/AccessManager.test.js b/test/access/manager/AccessManager.test.js index 7b05dc143c6..2045bb18085 100644 --- a/test/access/manager/AccessManager.test.js +++ b/test/access/manager/AccessManager.test.js @@ -1,5 +1,5 @@ const { web3 } = require('hardhat'); -const { expectEvent, time } = require('@openzeppelin/test-helpers'); +const { constants, expectEvent, time } = require('@openzeppelin/test-helpers'); const { expectRevertCustomError } = require('../../helpers/customError'); const { selector } = require('../../helpers/methods'); const { clockFromReceipt } = require('../../helpers/time'); @@ -39,6 +39,12 @@ contract('AccessManager', function (accounts) { await this.manager.$_grantGroup(GROUPS.SOME, member, 0, 0); }); + it('rejects zero address for initialAdmin', async function () { + await expectRevertCustomError(AccessManager.new(constants.ZERO_ADDRESS), 'AccessManagerInvalidInitialAdmin', [ + constants.ZERO_ADDRESS, + ]); + }); + it('default minsetback is 1 day', async function () { expect(await this.manager.minSetback()).to.be.bignumber.equal(MINSETBACK); });