From 96b95592c300a1b38953b276f0b6c77017f5c942 Mon Sep 17 00:00:00 2001 From: Bhaskar Kashyap <31563474+bskrksyp9@users.noreply.github.com> Date: Wed, 17 May 2023 07:53:52 +0530 Subject: [PATCH 1/2] Fix grammar in docs (#4250) --- docs/modules/ROOT/pages/access-control.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/access-control.adoc b/docs/modules/ROOT/pages/access-control.adoc index 56d91e1c1..e52c10401 100644 --- a/docs/modules/ROOT/pages/access-control.adoc +++ b/docs/modules/ROOT/pages/access-control.adoc @@ -171,7 +171,7 @@ Dynamic role allocation is often a desirable property, for example in systems wh [[querying-privileged-accounts]] === Querying Privileged Accounts -Because accounts might <> dynamically, it is not always possible to determine which accounts hold a particular role. This is important as it allows to prove certain properties about a system, such as that an administrative account is a multisig or a DAO, or that a certain role has been removed from all users, effectively disabling any associated functionality. +Because accounts might <> dynamically, it is not always possible to determine which accounts hold a particular role. This is important as it allows proving certain properties about a system, such as that an administrative account is a multisig or a DAO, or that a certain role has been removed from all users, effectively disabling any associated functionality. Under the hood, `AccessControl` uses `EnumerableSet`, a more powerful variant of Solidity's `mapping` type, which allows for key enumeration. `getRoleMemberCount` can be used to retrieve the number of accounts that have a particular role, and `getRoleMember` can then be called to get the address of each of these accounts. From dfef6a68ee18dbd2e1f5a099061a3b8a0e404485 Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Fri, 19 May 2023 23:49:23 +0200 Subject: [PATCH 2/2] Fix error when running hardhat test with parameters (#4265) --- hardhat/task-test-get-files.js | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/hardhat/task-test-get-files.js b/hardhat/task-test-get-files.js index 896bf1274..108f40a42 100644 --- a/hardhat/task-test-get-files.js +++ b/hardhat/task-test-get-files.js @@ -3,33 +3,23 @@ const { TASK_TEST_GET_TEST_FILES } = require('hardhat/builtin-tasks/task-names') // Modifies `hardhat test` to skip the proxy tests after proxies are removed by the transpiler for upgradeability. -internalTask(TASK_TEST_GET_TEST_FILES).setAction(async ({ testFiles }, { config }) => { - if (testFiles.length !== 0) { - return testFiles; - } - - const globAsync = require('glob'); +internalTask(TASK_TEST_GET_TEST_FILES).setAction(async (args, hre, runSuper) => { const path = require('path'); const { promises: fs } = require('fs'); - const { promisify } = require('util'); - - const glob = promisify(globAsync); const hasProxies = await fs - .access(path.join(config.paths.sources, 'proxy/Proxy.sol')) + .access(path.join(hre.config.paths.sources, 'proxy/Proxy.sol')) .then(() => true) .catch(() => false); - return await glob(path.join(config.paths.tests, '**/*.js'), { - ignore: hasProxies - ? [] - : [ - 'proxy/beacon/BeaconProxy.test.js', - 'proxy/beacon/UpgradeableBeacon.test.js', - 'proxy/ERC1967/ERC1967Proxy.test.js', - 'proxy/transparent/ProxyAdmin.test.js', - 'proxy/transparent/TransparentUpgradeableProxy.test.js', - 'proxy/utils/UUPSUpgradeable.test.js', - ].map(p => path.join(config.paths.tests, p)), - }); + const ignoredIfProxy = [ + 'proxy/beacon/BeaconProxy.test.js', + 'proxy/beacon/UpgradeableBeacon.test.js', + 'proxy/ERC1967/ERC1967Proxy.test.js', + 'proxy/transparent/ProxyAdmin.test.js', + 'proxy/transparent/TransparentUpgradeableProxy.test.js', + 'proxy/utils/UUPSUpgradeable.test.js', + ].map(p => path.join(hre.config.paths.tests, p)); + + return (await runSuper(args)).filter(file => hasProxies || !ignoredIfProxy.includes(file)); });