@moltium/world-core 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/forge-std/.gitattributes +1 -0
- package/lib/forge-std/.github/CODEOWNERS +1 -0
- package/lib/forge-std/.github/dependabot.yml +6 -0
- package/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/lib/forge-std/CONTRIBUTING.md +193 -0
- package/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/forge-std/README.md +268 -0
- package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/lib/forge-std/foundry.toml +18 -0
- package/lib/forge-std/package.json +16 -0
- package/lib/forge-std/scripts/vm.py +636 -0
- package/lib/forge-std/src/Base.sol +48 -0
- package/lib/forge-std/src/Config.sol +60 -0
- package/lib/forge-std/src/LibVariable.sol +477 -0
- package/lib/forge-std/src/Script.sol +28 -0
- package/lib/forge-std/src/StdAssertions.sol +779 -0
- package/lib/forge-std/src/StdChains.sol +295 -0
- package/lib/forge-std/src/StdCheats.sol +825 -0
- package/lib/forge-std/src/StdConfig.sol +632 -0
- package/lib/forge-std/src/StdConstants.sol +30 -0
- package/lib/forge-std/src/StdError.sol +15 -0
- package/lib/forge-std/src/StdInvariant.sol +120 -0
- package/lib/forge-std/src/StdJson.sol +275 -0
- package/lib/forge-std/src/StdMath.sol +47 -0
- package/lib/forge-std/src/StdStorage.sol +475 -0
- package/lib/forge-std/src/StdStyle.sol +333 -0
- package/lib/forge-std/src/StdToml.sol +275 -0
- package/lib/forge-std/src/StdUtils.sol +200 -0
- package/lib/forge-std/src/Test.sol +32 -0
- package/lib/forge-std/src/Vm.sol +2500 -0
- package/lib/forge-std/src/console.sol +1551 -0
- package/lib/forge-std/src/console2.sol +4 -0
- package/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
- package/lib/forge-std/src/interfaces/IERC165.sol +12 -0
- package/lib/forge-std/src/interfaces/IERC20.sol +43 -0
- package/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
- package/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
- package/lib/forge-std/src/interfaces/IERC721.sol +164 -0
- package/lib/forge-std/src/interfaces/IERC7540.sol +144 -0
- package/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
- package/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
- package/lib/forge-std/src/safeconsole.sol +13248 -0
- package/lib/forge-std/test/CommonBase.t.sol +44 -0
- package/lib/forge-std/test/Config.t.sol +381 -0
- package/lib/forge-std/test/LibVariable.t.sol +452 -0
- package/lib/forge-std/test/StdAssertions.t.sol +141 -0
- package/lib/forge-std/test/StdChains.t.sol +227 -0
- package/lib/forge-std/test/StdCheats.t.sol +638 -0
- package/lib/forge-std/test/StdConstants.t.sol +38 -0
- package/lib/forge-std/test/StdError.t.sol +119 -0
- package/lib/forge-std/test/StdJson.t.sol +49 -0
- package/lib/forge-std/test/StdMath.t.sol +202 -0
- package/lib/forge-std/test/StdStorage.t.sol +485 -0
- package/lib/forge-std/test/StdStyle.t.sol +110 -0
- package/lib/forge-std/test/StdToml.t.sol +49 -0
- package/lib/forge-std/test/StdUtils.t.sol +342 -0
- package/lib/forge-std/test/Vm.t.sol +18 -0
- package/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
- package/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
- package/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
- package/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
- package/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
- package/lib/forge-std/test/fixtures/config.toml +81 -0
- package/lib/forge-std/test/fixtures/test.json +8 -0
- package/lib/forge-std/test/fixtures/test.toml +6 -0
- package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
- package/lib/openzeppelin-contracts/.codecov.yml +16 -0
- package/lib/openzeppelin-contracts/.editorconfig +21 -0
- package/lib/openzeppelin-contracts/.gitattributes +3 -0
- package/lib/openzeppelin-contracts/.github/CODEOWNERS +10 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
- package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +51 -0
- package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +22 -0
- package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +57 -0
- package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
- package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
- package/lib/openzeppelin-contracts/.github/workflows/checks.yml +132 -0
- package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
- package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +88 -0
- package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
- package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
- package/lib/openzeppelin-contracts/.gitmodules +10 -0
- package/lib/openzeppelin-contracts/.husky/pre-commit +2 -0
- package/lib/openzeppelin-contracts/.mocharc.js +4 -0
- package/lib/openzeppelin-contracts/.prettierrc +15 -0
- package/lib/openzeppelin-contracts/.solcover.js +21 -0
- package/lib/openzeppelin-contracts/CHANGELOG.md +1355 -0
- package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
- package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
- package/lib/openzeppelin-contracts/FUNDING.json +10 -0
- package/lib/openzeppelin-contracts/GUIDELINES.md +170 -0
- package/lib/openzeppelin-contracts/LICENSE +22 -0
- package/lib/openzeppelin-contracts/README.md +106 -0
- package/lib/openzeppelin-contracts/RELEASING.md +45 -0
- package/lib/openzeppelin-contracts/SECURITY.md +43 -0
- package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
- package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2024-10-v5.1.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2024-12-v5.2.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2025-04-v5.3.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2025-07-v5.4.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/README.md +21 -0
- package/lib/openzeppelin-contracts/certora/Makefile +54 -0
- package/lib/openzeppelin-contracts/certora/README.md +60 -0
- package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
- package/lib/openzeppelin-contracts/certora/diff/account_extensions_draft-AccountERC7579.sol.patch +25 -0
- package/lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch +11 -0
- package/lib/openzeppelin-contracts/certora/harnesses/AccessControlDefaultAdminRulesHarness.sol +46 -0
- package/lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol +6 -0
- package/lib/openzeppelin-contracts/certora/harnesses/AccessManagedHarness.sol +36 -0
- package/lib/openzeppelin-contracts/certora/harnesses/AccessManagerHarness.sol +116 -0
- package/lib/openzeppelin-contracts/certora/harnesses/AccountHarness.sol +60 -0
- package/lib/openzeppelin-contracts/certora/harnesses/DoubleEndedQueueHarness.sol +58 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC20FlashMintHarness.sol +36 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC20PermitHarness.sol +16 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC20WrapperHarness.sol +22 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC721Harness.sol +37 -0
- package/lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol +11 -0
- package/lib/openzeppelin-contracts/certora/harnesses/EnumerableMapHarness.sol +55 -0
- package/lib/openzeppelin-contracts/certora/harnesses/EnumerableSetHarness.sol +35 -0
- package/lib/openzeppelin-contracts/certora/harnesses/InitializableHarness.sol +23 -0
- package/lib/openzeppelin-contracts/certora/harnesses/NoncesHarness.sol +14 -0
- package/lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol +10 -0
- package/lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol +10 -0
- package/lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol +18 -0
- package/lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol +13 -0
- package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/run.js +68 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControl.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +467 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessManaged.conf +14 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessManaged.spec +49 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessManager.conf +10 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessManager.spec +837 -0
- package/lib/openzeppelin-contracts/certora/specs/Account.conf +9 -0
- package/lib/openzeppelin-contracts/certora/specs/Account.spec +490 -0
- package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20.conf +9 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.conf +10 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.conf +13 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +226 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC721.conf +10 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +695 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +364 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +272 -0
- package/lib/openzeppelin-contracts/certora/specs/Initializable.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +176 -0
- package/lib/openzeppelin-contracts/certora/specs/Nonces.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/Nonces.spec +92 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
- package/lib/openzeppelin-contracts/certora/specs/Pausable.conf +8 -0
- package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
- package/lib/openzeppelin-contracts/certora/specs/TimelockController.conf +10 -0
- package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +299 -0
- package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +13 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManaged.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManager.spec +33 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccount.spec +34 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
- package/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +207 -0
- package/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +98 -0
- package/lib/openzeppelin-contracts/contracts/access/Ownable.sol +100 -0
- package/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +67 -0
- package/lib/openzeppelin-contracts/contracts/access/README.adoc +45 -0
- package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol +372 -0
- package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol +81 -0
- package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol +192 -0
- package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol +31 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol +112 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol +741 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol +36 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol +32 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol +399 -0
- package/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol +14 -0
- package/lib/openzeppelin-contracts/contracts/account/Account.sol +151 -0
- package/lib/openzeppelin-contracts/contracts/account/README.adoc +30 -0
- package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579.sol +419 -0
- package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579Hooked.sol +107 -0
- package/lib/openzeppelin-contracts/contracts/account/extensions/draft-ERC7821.sol +70 -0
- package/lib/openzeppelin-contracts/contracts/account/utils/EIP7702Utils.sol +21 -0
- package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC4337Utils.sol +159 -0
- package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC7579Utils.sol +280 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/ERC7786Recipient.sol +70 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +12 -0
- package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
- package/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +159 -0
- package/lib/openzeppelin-contracts/contracts/finance/VestingWalletCliff.sol +54 -0
- package/lib/openzeppelin-contracts/contracts/governance/Governor.sol +818 -0
- package/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +454 -0
- package/lib/openzeppelin-contracts/contracts/governance/README.adoc +197 -0
- package/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +471 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingFractional.sol +190 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingOverridable.sol +222 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +96 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorNoncesKeyed.sol +91 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +92 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorProposalGuardian.sol +59 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSequentialProposalId.sol +75 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +106 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol +125 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSuperQuorum.sol +59 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol +346 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +165 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +167 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +63 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +113 -0
- package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol +135 -0
- package/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +60 -0
- package/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +252 -0
- package/lib/openzeppelin-contracts/contracts/governance/utils/VotesExtended.sol +84 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +86 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +32 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +112 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +24 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +8 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +7 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +27 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +41 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +230 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +16 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +9 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC6909.sol +125 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +6 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC7751.sol +12 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +200 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/IERC7913.sol +18 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +111 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC4337.sol +253 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol +162 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7579.sol +227 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7674.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7786.sol +64 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7802.sol +32 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7821.sol +44 -0
- package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +90 -0
- package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol +372 -0
- package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol +34 -0
- package/lib/openzeppelin-contracts/contracts/mocks/AccessManagerMock.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ArraysMock.sol +171 -0
- package/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol +69 -0
- package/lib/openzeppelin-contracts/contracts/mocks/Base64Dirty.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/mocks/BatchCaller.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/mocks/CallReceiverMock.sol +106 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ConstructorMock.sol +34 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ContextMock.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/mocks/DummyImplementation.sol +65 -0
- package/lib/openzeppelin-contracts/contracts/mocks/EIP712Verifier.sol +16 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol +24 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol +100 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ERC3156FlashBorrowerMock.sol +53 -0
- package/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/InitializableMock.sol +130 -0
- package/lib/openzeppelin-contracts/contracts/mocks/MerkleProofCustomHashMock.sol +62 -0
- package/lib/openzeppelin-contracts/contracts/mocks/MerkleTreeMock.sol +52 -0
- package/lib/openzeppelin-contracts/contracts/mocks/MulticallHelper.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/mocks/MultipleInheritanceInitializableMocks.sol +131 -0
- package/lib/openzeppelin-contracts/contracts/mocks/PausableMock.sol +31 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyMock.sol +59 -0
- package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyTransientMock.sol +59 -0
- package/lib/openzeppelin-contracts/contracts/mocks/RegressionImplementation.sol +61 -0
- package/lib/openzeppelin-contracts/contracts/mocks/SingleInheritanceInitializableMocks.sol +49 -0
- package/lib/openzeppelin-contracts/contracts/mocks/Stateless.sol +61 -0
- package/lib/openzeppelin-contracts/contracts/mocks/StorageSlotMock.sol +87 -0
- package/lib/openzeppelin-contracts/contracts/mocks/TimelockReentrant.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/mocks/TransientSlotMock.sol +61 -0
- package/lib/openzeppelin-contracts/contracts/mocks/UpgradeableBeaconMock.sol +27 -0
- package/lib/openzeppelin-contracts/contracts/mocks/VotesExtendedMock.sol +42 -0
- package/lib/openzeppelin-contracts/contracts/mocks/VotesMock.sol +42 -0
- package/lib/openzeppelin-contracts/contracts/mocks/account/AccountMock.sol +181 -0
- package/lib/openzeppelin-contracts/contracts/mocks/account/modules/ERC7579Mock.sol +122 -0
- package/lib/openzeppelin-contracts/contracts/mocks/account/utils/ERC7579UtilsMock.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/mocks/compound/CompTimelock.sol +174 -0
- package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786GatewayMock.sol +56 -0
- package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786RecipientMock.sol +31 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC20WithAutoMinerReward.sol +22 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC4626Fees.sol +109 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/MyNFT.sol +9 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintBase.sol +25 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintMissing.sol +24 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintOnlyRole.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlModified.sol +14 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessManagedERC20MintBase.sol +16 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/MyContractOwnable.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyAccountERC7702.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyFactoryAccount.sol +37 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyGovernor.sol +80 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyToken.sol +21 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +32 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenWrapped.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/GameItems.sol +21 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/MyERC115HolderContract.sol +7 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC20/GLDToken.sol +11 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC6909/ERC6909GameItems.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC721/GameItem.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Base64NFT.sol +27 -0
- package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Multicall.sol +15 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCountingOverridableMock.sol +18 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorFractionalMock.sol +14 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorMock.sol +14 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorNoncesKeyedMock.sol +44 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorPreventLateQuorumMock.sol +40 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorProposalGuardianMock.sol +27 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSequentialProposalIdMock.sol +39 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorStorageMock.sol +79 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSuperQuorumMock.sol +95 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockAccessMock.sol +70 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockCompoundMock.sol +69 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockControlMock.sol +69 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVoteMock.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVotesSuperQuorumFractionMock.sol +37 -0
- package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorWithParamsMock.sol +51 -0
- package/lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol +11 -0
- package/lib/openzeppelin-contracts/contracts/mocks/proxy/ClashingImplementation.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSUpgradeableMock.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1155ReceiverMock.sol +74 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ForceApproveMock.sol +13 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363NoReturnMock.sol +33 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReceiverMock.sol +52 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReturnFalseMock.sol +34 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363SpenderMock.sol +47 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ApprovalMock.sol +10 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20BridgeableMock.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol +9 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20FlashMintMock.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +13 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20GetterHelper.sol +38 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Mock.sol +16 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol +8 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20NoReturnMock.sol +30 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Reentrant.sol +39 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ReturnFalseMock.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol +31 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesLegacyMock.sol +253 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesTimestampMock.sol +29 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626LimitsMock.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626Mock.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4646FeesMock.sol +40 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveEnumerableMock.sol +42 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveMock.sol +61 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ReceiverMock.sol +47 -0
- package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721URIStorageMock.sol +17 -0
- package/lib/openzeppelin-contracts/contracts/mocks/utils/cryptography/ERC7739Mock.sol +12 -0
- package/lib/openzeppelin-contracts/contracts/package.json +32 -0
- package/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +294 -0
- package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +40 -0
- package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol +177 -0
- package/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +69 -0
- package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
- package/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +57 -0
- package/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +16 -0
- package/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +70 -0
- package/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +45 -0
- package/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +118 -0
- package/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +238 -0
- package/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +148 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +389 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +123 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +59 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +43 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +38 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +88 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +61 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +42 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Utils.sol +88 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +305 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +79 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +78 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC1363.sol +135 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +39 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +54 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +134 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +33 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +77 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +83 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +89 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +305 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +90 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Bridgeable.sol +51 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20TemporaryApproval.sol +119 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/ERC1363Utils.sol +95 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +280 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/ERC6909.sol +224 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/README.adoc +27 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909ContentURI.sol +53 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909Metadata.sol +77 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +430 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +135 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +69 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +176 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +164 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +37 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +58 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +47 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +102 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +27 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +26 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol +50 -0
- package/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +139 -0
- package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
- package/lib/openzeppelin-contracts/contracts/utils/Address.sol +167 -0
- package/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +735 -0
- package/lib/openzeppelin-contracts/contracts/utils/Base58.sol +240 -0
- package/lib/openzeppelin-contracts/contracts/utils/Base64.sol +234 -0
- package/lib/openzeppelin-contracts/contracts/utils/Blockhash.sol +54 -0
- package/lib/openzeppelin-contracts/contracts/utils/Bytes.sol +247 -0
- package/lib/openzeppelin-contracts/contracts/utils/CAIP10.sol +54 -0
- package/lib/openzeppelin-contracts/contracts/utils/CAIP2.sol +51 -0
- package/lib/openzeppelin-contracts/contracts/utils/Calldata.sol +25 -0
- package/lib/openzeppelin-contracts/contracts/utils/Comparators.sol +19 -0
- package/lib/openzeppelin-contracts/contracts/utils/Context.sol +28 -0
- package/lib/openzeppelin-contracts/contracts/utils/Create2.sol +91 -0
- package/lib/openzeppelin-contracts/contracts/utils/Errors.sol +34 -0
- package/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol +127 -0
- package/lib/openzeppelin-contracts/contracts/utils/Memory.sol +135 -0
- package/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +37 -0
- package/lib/openzeppelin-contracts/contracts/utils/Nonces.sol +46 -0
- package/lib/openzeppelin-contracts/contracts/utils/NoncesKeyed.sol +74 -0
- package/lib/openzeppelin-contracts/contracts/utils/Packing.sol +1656 -0
- package/lib/openzeppelin-contracts/contracts/utils/Panic.sol +57 -0
- package/lib/openzeppelin-contracts/contracts/utils/Pausable.sol +112 -0
- package/lib/openzeppelin-contracts/contracts/utils/README.adoc +160 -0
- package/lib/openzeppelin-contracts/contracts/utils/RLP.sol +382 -0
- package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol +119 -0
- package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol +84 -0
- package/lib/openzeppelin-contracts/contracts/utils/RelayedCall.sol +133 -0
- package/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +122 -0
- package/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol +155 -0
- package/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +143 -0
- package/lib/openzeppelin-contracts/contracts/utils/Strings.sol +508 -0
- package/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol +183 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +284 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +160 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol +31 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +514 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +99 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +408 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/README.adoc +73 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/RSA.sol +154 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +164 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/WebAuthn.sol +261 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-ERC7739Utils.sol +208 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/AbstractSigner.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913.sol +252 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol +208 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerECDSA.sol +56 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerEIP7702.sol +25 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerERC7913.sol +63 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerP256.sol +64 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerRSA.sol +65 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerWebAuthn.sol +51 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/draft-ERC7739.sol +98 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913P256Verifier.sol +29 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913RSAVerifier.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol +35 -0
- package/lib/openzeppelin-contracts/contracts/utils/draft-InteroperableAddress.sol +235 -0
- package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +25 -0
- package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +142 -0
- package/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +25 -0
- package/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +756 -0
- package/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +1162 -0
- package/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +68 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/Accumulators.sol +130 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +60 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol +833 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/CircularBuffer.sol +141 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +156 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +1319 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +792 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/Heap.sol +256 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/MerkleTree.sol +267 -0
- package/lib/openzeppelin-contracts/contracts/utils/types/Time.sol +133 -0
- package/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +86 -0
- package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
- package/lib/openzeppelin-contracts/docs/README.md +16 -0
- package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
- package/lib/openzeppelin-contracts/docs/config.js +21 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-control-multiple.svg +97 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager-functions.svg +47 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager.svg +99 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +29 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +295 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/account-abstraction.adoc +100 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/accounts.adoc +354 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +50 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/eoa-delegation.adoc +143 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +118 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +67 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc6909.adoc +47 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +58 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +51 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +239 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +70 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/multisig.adoc +306 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +634 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
- package/lib/openzeppelin-contracts/docs/templates/contract.hbs +141 -0
- package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
- package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
- package/lib/openzeppelin-contracts/docs/templates/properties.js +88 -0
- package/lib/openzeppelin-contracts/eslint.config.mjs +26 -0
- package/lib/openzeppelin-contracts/foundry.toml +20 -0
- package/lib/openzeppelin-contracts/fv-requirements.txt +4 -0
- package/lib/openzeppelin-contracts/hardhat/async-test-sanity.js +10 -0
- package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +29 -0
- package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
- package/lib/openzeppelin-contracts/hardhat/remappings.js +18 -0
- package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
- package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
- package/lib/openzeppelin-contracts/hardhat.config.js +125 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.prop.sol +404 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.test.sol +356 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.gitattributes +1 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +128 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/sync.yml +31 -0
- package/lib/openzeppelin-contracts/lib/forge-std/CONTRIBUTING.md +193 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/openzeppelin-contracts/lib/forge-std/README.md +266 -0
- package/lib/openzeppelin-contracts/lib/forge-std/foundry.toml +23 -0
- package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
- package/lib/openzeppelin-contracts/lib/forge-std/scripts/vm.py +646 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/Base.sol +35 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/Script.sol +27 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdAssertions.sol +669 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdChains.sol +287 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdCheats.sol +829 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdError.sol +15 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdInvariant.sol +122 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdJson.sol +283 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdMath.sol +43 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdStorage.sol +473 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdStyle.sol +333 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdToml.sol +283 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/StdUtils.sol +209 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/Test.sol +33 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/Vm.sol +2263 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/console.sol +1560 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/console2.sol +4 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IMulticall3.sol +73 -0
- package/lib/openzeppelin-contracts/lib/forge-std/src/safeconsole.sol +13937 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdAssertions.t.sol +141 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdChains.t.sol +227 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdCheats.t.sol +618 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdError.t.sol +120 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdJson.t.sol +49 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdMath.t.sol +202 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdStorage.t.sol +488 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdToml.t.sol +49 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/StdUtils.t.sol +342 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/Vm.t.sol +18 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol +10 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +10 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol +10 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +10 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.json +8 -0
- package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.toml +6 -0
- package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/LICENSE +661 -0
- package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/README.md +97 -0
- package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SVM.sol +49 -0
- package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SymTest.sol +11 -0
- package/lib/openzeppelin-contracts/logo.svg +15 -0
- package/lib/openzeppelin-contracts/netlify.toml +3 -0
- package/lib/openzeppelin-contracts/package-lock.json +11090 -0
- package/lib/openzeppelin-contracts/package.json +107 -0
- package/lib/openzeppelin-contracts/remappings.txt +1 -0
- package/lib/openzeppelin-contracts/renovate.json +4 -0
- package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +28 -0
- package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +249 -0
- package/lib/openzeppelin-contracts/scripts/checks/coverage.sh +24 -0
- package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +39 -0
- package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +55 -0
- package/lib/openzeppelin-contracts/scripts/checks/pragma-validity.js +45 -0
- package/lib/openzeppelin-contracts/scripts/fetch-common-contracts.js +50 -0
- package/lib/openzeppelin-contracts/scripts/gen-nav.js +81 -0
- package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
- package/lib/openzeppelin-contracts/scripts/generate/helpers/sanitize.js +5 -0
- package/lib/openzeppelin-contracts/scripts/generate/run.js +61 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.js +454 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.opts.js +9 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +242 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +18 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +141 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Enumerable.opts.js +53 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +463 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +469 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.js +187 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.opts.js +11 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.js +92 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.opts.js +3 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.t.js +48 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +136 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Slot.opts.js +15 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.js +119 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.t.js +127 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +77 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlotMock.js +57 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlot.js +80 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlotMock.js +35 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
- package/lib/openzeppelin-contracts/scripts/get-contracts-metadata.js +55 -0
- package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/helpers.js +7 -0
- package/lib/openzeppelin-contracts/scripts/minimize-pragma.js +138 -0
- package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
- package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
- package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
- package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
- package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
- package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
- package/lib/openzeppelin-contracts/scripts/set-max-old-space-size.sh +10 -0
- package/lib/openzeppelin-contracts/scripts/solc-versions.js +15 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +118 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +8 -0
- package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/alias/Initializable.sol +5 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/alias/UUPSUpgradeable.sol +5 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +49 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +425 -0
- package/lib/openzeppelin-contracts/slither.config.json +4 -0
- package/lib/openzeppelin-contracts/solhint.config.js +29 -0
- package/lib/openzeppelin-contracts/test/TESTING.md +3 -0
- package/lib/openzeppelin-contracts/test/access/AccessControl.behavior.js +874 -0
- package/lib/openzeppelin-contracts/test/access/AccessControl.test.js +19 -0
- package/lib/openzeppelin-contracts/test/access/Ownable.test.js +79 -0
- package/lib/openzeppelin-contracts/test/access/Ownable2Step.test.js +102 -0
- package/lib/openzeppelin-contracts/test/access/extensions/AccessControlDefaultAdminRules.test.js +32 -0
- package/lib/openzeppelin-contracts/test/access/extensions/AccessControlEnumerable.test.js +24 -0
- package/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js +146 -0
- package/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js +257 -0
- package/lib/openzeppelin-contracts/test/access/manager/AccessManager.predicate.js +456 -0
- package/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js +2489 -0
- package/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js +112 -0
- package/lib/openzeppelin-contracts/test/account/Account.behavior.js +144 -0
- package/lib/openzeppelin-contracts/test/account/Account.test.js +48 -0
- package/lib/openzeppelin-contracts/test/account/AccountECDSA.test.js +52 -0
- package/lib/openzeppelin-contracts/test/account/AccountERC7702.t.sol +113 -0
- package/lib/openzeppelin-contracts/test/account/AccountERC7702.test.js +52 -0
- package/lib/openzeppelin-contracts/test/account/AccountERC7913.test.js +138 -0
- package/lib/openzeppelin-contracts/test/account/AccountMultiSigner.test.js +326 -0
- package/lib/openzeppelin-contracts/test/account/AccountMultiSignerWeighted.test.js +312 -0
- package/lib/openzeppelin-contracts/test/account/AccountP256.test.js +58 -0
- package/lib/openzeppelin-contracts/test/account/AccountRSA.test.js +58 -0
- package/lib/openzeppelin-contracts/test/account/AccountWebAuthn.test.js +88 -0
- package/lib/openzeppelin-contracts/test/account/examples/AccountERC7702WithModulesMock.test.js +99 -0
- package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.behavior.js +601 -0
- package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.test.js +60 -0
- package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579Hooked.test.js +60 -0
- package/lib/openzeppelin-contracts/test/account/extensions/ERC7821.behavior.js +145 -0
- package/lib/openzeppelin-contracts/test/account/utils/EIP7702Utils.test.js +53 -0
- package/lib/openzeppelin-contracts/test/account/utils/draft-ERC4337Utils.test.js +289 -0
- package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.t.sol +434 -0
- package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.test.js +399 -0
- package/lib/openzeppelin-contracts/test/crosschain/ERC7786Recipient.test.js +73 -0
- package/lib/openzeppelin-contracts/test/finance/VestingWallet.behavior.js +87 -0
- package/lib/openzeppelin-contracts/test/finance/VestingWallet.test.js +65 -0
- package/lib/openzeppelin-contracts/test/finance/VestingWalletCliff.test.js +70 -0
- package/lib/openzeppelin-contracts/test/governance/Governor.t.sol +59 -0
- package/lib/openzeppelin-contracts/test/governance/Governor.test.js +980 -0
- package/lib/openzeppelin-contracts/test/governance/TimelockController.test.js +1279 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingFractional.test.js +248 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingOverridable.test.js +346 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorERC721.test.js +131 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorNoncesKeyed.test.js +244 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorPreventLateQuorum.test.js +185 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorProposalGuardian.test.js +132 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSequentialProposalId.test.js +202 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorStorage.test.js +155 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorum.test.js +168 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol +83 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js +864 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockCompound.test.js +448 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockControl.test.js +504 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesQuorumFraction.test.js +165 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesSuperQuorumFraction.test.js +160 -0
- package/lib/openzeppelin-contracts/test/governance/extensions/GovernorWithParams.test.js +245 -0
- package/lib/openzeppelin-contracts/test/governance/utils/ERC6372.behavior.js +28 -0
- package/lib/openzeppelin-contracts/test/governance/utils/Votes.behavior.js +325 -0
- package/lib/openzeppelin-contracts/test/governance/utils/Votes.test.js +102 -0
- package/lib/openzeppelin-contracts/test/governance/utils/VotesExtended.test.js +152 -0
- package/lib/openzeppelin-contracts/test/helpers/access-manager.js +85 -0
- package/lib/openzeppelin-contracts/test/helpers/account.js +14 -0
- package/lib/openzeppelin-contracts/test/helpers/chains.js +56 -0
- package/lib/openzeppelin-contracts/test/helpers/constants.js +7 -0
- package/lib/openzeppelin-contracts/test/helpers/deploy.js +14 -0
- package/lib/openzeppelin-contracts/test/helpers/eip712-types.js +61 -0
- package/lib/openzeppelin-contracts/test/helpers/eip712.js +45 -0
- package/lib/openzeppelin-contracts/test/helpers/enums.js +14 -0
- package/lib/openzeppelin-contracts/test/helpers/erc4337.js +217 -0
- package/lib/openzeppelin-contracts/test/helpers/erc7579.js +58 -0
- package/lib/openzeppelin-contracts/test/helpers/erc7739.js +118 -0
- package/lib/openzeppelin-contracts/test/helpers/governance.js +217 -0
- package/lib/openzeppelin-contracts/test/helpers/iterate.js +41 -0
- package/lib/openzeppelin-contracts/test/helpers/math.js +33 -0
- package/lib/openzeppelin-contracts/test/helpers/methods.js +14 -0
- package/lib/openzeppelin-contracts/test/helpers/precompiles.js +12 -0
- package/lib/openzeppelin-contracts/test/helpers/random.js +24 -0
- package/lib/openzeppelin-contracts/test/helpers/signers.js +222 -0
- package/lib/openzeppelin-contracts/test/helpers/storage.js +48 -0
- package/lib/openzeppelin-contracts/test/helpers/strings.js +5 -0
- package/lib/openzeppelin-contracts/test/helpers/time.js +33 -0
- package/lib/openzeppelin-contracts/test/helpers/txpool.js +29 -0
- package/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +109 -0
- package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.t.sol +279 -0
- package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js +384 -0
- package/lib/openzeppelin-contracts/test/proxy/Clones.behaviour.js +160 -0
- package/lib/openzeppelin-contracts/test/proxy/Clones.t.sol +91 -0
- package/lib/openzeppelin-contracts/test/proxy/Clones.test.js +177 -0
- package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js +23 -0
- package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Utils.test.js +162 -0
- package/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +185 -0
- package/lib/openzeppelin-contracts/test/proxy/beacon/BeaconProxy.test.js +141 -0
- package/lib/openzeppelin-contracts/test/proxy/beacon/UpgradeableBeacon.test.js +55 -0
- package/lib/openzeppelin-contracts/test/proxy/transparent/ProxyAdmin.test.js +82 -0
- package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.behaviour.js +357 -0
- package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.test.js +28 -0
- package/lib/openzeppelin-contracts/test/proxy/utils/Initializable.test.js +216 -0
- package/lib/openzeppelin-contracts/test/proxy/utils/UUPSUpgradeable.test.js +120 -0
- package/lib/openzeppelin-contracts/test/sanity.test.js +27 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.behavior.js +763 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +213 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Burnable.test.js +66 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Pausable.test.js +105 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js +119 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155URIStorage.test.js +70 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Holder.test.js +56 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Utils.test.js +299 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.behavior.js +269 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.test.js +199 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC1363.test.js +370 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.test.js +105 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.test.js +55 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20FlashMint.test.js +164 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Pausable.test.js +129 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Permit.test.js +109 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Votes.test.js +546 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Wrapper.test.js +203 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.t.sol +41 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +888 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20Bridgeable.test.js +89 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20TemporaryApproval.test.js +142 -0
- package/lib/openzeppelin-contracts/test/token/ERC20/utils/SafeERC20.test.js +463 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.behavior.js +216 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.test.js +104 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909ContentURI.test.js +49 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909Metadata.test.js +58 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909TokenSupply.test.js +53 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +946 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js +23 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js +28 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Burnable.test.js +77 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.t.sol +187 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.test.js +228 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Pausable.test.js +81 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Royalty.test.js +57 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721URIStorage.test.js +121 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Votes.test.js +194 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Wrapper.test.js +201 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Holder.test.js +20 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Utils.test.js +94 -0
- package/lib/openzeppelin-contracts/test/token/common/ERC2981.behavior.js +152 -0
- package/lib/openzeppelin-contracts/test/utils/Address.test.js +332 -0
- package/lib/openzeppelin-contracts/test/utils/Arrays.t.sol +248 -0
- package/lib/openzeppelin-contracts/test/utils/Arrays.test.js +284 -0
- package/lib/openzeppelin-contracts/test/utils/Base58.t.sol +24 -0
- package/lib/openzeppelin-contracts/test/utils/Base58.test.js +65 -0
- package/lib/openzeppelin-contracts/test/utils/Base64.t.sol +36 -0
- package/lib/openzeppelin-contracts/test/utils/Base64.test.js +79 -0
- package/lib/openzeppelin-contracts/test/utils/Blockhash.t.sol +101 -0
- package/lib/openzeppelin-contracts/test/utils/Blockhash.test.js +59 -0
- package/lib/openzeppelin-contracts/test/utils/Bytes.t.sol +251 -0
- package/lib/openzeppelin-contracts/test/utils/Bytes.test.js +359 -0
- package/lib/openzeppelin-contracts/test/utils/CAIP.test.js +56 -0
- package/lib/openzeppelin-contracts/test/utils/Calldata.test.js +22 -0
- package/lib/openzeppelin-contracts/test/utils/Context.behavior.js +48 -0
- package/lib/openzeppelin-contracts/test/utils/Context.test.js +18 -0
- package/lib/openzeppelin-contracts/test/utils/Create2.t.sol +17 -0
- package/lib/openzeppelin-contracts/test/utils/Create2.test.js +190 -0
- package/lib/openzeppelin-contracts/test/utils/LowLevelCall.test.js +257 -0
- package/lib/openzeppelin-contracts/test/utils/Memory.t.sol +38 -0
- package/lib/openzeppelin-contracts/test/utils/Memory.test.js +106 -0
- package/lib/openzeppelin-contracts/test/utils/Multicall.test.js +72 -0
- package/lib/openzeppelin-contracts/test/utils/Nonces.behavior.js +189 -0
- package/lib/openzeppelin-contracts/test/utils/Nonces.test.js +16 -0
- package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.t.sol +51 -0
- package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.test.js +17 -0
- package/lib/openzeppelin-contracts/test/utils/Packing.t.sol +993 -0
- package/lib/openzeppelin-contracts/test/utils/Packing.test.js +70 -0
- package/lib/openzeppelin-contracts/test/utils/Panic.test.js +37 -0
- package/lib/openzeppelin-contracts/test/utils/Pausable.test.js +90 -0
- package/lib/openzeppelin-contracts/test/utils/RLP.t.sol +135 -0
- package/lib/openzeppelin-contracts/test/utils/RLP.test.js +149 -0
- package/lib/openzeppelin-contracts/test/utils/ReentrancyGuard.test.js +58 -0
- package/lib/openzeppelin-contracts/test/utils/RelayedCall.test.js +217 -0
- package/lib/openzeppelin-contracts/test/utils/ShortStrings.t.sol +109 -0
- package/lib/openzeppelin-contracts/test/utils/ShortStrings.test.js +64 -0
- package/lib/openzeppelin-contracts/test/utils/SlotDerivation.t.sol +248 -0
- package/lib/openzeppelin-contracts/test/utils/SlotDerivation.test.js +58 -0
- package/lib/openzeppelin-contracts/test/utils/StorageSlot.test.js +73 -0
- package/lib/openzeppelin-contracts/test/utils/Strings.t.sol +50 -0
- package/lib/openzeppelin-contracts/test/utils/Strings.test.js +360 -0
- package/lib/openzeppelin-contracts/test/utils/TransientSlot.test.js +59 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/ECDSA.test.js +318 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/EIP712.test.js +105 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/ERC1271.behavior.js +111 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739.test.js +42 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739Utils.test.js +203 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/MerkleProof.test.js +213 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.t.sol +33 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.test.js +97 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/P256.t.sol +65 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/P256.test.js +182 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.helper.js +17 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.test.js +102 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/SigVer15_186-3.rsp +3850 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/SignatureChecker.test.js +422 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/WebAuthn.t.sol +297 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/ecdsa_secp256r1_sha256_p1363_test.json +3719 -0
- package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.t.sol +99 -0
- package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.test.js +170 -0
- package/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js +18 -0
- package/lib/openzeppelin-contracts/test/utils/introspection/ERC165Checker.test.js +272 -0
- package/lib/openzeppelin-contracts/test/utils/introspection/SupportsInterface.behavior.js +166 -0
- package/lib/openzeppelin-contracts/test/utils/math/Math.t.sol +370 -0
- package/lib/openzeppelin-contracts/test/utils/math/Math.test.js +746 -0
- package/lib/openzeppelin-contracts/test/utils/math/SafeCast.test.js +159 -0
- package/lib/openzeppelin-contracts/test/utils/math/SignedMath.t.sol +81 -0
- package/lib/openzeppelin-contracts/test/utils/math/SignedMath.test.js +53 -0
- package/lib/openzeppelin-contracts/test/utils/structs/Accumulators.t.sol +35 -0
- package/lib/openzeppelin-contracts/test/utils/structs/BitMap.test.js +149 -0
- package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.t.sol +440 -0
- package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.test.js +147 -0
- package/lib/openzeppelin-contracts/test/utils/structs/CircularBuffer.test.js +83 -0
- package/lib/openzeppelin-contracts/test/utils/structs/DoubleEndedQueue.test.js +102 -0
- package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.behavior.js +214 -0
- package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.test.js +83 -0
- package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.behavior.js +175 -0
- package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.test.js +66 -0
- package/lib/openzeppelin-contracts/test/utils/structs/Heap.t.sol +74 -0
- package/lib/openzeppelin-contracts/test/utils/structs/Heap.test.js +113 -0
- package/lib/openzeppelin-contracts/test/utils/structs/MerkleTree.test.js +180 -0
- package/lib/openzeppelin-contracts/test/utils/types/Time.test.js +135 -0
- package/package.json +3 -3
package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v5.5.0) (access/extensions/AccessControlDefaultAdminRules.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.20;
|
|
5
|
+
|
|
6
|
+
import {IAccessControlDefaultAdminRules} from "./IAccessControlDefaultAdminRules.sol";
|
|
7
|
+
import {AccessControl, IAccessControl} from "../AccessControl.sol";
|
|
8
|
+
import {SafeCast} from "../../utils/math/SafeCast.sol";
|
|
9
|
+
import {Math} from "../../utils/math/Math.sol";
|
|
10
|
+
import {IERC5313} from "../../interfaces/IERC5313.sol";
|
|
11
|
+
import {IERC165} from "../../utils/introspection/IERC165.sol";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @dev Extension of {AccessControl} that allows specifying special rules to manage
|
|
15
|
+
* the `DEFAULT_ADMIN_ROLE` holder, which is a sensitive role with special permissions
|
|
16
|
+
* over other roles that may potentially have privileged rights in the system.
|
|
17
|
+
*
|
|
18
|
+
* If a specific role doesn't have an admin role assigned, the holder of the
|
|
19
|
+
* `DEFAULT_ADMIN_ROLE` will have the ability to grant it and revoke it.
|
|
20
|
+
*
|
|
21
|
+
* This contract implements the following risk mitigations on top of {AccessControl}:
|
|
22
|
+
*
|
|
23
|
+
* * Only one account holds the `DEFAULT_ADMIN_ROLE` since deployment until it's potentially renounced.
|
|
24
|
+
* * Enforces a 2-step process to transfer the `DEFAULT_ADMIN_ROLE` to another account.
|
|
25
|
+
* * Enforces a configurable delay between the two steps, with the ability to cancel before the transfer is accepted.
|
|
26
|
+
* * The delay can be changed by scheduling, see {changeDefaultAdminDelay}.
|
|
27
|
+
* * Role transfers must wait at least one block after scheduling before it can be accepted.
|
|
28
|
+
* * It is not possible to use another role to manage the `DEFAULT_ADMIN_ROLE`.
|
|
29
|
+
*
|
|
30
|
+
* Example usage:
|
|
31
|
+
*
|
|
32
|
+
* ```solidity
|
|
33
|
+
* contract MyToken is AccessControlDefaultAdminRules {
|
|
34
|
+
* constructor() AccessControlDefaultAdminRules(
|
|
35
|
+
* 3 days,
|
|
36
|
+
* msg.sender // Explicit initial `DEFAULT_ADMIN_ROLE` holder
|
|
37
|
+
* ) {}
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
abstract contract AccessControlDefaultAdminRules is IAccessControlDefaultAdminRules, IERC5313, AccessControl {
|
|
42
|
+
// pending admin pair read/written together frequently
|
|
43
|
+
address private _pendingDefaultAdmin;
|
|
44
|
+
uint48 private _pendingDefaultAdminSchedule; // 0 == unset
|
|
45
|
+
|
|
46
|
+
uint48 private _currentDelay;
|
|
47
|
+
address private _currentDefaultAdmin;
|
|
48
|
+
|
|
49
|
+
// pending delay pair read/written together frequently
|
|
50
|
+
uint48 private _pendingDelay;
|
|
51
|
+
uint48 private _pendingDelaySchedule; // 0 == unset
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @dev Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address.
|
|
55
|
+
*/
|
|
56
|
+
constructor(uint48 initialDelay, address initialDefaultAdmin) {
|
|
57
|
+
if (initialDefaultAdmin == address(0)) {
|
|
58
|
+
revert AccessControlInvalidDefaultAdmin(address(0));
|
|
59
|
+
}
|
|
60
|
+
_currentDelay = initialDelay;
|
|
61
|
+
_grantRole(DEFAULT_ADMIN_ROLE, initialDefaultAdmin);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// @inheritdoc IERC165
|
|
65
|
+
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
|
|
66
|
+
return interfaceId == type(IAccessControlDefaultAdminRules).interfaceId || super.supportsInterface(interfaceId);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// @inheritdoc IERC5313
|
|
70
|
+
function owner() public view virtual returns (address) {
|
|
71
|
+
return defaultAdmin();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
///
|
|
75
|
+
/// Override AccessControl role management
|
|
76
|
+
///
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @dev See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`.
|
|
80
|
+
*/
|
|
81
|
+
function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
|
|
82
|
+
if (role == DEFAULT_ADMIN_ROLE) {
|
|
83
|
+
revert AccessControlEnforcedDefaultAdminRules();
|
|
84
|
+
}
|
|
85
|
+
super.grantRole(role, account);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @dev See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`.
|
|
90
|
+
*/
|
|
91
|
+
function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
|
|
92
|
+
if (role == DEFAULT_ADMIN_ROLE) {
|
|
93
|
+
revert AccessControlEnforcedDefaultAdminRules();
|
|
94
|
+
}
|
|
95
|
+
super.revokeRole(role, account);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @dev See {AccessControl-renounceRole}.
|
|
100
|
+
*
|
|
101
|
+
* For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling
|
|
102
|
+
* {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule
|
|
103
|
+
* has also passed when calling this function.
|
|
104
|
+
*
|
|
105
|
+
* After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions.
|
|
106
|
+
*
|
|
107
|
+
* NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin},
|
|
108
|
+
* thereby disabling any functionality that is only available for it, and the possibility of reassigning a
|
|
109
|
+
* non-administrated role.
|
|
110
|
+
*/
|
|
111
|
+
function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {
|
|
112
|
+
if (role == DEFAULT_ADMIN_ROLE && account == defaultAdmin()) {
|
|
113
|
+
(address newDefaultAdmin, uint48 schedule) = pendingDefaultAdmin();
|
|
114
|
+
if (newDefaultAdmin != address(0) || !_isScheduleSet(schedule) || !_hasSchedulePassed(schedule)) {
|
|
115
|
+
revert AccessControlEnforcedDefaultAdminDelay(schedule);
|
|
116
|
+
}
|
|
117
|
+
delete _pendingDefaultAdminSchedule;
|
|
118
|
+
}
|
|
119
|
+
super.renounceRole(role, account);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @dev See {AccessControl-_grantRole}.
|
|
124
|
+
*
|
|
125
|
+
* For `DEFAULT_ADMIN_ROLE`, it only allows granting if there isn't already a {defaultAdmin} or if the
|
|
126
|
+
* role has been previously renounced.
|
|
127
|
+
*
|
|
128
|
+
* NOTE: Exposing this function through another mechanism may make the `DEFAULT_ADMIN_ROLE`
|
|
129
|
+
* assignable again. Make sure to guarantee this is the expected behavior in your implementation.
|
|
130
|
+
*/
|
|
131
|
+
function _grantRole(bytes32 role, address account) internal virtual override returns (bool) {
|
|
132
|
+
if (role == DEFAULT_ADMIN_ROLE) {
|
|
133
|
+
if (defaultAdmin() != address(0)) {
|
|
134
|
+
revert AccessControlEnforcedDefaultAdminRules();
|
|
135
|
+
}
|
|
136
|
+
_currentDefaultAdmin = account;
|
|
137
|
+
}
|
|
138
|
+
return super._grantRole(role, account);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// @inheritdoc AccessControl
|
|
142
|
+
function _revokeRole(bytes32 role, address account) internal virtual override returns (bool) {
|
|
143
|
+
if (role == DEFAULT_ADMIN_ROLE && account == defaultAdmin()) {
|
|
144
|
+
delete _currentDefaultAdmin;
|
|
145
|
+
}
|
|
146
|
+
return super._revokeRole(role, account);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @dev See {AccessControl-_setRoleAdmin}. Reverts for `DEFAULT_ADMIN_ROLE`.
|
|
151
|
+
*/
|
|
152
|
+
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual override {
|
|
153
|
+
if (role == DEFAULT_ADMIN_ROLE) {
|
|
154
|
+
revert AccessControlEnforcedDefaultAdminRules();
|
|
155
|
+
}
|
|
156
|
+
super._setRoleAdmin(role, adminRole);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
///
|
|
160
|
+
/// AccessControlDefaultAdminRules accessors
|
|
161
|
+
///
|
|
162
|
+
|
|
163
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
164
|
+
function defaultAdmin() public view virtual returns (address) {
|
|
165
|
+
return _currentDefaultAdmin;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
169
|
+
function pendingDefaultAdmin() public view virtual returns (address newAdmin, uint48 schedule) {
|
|
170
|
+
return (_pendingDefaultAdmin, _pendingDefaultAdminSchedule);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
174
|
+
function defaultAdminDelay() public view virtual returns (uint48) {
|
|
175
|
+
uint48 schedule = _pendingDelaySchedule;
|
|
176
|
+
return (_isScheduleSet(schedule) && _hasSchedulePassed(schedule)) ? _pendingDelay : _currentDelay;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
180
|
+
function pendingDefaultAdminDelay() public view virtual returns (uint48 newDelay, uint48 schedule) {
|
|
181
|
+
schedule = _pendingDelaySchedule;
|
|
182
|
+
return (_isScheduleSet(schedule) && !_hasSchedulePassed(schedule)) ? (_pendingDelay, schedule) : (0, 0);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
186
|
+
function defaultAdminDelayIncreaseWait() public view virtual returns (uint48) {
|
|
187
|
+
return 5 days;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
///
|
|
191
|
+
/// AccessControlDefaultAdminRules public and internal setters for defaultAdmin/pendingDefaultAdmin
|
|
192
|
+
///
|
|
193
|
+
|
|
194
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
195
|
+
function beginDefaultAdminTransfer(address newAdmin) public virtual onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
196
|
+
_beginDefaultAdminTransfer(newAdmin);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* @dev See {beginDefaultAdminTransfer}.
|
|
201
|
+
*
|
|
202
|
+
* Internal function without access restriction.
|
|
203
|
+
*/
|
|
204
|
+
function _beginDefaultAdminTransfer(address newAdmin) internal virtual {
|
|
205
|
+
uint48 newSchedule = SafeCast.toUint48(block.timestamp) + defaultAdminDelay();
|
|
206
|
+
_setPendingDefaultAdmin(newAdmin, newSchedule);
|
|
207
|
+
emit DefaultAdminTransferScheduled(newAdmin, newSchedule);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
211
|
+
function cancelDefaultAdminTransfer() public virtual onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
212
|
+
_cancelDefaultAdminTransfer();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @dev See {cancelDefaultAdminTransfer}.
|
|
217
|
+
*
|
|
218
|
+
* Internal function without access restriction.
|
|
219
|
+
*/
|
|
220
|
+
function _cancelDefaultAdminTransfer() internal virtual {
|
|
221
|
+
_setPendingDefaultAdmin(address(0), 0);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
225
|
+
function acceptDefaultAdminTransfer() public virtual {
|
|
226
|
+
(address newDefaultAdmin, ) = pendingDefaultAdmin();
|
|
227
|
+
if (_msgSender() != newDefaultAdmin) {
|
|
228
|
+
// Enforce newDefaultAdmin explicit acceptance.
|
|
229
|
+
revert AccessControlInvalidDefaultAdmin(_msgSender());
|
|
230
|
+
}
|
|
231
|
+
_acceptDefaultAdminTransfer();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @dev See {acceptDefaultAdminTransfer}.
|
|
236
|
+
*
|
|
237
|
+
* Internal function without access restriction.
|
|
238
|
+
*/
|
|
239
|
+
function _acceptDefaultAdminTransfer() internal virtual {
|
|
240
|
+
(address newAdmin, uint48 schedule) = pendingDefaultAdmin();
|
|
241
|
+
if (!_isScheduleSet(schedule) || !_hasSchedulePassed(schedule)) {
|
|
242
|
+
revert AccessControlEnforcedDefaultAdminDelay(schedule);
|
|
243
|
+
}
|
|
244
|
+
_revokeRole(DEFAULT_ADMIN_ROLE, defaultAdmin());
|
|
245
|
+
_grantRole(DEFAULT_ADMIN_ROLE, newAdmin);
|
|
246
|
+
delete _pendingDefaultAdmin;
|
|
247
|
+
delete _pendingDefaultAdminSchedule;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
///
|
|
251
|
+
/// AccessControlDefaultAdminRules public and internal setters for defaultAdminDelay/pendingDefaultAdminDelay
|
|
252
|
+
///
|
|
253
|
+
|
|
254
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
255
|
+
function changeDefaultAdminDelay(uint48 newDelay) public virtual onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
256
|
+
_changeDefaultAdminDelay(newDelay);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* @dev See {changeDefaultAdminDelay}.
|
|
261
|
+
*
|
|
262
|
+
* Internal function without access restriction.
|
|
263
|
+
*/
|
|
264
|
+
function _changeDefaultAdminDelay(uint48 newDelay) internal virtual {
|
|
265
|
+
uint48 newSchedule = SafeCast.toUint48(block.timestamp) + _delayChangeWait(newDelay);
|
|
266
|
+
_setPendingDelay(newDelay, newSchedule);
|
|
267
|
+
emit DefaultAdminDelayChangeScheduled(newDelay, newSchedule);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/// @inheritdoc IAccessControlDefaultAdminRules
|
|
271
|
+
function rollbackDefaultAdminDelay() public virtual onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
272
|
+
_rollbackDefaultAdminDelay();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @dev See {rollbackDefaultAdminDelay}.
|
|
277
|
+
*
|
|
278
|
+
* Internal function without access restriction.
|
|
279
|
+
*/
|
|
280
|
+
function _rollbackDefaultAdminDelay() internal virtual {
|
|
281
|
+
_setPendingDelay(0, 0);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @dev Returns the amount of seconds to wait after the `newDelay` will
|
|
286
|
+
* become the new {defaultAdminDelay}.
|
|
287
|
+
*
|
|
288
|
+
* The value returned guarantees that if the delay is reduced, it will go into effect
|
|
289
|
+
* after a wait that honors the previously set delay.
|
|
290
|
+
*
|
|
291
|
+
* See {defaultAdminDelayIncreaseWait}.
|
|
292
|
+
*/
|
|
293
|
+
function _delayChangeWait(uint48 newDelay) internal view virtual returns (uint48) {
|
|
294
|
+
uint48 currentDelay = defaultAdminDelay();
|
|
295
|
+
|
|
296
|
+
// When increasing the delay, we schedule the delay change to occur after a period of "new delay" has passed, up
|
|
297
|
+
// to a maximum given by defaultAdminDelayIncreaseWait, by default 5 days. For example, if increasing from 1 day
|
|
298
|
+
// to 3 days, the new delay will come into effect after 3 days. If increasing from 1 day to 10 days, the new
|
|
299
|
+
// delay will come into effect after 5 days. The 5 day wait period is intended to be able to fix an error like
|
|
300
|
+
// using milliseconds instead of seconds.
|
|
301
|
+
//
|
|
302
|
+
// When decreasing the delay, we wait the difference between "current delay" and "new delay". This guarantees
|
|
303
|
+
// that an admin transfer cannot be made faster than "current delay" at the time the delay change is scheduled.
|
|
304
|
+
// For example, if decreasing from 10 days to 3 days, the new delay will come into effect after 7 days.
|
|
305
|
+
return
|
|
306
|
+
newDelay > currentDelay
|
|
307
|
+
? uint48(Math.min(newDelay, defaultAdminDelayIncreaseWait())) // no need to safecast, both inputs are uint48
|
|
308
|
+
: currentDelay - newDelay;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
///
|
|
312
|
+
/// Private setters
|
|
313
|
+
///
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* @dev Setter of the tuple for pending admin and its schedule.
|
|
317
|
+
*
|
|
318
|
+
* May emit a DefaultAdminTransferCanceled event.
|
|
319
|
+
*/
|
|
320
|
+
function _setPendingDefaultAdmin(address newAdmin, uint48 newSchedule) private {
|
|
321
|
+
(, uint48 oldSchedule) = pendingDefaultAdmin();
|
|
322
|
+
|
|
323
|
+
_pendingDefaultAdmin = newAdmin;
|
|
324
|
+
_pendingDefaultAdminSchedule = newSchedule;
|
|
325
|
+
|
|
326
|
+
// An `oldSchedule` from `pendingDefaultAdmin()` is only set if it hasn't been accepted.
|
|
327
|
+
if (_isScheduleSet(oldSchedule)) {
|
|
328
|
+
// Emit for implicit cancellations when another default admin was scheduled.
|
|
329
|
+
emit DefaultAdminTransferCanceled();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @dev Setter of the tuple for pending delay and its schedule.
|
|
335
|
+
*
|
|
336
|
+
* May emit a DefaultAdminDelayChangeCanceled event.
|
|
337
|
+
*/
|
|
338
|
+
function _setPendingDelay(uint48 newDelay, uint48 newSchedule) private {
|
|
339
|
+
uint48 oldSchedule = _pendingDelaySchedule;
|
|
340
|
+
|
|
341
|
+
if (_isScheduleSet(oldSchedule)) {
|
|
342
|
+
if (_hasSchedulePassed(oldSchedule)) {
|
|
343
|
+
// Materialize a virtual delay
|
|
344
|
+
_currentDelay = _pendingDelay;
|
|
345
|
+
} else {
|
|
346
|
+
// Emit for implicit cancellations when another delay was scheduled.
|
|
347
|
+
emit DefaultAdminDelayChangeCanceled();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
_pendingDelay = newDelay;
|
|
352
|
+
_pendingDelaySchedule = newSchedule;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
///
|
|
356
|
+
/// Private helpers
|
|
357
|
+
///
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* @dev Defines if a `schedule` is considered set. For consistency purposes.
|
|
361
|
+
*/
|
|
362
|
+
function _isScheduleSet(uint48 schedule) private pure returns (bool) {
|
|
363
|
+
return schedule != 0;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* @dev Defines if a `schedule` is considered passed. For consistency purposes.
|
|
368
|
+
*/
|
|
369
|
+
function _hasSchedulePassed(uint48 schedule) private view returns (bool) {
|
|
370
|
+
return schedule < block.timestamp;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v5.5.0) (access/extensions/AccessControlEnumerable.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.24;
|
|
5
|
+
|
|
6
|
+
import {IAccessControlEnumerable} from "./IAccessControlEnumerable.sol";
|
|
7
|
+
import {AccessControl} from "../AccessControl.sol";
|
|
8
|
+
import {EnumerableSet} from "../../utils/structs/EnumerableSet.sol";
|
|
9
|
+
import {IERC165} from "../../utils/introspection/ERC165.sol";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @dev Extension of {AccessControl} that allows enumerating the members of each role.
|
|
13
|
+
*/
|
|
14
|
+
abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
|
|
15
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
16
|
+
|
|
17
|
+
mapping(bytes32 role => EnumerableSet.AddressSet) private _roleMembers;
|
|
18
|
+
|
|
19
|
+
/// @inheritdoc IERC165
|
|
20
|
+
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
|
|
21
|
+
return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @dev Returns one of the accounts that have `role`. `index` must be a
|
|
26
|
+
* value between 0 and {getRoleMemberCount}, non-inclusive.
|
|
27
|
+
*
|
|
28
|
+
* Role bearers are not sorted in any particular way, and their ordering may
|
|
29
|
+
* change at any point.
|
|
30
|
+
*
|
|
31
|
+
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
|
|
32
|
+
* you perform all queries on the same block. See the following
|
|
33
|
+
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
|
|
34
|
+
* for more information.
|
|
35
|
+
*/
|
|
36
|
+
function getRoleMember(bytes32 role, uint256 index) public view virtual returns (address) {
|
|
37
|
+
return _roleMembers[role].at(index);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @dev Returns the number of accounts that have `role`. Can be used
|
|
42
|
+
* together with {getRoleMember} to enumerate all bearers of a role.
|
|
43
|
+
*/
|
|
44
|
+
function getRoleMemberCount(bytes32 role) public view virtual returns (uint256) {
|
|
45
|
+
return _roleMembers[role].length();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @dev Return all accounts that have `role`
|
|
50
|
+
*
|
|
51
|
+
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
|
|
52
|
+
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
|
|
53
|
+
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
|
|
54
|
+
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
|
|
55
|
+
*/
|
|
56
|
+
function getRoleMembers(bytes32 role) public view virtual returns (address[] memory) {
|
|
57
|
+
return _roleMembers[role].values();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @dev Overload {AccessControl-_grantRole} to track enumerable memberships
|
|
62
|
+
*/
|
|
63
|
+
function _grantRole(bytes32 role, address account) internal virtual override returns (bool) {
|
|
64
|
+
bool granted = super._grantRole(role, account);
|
|
65
|
+
if (granted) {
|
|
66
|
+
_roleMembers[role].add(account);
|
|
67
|
+
}
|
|
68
|
+
return granted;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @dev Overload {AccessControl-_revokeRole} to track enumerable memberships
|
|
73
|
+
*/
|
|
74
|
+
function _revokeRole(bytes32 role, address account) internal virtual override returns (bool) {
|
|
75
|
+
bool revoked = super._revokeRole(role, account);
|
|
76
|
+
if (revoked) {
|
|
77
|
+
_roleMembers[role].remove(account);
|
|
78
|
+
}
|
|
79
|
+
return revoked;
|
|
80
|
+
}
|
|
81
|
+
}
|
package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v5.5.0) (access/extensions/IAccessControlDefaultAdminRules.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity >=0.8.4;
|
|
5
|
+
|
|
6
|
+
import {IAccessControl} from "../IAccessControl.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @dev External interface of AccessControlDefaultAdminRules declared to support ERC-165 detection.
|
|
10
|
+
*/
|
|
11
|
+
interface IAccessControlDefaultAdminRules is IAccessControl {
|
|
12
|
+
/**
|
|
13
|
+
* @dev The new default admin is not a valid default admin.
|
|
14
|
+
*/
|
|
15
|
+
error AccessControlInvalidDefaultAdmin(address defaultAdmin);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @dev At least one of the following rules was violated:
|
|
19
|
+
*
|
|
20
|
+
* - The `DEFAULT_ADMIN_ROLE` must only be managed by itself.
|
|
21
|
+
* - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time.
|
|
22
|
+
* - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps.
|
|
23
|
+
*/
|
|
24
|
+
error AccessControlEnforcedDefaultAdminRules();
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @dev The delay for transferring the default admin delay is enforced and
|
|
28
|
+
* the operation must wait until `schedule`.
|
|
29
|
+
*
|
|
30
|
+
* NOTE: `schedule` can be 0 indicating there's no transfer scheduled.
|
|
31
|
+
*/
|
|
32
|
+
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @dev Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next
|
|
36
|
+
* address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule`
|
|
37
|
+
* passes.
|
|
38
|
+
*/
|
|
39
|
+
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @dev Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.
|
|
43
|
+
*/
|
|
44
|
+
event DefaultAdminTransferCanceled();
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @dev Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next
|
|
48
|
+
* delay to be applied between default admin transfer after `effectSchedule` has passed.
|
|
49
|
+
*/
|
|
50
|
+
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @dev Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.
|
|
54
|
+
*/
|
|
55
|
+
event DefaultAdminDelayChangeCanceled();
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @dev Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.
|
|
59
|
+
*/
|
|
60
|
+
function defaultAdmin() external view returns (address);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @dev Returns a tuple of a `newAdmin` and an accept schedule.
|
|
64
|
+
*
|
|
65
|
+
* After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role
|
|
66
|
+
* by calling {acceptDefaultAdminTransfer}, completing the role transfer.
|
|
67
|
+
*
|
|
68
|
+
* A zero value only in `acceptSchedule` indicates no pending admin transfer.
|
|
69
|
+
*
|
|
70
|
+
* NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.
|
|
71
|
+
*/
|
|
72
|
+
function pendingDefaultAdmin() external view returns (address newAdmin, uint48 acceptSchedule);
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @dev Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started.
|
|
76
|
+
*
|
|
77
|
+
* This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set
|
|
78
|
+
* the acceptance schedule.
|
|
79
|
+
*
|
|
80
|
+
* NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this
|
|
81
|
+
* function returns the new delay. See {changeDefaultAdminDelay}.
|
|
82
|
+
*/
|
|
83
|
+
function defaultAdminDelay() external view returns (uint48);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @dev Returns a tuple of `newDelay` and an effect schedule.
|
|
87
|
+
*
|
|
88
|
+
* After the `schedule` passes, the `newDelay` will get into effect immediately for every
|
|
89
|
+
* new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}.
|
|
90
|
+
*
|
|
91
|
+
* A zero value only in `effectSchedule` indicates no pending delay change.
|
|
92
|
+
*
|
|
93
|
+
* NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay}
|
|
94
|
+
* will be zero after the effect schedule.
|
|
95
|
+
*/
|
|
96
|
+
function pendingDefaultAdminDelay() external view returns (uint48 newDelay, uint48 effectSchedule);
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @dev Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance
|
|
100
|
+
* after the current timestamp plus a {defaultAdminDelay}.
|
|
101
|
+
*
|
|
102
|
+
* Requirements:
|
|
103
|
+
*
|
|
104
|
+
* - Only can be called by the current {defaultAdmin}.
|
|
105
|
+
*
|
|
106
|
+
* Emits a DefaultAdminRoleChangeStarted event.
|
|
107
|
+
*/
|
|
108
|
+
function beginDefaultAdminTransfer(address newAdmin) external;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @dev Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.
|
|
112
|
+
*
|
|
113
|
+
* A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function.
|
|
114
|
+
*
|
|
115
|
+
* Requirements:
|
|
116
|
+
*
|
|
117
|
+
* - Only can be called by the current {defaultAdmin}.
|
|
118
|
+
*
|
|
119
|
+
* May emit a DefaultAdminTransferCanceled event.
|
|
120
|
+
*/
|
|
121
|
+
function cancelDefaultAdminTransfer() external;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @dev Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.
|
|
125
|
+
*
|
|
126
|
+
* After calling the function:
|
|
127
|
+
*
|
|
128
|
+
* - `DEFAULT_ADMIN_ROLE` should be granted to the caller.
|
|
129
|
+
* - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder.
|
|
130
|
+
* - {pendingDefaultAdmin} should be reset to zero values.
|
|
131
|
+
*
|
|
132
|
+
* Requirements:
|
|
133
|
+
*
|
|
134
|
+
* - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`.
|
|
135
|
+
* - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.
|
|
136
|
+
*/
|
|
137
|
+
function acceptDefaultAdminTransfer() external;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @dev Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting
|
|
141
|
+
* into effect after the current timestamp plus a {defaultAdminDelay}.
|
|
142
|
+
*
|
|
143
|
+
* This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this
|
|
144
|
+
* method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay}
|
|
145
|
+
* set before calling.
|
|
146
|
+
*
|
|
147
|
+
* The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then
|
|
148
|
+
* calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin}
|
|
149
|
+
* complete transfer (including acceptance).
|
|
150
|
+
*
|
|
151
|
+
* The schedule is designed for two scenarios:
|
|
152
|
+
*
|
|
153
|
+
* - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by
|
|
154
|
+
* {defaultAdminDelayIncreaseWait}.
|
|
155
|
+
* - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`.
|
|
156
|
+
*
|
|
157
|
+
* A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change.
|
|
158
|
+
*
|
|
159
|
+
* Requirements:
|
|
160
|
+
*
|
|
161
|
+
* - Only can be called by the current {defaultAdmin}.
|
|
162
|
+
*
|
|
163
|
+
* Emits a DefaultAdminDelayChangeScheduled event and may emit a DefaultAdminDelayChangeCanceled event.
|
|
164
|
+
*/
|
|
165
|
+
function changeDefaultAdminDelay(uint48 newDelay) external;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @dev Cancels a scheduled {defaultAdminDelay} change.
|
|
169
|
+
*
|
|
170
|
+
* Requirements:
|
|
171
|
+
*
|
|
172
|
+
* - Only can be called by the current {defaultAdmin}.
|
|
173
|
+
*
|
|
174
|
+
* May emit a DefaultAdminDelayChangeCanceled event.
|
|
175
|
+
*/
|
|
176
|
+
function rollbackDefaultAdminDelay() external;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @dev Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay})
|
|
180
|
+
* to take effect. Default to 5 days.
|
|
181
|
+
*
|
|
182
|
+
* When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with
|
|
183
|
+
* the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds)
|
|
184
|
+
* that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can
|
|
185
|
+
* be overridden for a custom {defaultAdminDelay} increase scheduling.
|
|
186
|
+
*
|
|
187
|
+
* IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise,
|
|
188
|
+
* there's a risk of setting a high new delay that goes into effect almost immediately without the
|
|
189
|
+
* possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).
|
|
190
|
+
*/
|
|
191
|
+
function defaultAdminDelayIncreaseWait() external view returns (uint48);
|
|
192
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v5.4.0) (access/extensions/IAccessControlEnumerable.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity >=0.8.4;
|
|
5
|
+
|
|
6
|
+
import {IAccessControl} from "../IAccessControl.sol";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @dev External interface of AccessControlEnumerable declared to support ERC-165 detection.
|
|
10
|
+
*/
|
|
11
|
+
interface IAccessControlEnumerable is IAccessControl {
|
|
12
|
+
/**
|
|
13
|
+
* @dev Returns one of the accounts that have `role`. `index` must be a
|
|
14
|
+
* value between 0 and {getRoleMemberCount}, non-inclusive.
|
|
15
|
+
*
|
|
16
|
+
* Role bearers are not sorted in any particular way, and their ordering may
|
|
17
|
+
* change at any point.
|
|
18
|
+
*
|
|
19
|
+
* WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
|
|
20
|
+
* you perform all queries on the same block. See the following
|
|
21
|
+
* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
|
|
22
|
+
* for more information.
|
|
23
|
+
*/
|
|
24
|
+
function getRoleMember(bytes32 role, uint256 index) external view returns (address);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @dev Returns the number of accounts that have `role`. Can be used
|
|
28
|
+
* together with {getRoleMember} to enumerate all bearers of a role.
|
|
29
|
+
*/
|
|
30
|
+
function getRoleMemberCount(bytes32 role) external view returns (uint256);
|
|
31
|
+
}
|