web3gbit-cli 1.0.0
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/--broadcast +0 -0
- package/--private-key +0 -0
- package/--rpc-url +0 -0
- package/.github/workflows/test.yml +38 -0
- package/.gitmodules +3 -0
- package/GbitToken_flat.sol +2 -0
- package/GbitToken_flat.solnpx +0 -0
- package/README.md +72 -0
- package/admin-cli.js +413 -0
- package/cache/solidity-files-cache.json +1 -0
- package/foundry.lock +8 -0
- package/foundry.toml +6 -0
- 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/blue-mirrors-agree.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/bright-webs-create.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/clean-worlds-end.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
- package/lib/openzeppelin-contracts/.changeset/curly-pandas-flow.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/flat-ideas-count.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/fluffy-facts-brake.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/forty-ads-design.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/full-emus-hear.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/fuzzy-lizards-do.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/grumpy-cats-brake.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/khaki-crews-join.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/new-socks-deny.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/shaky-phones-mix.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/social-tools-sniff.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/spotty-plums-brush.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/stale-lizards-cheat.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/swift-planets-juggle.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/tame-monkeys-make.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/tender-pans-yawn.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/thick-banks-relate.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/vast-worlds-pull.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/whole-turkeys-swim.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/yellow-clowns-mate.md +5 -0
- package/lib/openzeppelin-contracts/.changeset/young-corners-help.md +5 -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 +108 -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 +63 -0
- package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +212 -0
- package/lib/openzeppelin-contracts/.github/workflows/release-upgradeable.yml +95 -0
- package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +35 -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 +1364 -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 +122 -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/2025-10-v5.5.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/README.md +22 -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 +403 -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 +420 -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 +279 -0
- package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC7579Utils.sol +280 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/CrosschainLinked.sol +108 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/ERC7786Recipient.sol +70 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +29 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/bridges/BridgeERC20.sol +36 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/bridges/BridgeERC20Core.sol +79 -0
- package/lib/openzeppelin-contracts/contracts/crosschain/bridges/BridgeERC7802.sol +33 -0
- package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
- package/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +160 -0
- package/lib/openzeppelin-contracts/contracts/finance/VestingWalletCliff.sol +54 -0
- package/lib/openzeppelin-contracts/contracts/governance/Governor.sol +819 -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 +470 -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 +134 -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 +253 -0
- package/lib/openzeppelin-contracts/contracts/governance/utils/VotesExtended.sol +85 -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 +138 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC4337.sol +255 -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 +61 -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 +62 -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 +128 -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/AccessManagerEnumerable.sol +161 -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/MyAccountEIP7702.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/ERC1967ProxyUnsafe.sol +13 -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 +30 -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 +62 -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 +416 -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 +58 -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 +81 -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/ERC20Crosschain.sol +38 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +130 -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 +315 -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 +59 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909Metadata.sol +83 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol +41 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +433 -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 +165 -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 +62 -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 +888 -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 +332 -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 +146 -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 +476 -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 +510 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +228 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +408 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/README.adoc +76 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/RSA.sol +154 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +191 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/TrieProof.sol +230 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/WebAuthn.sol +261 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-ERC7739Utils.sol +207 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/AbstractSigner.sol +23 -0
- package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913.sol +259 -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 +763 -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 +152 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +237 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +1443 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +895 -0
- package/lib/openzeppelin-contracts/contracts/utils/structs/Heap.sol +259 -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 +339 -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 +242 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +100 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/multisig.adoc +308 -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 +29 -0
- package/lib/openzeppelin-contracts/foundry.toml +20 -0
- package/lib/openzeppelin-contracts/fv/Makefile +54 -0
- package/lib/openzeppelin-contracts/fv/README.md +60 -0
- package/lib/openzeppelin-contracts/fv/diff/access_manager_AccessManager.sol.patch +97 -0
- package/lib/openzeppelin-contracts/fv/diff/account_extensions_draft-AccountERC7579.sol.patch +25 -0
- package/lib/openzeppelin-contracts/fv/diff/token_ERC721_ERC721.sol.patch +11 -0
- package/lib/openzeppelin-contracts/fv/harnesses/AccessControlDefaultAdminRulesHarness.sol +46 -0
- package/lib/openzeppelin-contracts/fv/harnesses/AccessControlHarness.sol +6 -0
- package/lib/openzeppelin-contracts/fv/harnesses/AccessManagedHarness.sol +36 -0
- package/lib/openzeppelin-contracts/fv/harnesses/AccessManagerHarness.sol +116 -0
- package/lib/openzeppelin-contracts/fv/harnesses/AccountHarness.sol +60 -0
- package/lib/openzeppelin-contracts/fv/harnesses/DoubleEndedQueueHarness.sol +58 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC20FlashMintHarness.sol +36 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC20PermitHarness.sol +16 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC20WrapperHarness.sol +22 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC721Harness.sol +37 -0
- package/lib/openzeppelin-contracts/fv/harnesses/ERC721ReceiverHarness.sol +11 -0
- package/lib/openzeppelin-contracts/fv/harnesses/EnumerableMapHarness.sol +55 -0
- package/lib/openzeppelin-contracts/fv/harnesses/EnumerableSetHarness.sol +35 -0
- package/lib/openzeppelin-contracts/fv/harnesses/InitializableHarness.sol +23 -0
- package/lib/openzeppelin-contracts/fv/harnesses/NoncesHarness.sol +14 -0
- package/lib/openzeppelin-contracts/fv/harnesses/Ownable2StepHarness.sol +10 -0
- package/lib/openzeppelin-contracts/fv/harnesses/OwnableHarness.sol +10 -0
- package/lib/openzeppelin-contracts/fv/harnesses/PausableHarness.sol +18 -0
- package/lib/openzeppelin-contracts/fv/harnesses/TimelockControllerHarness.sol +13 -0
- package/lib/openzeppelin-contracts/fv/reports/2021-10.pdf +0 -0
- package/lib/openzeppelin-contracts/fv/reports/2022-03.pdf +0 -0
- package/lib/openzeppelin-contracts/fv/reports/2022-05.pdf +0 -0
- package/lib/openzeppelin-contracts/fv/run.js +68 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessControl.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessControl.spec +119 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessControlDefaultAdminRules.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessControlDefaultAdminRules.spec +467 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessManaged.conf +14 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessManaged.spec +49 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessManager.conf +10 -0
- package/lib/openzeppelin-contracts/fv/specs/AccessManager.spec +837 -0
- package/lib/openzeppelin-contracts/fv/specs/Account.conf +9 -0
- package/lib/openzeppelin-contracts/fv/specs/Account.spec +490 -0
- package/lib/openzeppelin-contracts/fv/specs/DoubleEndedQueue.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/DoubleEndedQueue.spec +300 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20.conf +9 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20.spec +352 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20FlashMint.conf +10 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20FlashMint.spec +55 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20Wrapper.conf +13 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC20Wrapper.spec +226 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC721.conf +10 -0
- package/lib/openzeppelin-contracts/fv/specs/ERC721.spec +695 -0
- package/lib/openzeppelin-contracts/fv/specs/EnumerableMap.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/EnumerableMap.spec +364 -0
- package/lib/openzeppelin-contracts/fv/specs/EnumerableSet.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/EnumerableSet.spec +272 -0
- package/lib/openzeppelin-contracts/fv/specs/Initializable.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/Initializable.spec +176 -0
- package/lib/openzeppelin-contracts/fv/specs/Nonces.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/Nonces.spec +92 -0
- package/lib/openzeppelin-contracts/fv/specs/Ownable.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/Ownable.spec +77 -0
- package/lib/openzeppelin-contracts/fv/specs/Ownable2Step.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/Ownable2Step.spec +108 -0
- package/lib/openzeppelin-contracts/fv/specs/Pausable.conf +8 -0
- package/lib/openzeppelin-contracts/fv/specs/Pausable.spec +96 -0
- package/lib/openzeppelin-contracts/fv/specs/TimelockController.conf +10 -0
- package/lib/openzeppelin-contracts/fv/specs/TimelockController.spec +299 -0
- package/lib/openzeppelin-contracts/fv/specs/helpers/helpers.spec +13 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IAccessControl.spec +8 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IAccessManaged.spec +5 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IAccessManager.spec +33 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IAccount.spec +34 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC20.spec +11 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC2612.spec +5 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC3156FlashBorrower.spec +3 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC3156FlashLender.spec +5 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC5313.spec +3 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC721.spec +17 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IERC721Receiver.spec +3 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IOwnable.spec +5 -0
- package/lib/openzeppelin-contracts/fv/specs/methods/IOwnable2Step.spec +7 -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 +124 -0
- package/lib/openzeppelin-contracts/logo.svg +15 -0
- package/lib/openzeppelin-contracts/netlify.toml +3 -0
- package/lib/openzeppelin-contracts/package-lock.json +11140 -0
- package/lib/openzeppelin-contracts/package.json +108 -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 +505 -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 +56 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +464 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +470 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.js +186 -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 +34 -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 +140 -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/check-upgradeable.sh +27 -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 +50 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +390 -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/AccountEIP7702.t.sol +116 -0
- package/lib/openzeppelin-contracts/test/account/AccountEIP7702.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/AccountEIP7702WithModulesMock.test.js +99 -0
- package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.behavior.js +621 -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 +594 -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/BridgeERC20.behavior.js +163 -0
- package/lib/openzeppelin-contracts/test/crosschain/BridgeERC20.test.js +46 -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 +243 -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 +175 -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 +16 -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 +15 -0
- package/lib/openzeppelin-contracts/test/helpers/erc4337.js +244 -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 +218 -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 +26 -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/trie.js +79 -0
- package/lib/openzeppelin-contracts/test/helpers/txpool.js +28 -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 +36 -0
- package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Utils.test.js +162 -0
- package/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +198 -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 +367 -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 +865 -0
- package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +258 -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/ERC20Crosschain.test.js +83 -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 +52 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909Metadata.test.js +62 -0
- package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909TokenSupply.test.js +56 -0
- package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +954 -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 +134 -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 +416 -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 +322 -0
- package/lib/openzeppelin-contracts/test/utils/Bytes.test.js +371 -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 +63 -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 +144 -0
- package/lib/openzeppelin-contracts/test/utils/RLP.test.js +224 -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 +322 -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 +216 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.t.sol +33 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.test.js +149 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/P256.t.sol +45 -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 +427 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/TrieProof.test.js +659 -0
- package/lib/openzeppelin-contracts/test/utils/cryptography/WebAuthn.t.sol +298 -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 +169 -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 +144 -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/lucro.txt +1 -0
- package/out/Base.sol/CommonBase.json +1 -0
- package/out/Base.sol/ScriptBase.json +1 -0
- package/out/Base.sol/TestBase.json +1 -0
- package/out/Context.sol/Context.json +1 -0
- package/out/Counter.s.sol/CounterScript.json +1 -0
- package/out/Counter.sol/Counter.json +1 -0
- package/out/Counter.t.sol/CounterTest.json +1 -0
- package/out/ERC20.sol/ERC20.json +1 -0
- package/out/GbitToken.sol/GbitToken.json +1 -0
- package/out/Guestbook.sol/Guestbook.json +1 -0
- package/out/IERC20.sol/IERC20.json +1 -0
- package/out/IERC20Metadata.sol/IERC20Metadata.json +1 -0
- package/out/IMulticall3.sol/IMulticall3.json +1 -0
- package/out/Script.sol/Script.json +1 -0
- package/out/StdAssertions.sol/StdAssertions.json +1 -0
- package/out/StdChains.sol/StdChains.json +1 -0
- package/out/StdCheats.sol/StdCheats.json +1 -0
- package/out/StdCheats.sol/StdCheatsSafe.json +1 -0
- package/out/StdConstants.sol/StdConstants.json +1 -0
- package/out/StdError.sol/stdError.json +1 -0
- package/out/StdInvariant.sol/StdInvariant.json +1 -0
- package/out/StdJson.sol/stdJson.json +1 -0
- package/out/StdMath.sol/stdMath.json +1 -0
- package/out/StdStorage.sol/stdStorage.json +1 -0
- package/out/StdStorage.sol/stdStorageSafe.json +1 -0
- package/out/StdStyle.sol/StdStyle.json +1 -0
- package/out/StdToml.sol/stdToml.json +1 -0
- package/out/StdUtils.sol/StdUtils.json +1 -0
- package/out/Test.sol/Test.json +1 -0
- package/out/Vm.sol/Vm.json +1 -0
- package/out/Vm.sol/VmSafe.json +1 -0
- package/out/Web3HubCore.sol/Web3HubCore.json +1 -0
- package/out/build-info/8a1d781106536b7b.json +1 -0
- package/out/build-info/aac4797350a36a99.json +1 -0
- package/out/build-info/c34d5a7881e6beba.json +1 -0
- package/out/build-info/ce38d811b8078146.json +1 -0
- package/out/build-info/db34a3531e47e196.json +1 -0
- package/out/console.sol/console.json +1 -0
- package/out/draft-IERC6093.sol/IERC1155Errors.json +1 -0
- package/out/draft-IERC6093.sol/IERC20Errors.json +1 -0
- package/out/draft-IERC6093.sol/IERC721Errors.json +1 -0
- package/out/safeconsole.sol/safeconsole.json +1 -0
- package/package.json +25 -0
- package/remappings.txt +1 -0
- package/script/Counter.s.sol +19 -0
- package/src/Counter.sol +14 -0
- package/src/GbitToken.sol +72 -0
- package/src/Guestbook.sol +28 -0
- package/src/Web3HubCore.sol +42 -0
- package/test/Counter.t.sol +24 -0
|
@@ -0,0 +1,741 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// OpenZeppelin Contracts (last updated v5.5.0) (access/manager/AccessManager.sol)
|
|
3
|
+
|
|
4
|
+
pragma solidity ^0.8.20;
|
|
5
|
+
|
|
6
|
+
import {IAccessManager} from "./IAccessManager.sol";
|
|
7
|
+
import {IAccessManaged} from "./IAccessManaged.sol";
|
|
8
|
+
import {Address} from "../../utils/Address.sol";
|
|
9
|
+
import {Context} from "../../utils/Context.sol";
|
|
10
|
+
import {Multicall} from "../../utils/Multicall.sol";
|
|
11
|
+
import {Math} from "../../utils/math/Math.sol";
|
|
12
|
+
import {Time} from "../../utils/types/Time.sol";
|
|
13
|
+
import {Hashes} from "../../utils/cryptography/Hashes.sol";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @dev AccessManager is a central contract to store the permissions of a system.
|
|
17
|
+
*
|
|
18
|
+
* A smart contract under the control of an AccessManager instance is known as a target, and will inherit from the
|
|
19
|
+
* {AccessManaged} contract, be connected to this contract as its manager and implement the {AccessManaged-restricted}
|
|
20
|
+
* modifier on a set of functions selected to be permissioned. Note that any function without this setup won't be
|
|
21
|
+
* effectively restricted.
|
|
22
|
+
*
|
|
23
|
+
* The restriction rules for such functions are defined in terms of "roles" identified by an `uint64` and scoped
|
|
24
|
+
* by target (`address`) and function selectors (`bytes4`). These roles are stored in this contract and can be
|
|
25
|
+
* configured by admins (`ADMIN_ROLE` members) after a delay (see {getTargetAdminDelay}).
|
|
26
|
+
*
|
|
27
|
+
* For each target contract, admins can configure the following without any delay:
|
|
28
|
+
*
|
|
29
|
+
* * The target's {AccessManaged-authority} via {updateAuthority}.
|
|
30
|
+
* * Close or open a target via {setTargetClosed} keeping the permissions intact.
|
|
31
|
+
* * The roles that are allowed (or disallowed) to call a given function (identified by its selector) through {setTargetFunctionRole}.
|
|
32
|
+
*
|
|
33
|
+
* By default every address is member of the `PUBLIC_ROLE` and every target function is restricted to the `ADMIN_ROLE` until configured otherwise.
|
|
34
|
+
* Additionally, each role has the following configuration options restricted to this manager's admins:
|
|
35
|
+
*
|
|
36
|
+
* * A role's admin role via {setRoleAdmin} who can grant or revoke roles.
|
|
37
|
+
* * A role's guardian role via {setRoleGuardian} who's allowed to cancel operations.
|
|
38
|
+
* * A delay in which a role takes effect after being granted through {setGrantDelay}.
|
|
39
|
+
* * A delay of any target's admin action via {setTargetAdminDelay}.
|
|
40
|
+
* * A role label for discoverability purposes with {labelRole}.
|
|
41
|
+
*
|
|
42
|
+
* Any account can be added and removed into any number of these roles by using the {grantRole} and {revokeRole} functions
|
|
43
|
+
* restricted to each role's admin (see {getRoleAdmin}).
|
|
44
|
+
*
|
|
45
|
+
* Since all the permissions of the managed system can be modified by the admins of this instance, it is expected that
|
|
46
|
+
* they will be highly secured (e.g., a multisig or a well-configured DAO).
|
|
47
|
+
*
|
|
48
|
+
* NOTE: This contract implements a form of the {IAuthority} interface, but {canCall} has additional return data so it
|
|
49
|
+
* doesn't inherit `IAuthority`. It is however compatible with the `IAuthority` interface since the first 32 bytes of
|
|
50
|
+
* the return data are a boolean as expected by that interface.
|
|
51
|
+
*
|
|
52
|
+
* NOTE: Systems that implement other access control mechanisms (for example using {Ownable}) can be paired with an
|
|
53
|
+
* {AccessManager} by transferring permissions (ownership in the case of {Ownable}) directly to the {AccessManager}.
|
|
54
|
+
* Users will be able to interact with these contracts through the {execute} function, following the access rules
|
|
55
|
+
* registered in the {AccessManager}. Keep in mind that in that context, the msg.sender seen by restricted functions
|
|
56
|
+
* will be {AccessManager} itself.
|
|
57
|
+
*
|
|
58
|
+
* WARNING: When granting permissions over an {Ownable} or {AccessControl} contract to an {AccessManager}, be very
|
|
59
|
+
* mindful of the danger associated with functions such as {Ownable-renounceOwnership} or
|
|
60
|
+
* {AccessControl-renounceRole}.
|
|
61
|
+
*/
|
|
62
|
+
contract AccessManager is Context, Multicall, IAccessManager {
|
|
63
|
+
using Time for *;
|
|
64
|
+
|
|
65
|
+
// Structure that stores the details for a target contract.
|
|
66
|
+
struct TargetConfig {
|
|
67
|
+
mapping(bytes4 selector => uint64 roleId) allowedRoles;
|
|
68
|
+
Time.Delay adminDelay;
|
|
69
|
+
bool closed;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Structure that stores the details for a role/account pair. This structure fits into a single slot.
|
|
73
|
+
struct Access {
|
|
74
|
+
// Timepoint at which the user gets the permission.
|
|
75
|
+
// If this is either 0 or in the future, then the role permission is not available.
|
|
76
|
+
uint48 since;
|
|
77
|
+
// Delay for execution. Only applies to restricted() / execute() calls.
|
|
78
|
+
Time.Delay delay;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Structure that stores the details of a role.
|
|
82
|
+
struct Role {
|
|
83
|
+
// Members of the role.
|
|
84
|
+
mapping(address user => Access access) members;
|
|
85
|
+
// Admin who can grant or revoke permissions.
|
|
86
|
+
uint64 admin;
|
|
87
|
+
// Guardian who can cancel operations targeting functions that need this role.
|
|
88
|
+
uint64 guardian;
|
|
89
|
+
// Delay in which the role takes effect after being granted.
|
|
90
|
+
Time.Delay grantDelay;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Structure that stores the details for a scheduled operation. This structure fits into a single slot.
|
|
94
|
+
struct Schedule {
|
|
95
|
+
// Moment at which the operation can be executed.
|
|
96
|
+
uint48 timepoint;
|
|
97
|
+
// Operation nonce to allow third-party contracts to identify the operation.
|
|
98
|
+
uint32 nonce;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @dev The identifier of the admin role. Required to perform most configuration operations including
|
|
103
|
+
* other roles' management and target restrictions.
|
|
104
|
+
*/
|
|
105
|
+
uint64 public constant ADMIN_ROLE = type(uint64).min; // 0
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @dev The identifier of the public role. Automatically granted to all addresses with no delay.
|
|
109
|
+
*/
|
|
110
|
+
uint64 public constant PUBLIC_ROLE = type(uint64).max; // 2**64-1
|
|
111
|
+
|
|
112
|
+
mapping(address target => TargetConfig mode) private _targets;
|
|
113
|
+
mapping(uint64 roleId => Role) private _roles;
|
|
114
|
+
mapping(bytes32 operationId => Schedule) private _schedules;
|
|
115
|
+
|
|
116
|
+
// Used to identify operations that are currently being executed via {execute}.
|
|
117
|
+
// This should be transient storage when supported by the EVM.
|
|
118
|
+
bytes32 private _executionId;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @dev Check that the caller is authorized to perform the operation.
|
|
122
|
+
* See {AccessManager} description for a detailed breakdown of the authorization logic.
|
|
123
|
+
*/
|
|
124
|
+
modifier onlyAuthorized() {
|
|
125
|
+
_checkAuthorized();
|
|
126
|
+
_;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
constructor(address initialAdmin) {
|
|
130
|
+
if (initialAdmin == address(0)) {
|
|
131
|
+
revert AccessManagerInvalidInitialAdmin(address(0));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// admin is active immediately and without any execution delay.
|
|
135
|
+
_grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// =================================================== GETTERS ====================================================
|
|
139
|
+
/// @inheritdoc IAccessManager
|
|
140
|
+
function canCall(
|
|
141
|
+
address caller,
|
|
142
|
+
address target,
|
|
143
|
+
bytes4 selector
|
|
144
|
+
) public view virtual returns (bool immediate, uint32 delay) {
|
|
145
|
+
if (isTargetClosed(target)) {
|
|
146
|
+
return (false, 0);
|
|
147
|
+
} else if (caller == address(this)) {
|
|
148
|
+
// Caller is AccessManager, this means the call was sent through {execute} and it already checked
|
|
149
|
+
// permissions. We verify that the call "identifier", which is set during {execute}, is correct.
|
|
150
|
+
return (_isExecuting(target, selector), 0);
|
|
151
|
+
} else {
|
|
152
|
+
uint64 roleId = getTargetFunctionRole(target, selector);
|
|
153
|
+
(bool isMember, uint32 currentDelay) = hasRole(roleId, caller);
|
|
154
|
+
return isMember ? (currentDelay == 0, currentDelay) : (false, 0);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/// @inheritdoc IAccessManager
|
|
159
|
+
function expiration() public view virtual returns (uint32) {
|
|
160
|
+
return 1 weeks;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// @inheritdoc IAccessManager
|
|
164
|
+
function minSetback() public view virtual returns (uint32) {
|
|
165
|
+
return 5 days;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// @inheritdoc IAccessManager
|
|
169
|
+
function isTargetClosed(address target) public view virtual returns (bool) {
|
|
170
|
+
return _targets[target].closed;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// @inheritdoc IAccessManager
|
|
174
|
+
function getTargetFunctionRole(address target, bytes4 selector) public view virtual returns (uint64) {
|
|
175
|
+
return _targets[target].allowedRoles[selector];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// @inheritdoc IAccessManager
|
|
179
|
+
function getTargetAdminDelay(address target) public view virtual returns (uint32) {
|
|
180
|
+
return _targets[target].adminDelay.get();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/// @inheritdoc IAccessManager
|
|
184
|
+
function getRoleAdmin(uint64 roleId) public view virtual returns (uint64) {
|
|
185
|
+
return _roles[roleId].admin;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// @inheritdoc IAccessManager
|
|
189
|
+
function getRoleGuardian(uint64 roleId) public view virtual returns (uint64) {
|
|
190
|
+
return _roles[roleId].guardian;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/// @inheritdoc IAccessManager
|
|
194
|
+
function getRoleGrantDelay(uint64 roleId) public view virtual returns (uint32) {
|
|
195
|
+
return _roles[roleId].grantDelay.get();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/// @inheritdoc IAccessManager
|
|
199
|
+
function getAccess(
|
|
200
|
+
uint64 roleId,
|
|
201
|
+
address account
|
|
202
|
+
) public view virtual returns (uint48 since, uint32 currentDelay, uint32 pendingDelay, uint48 effect) {
|
|
203
|
+
Access storage access = _roles[roleId].members[account];
|
|
204
|
+
|
|
205
|
+
since = access.since;
|
|
206
|
+
(currentDelay, pendingDelay, effect) = access.delay.getFull();
|
|
207
|
+
|
|
208
|
+
return (since, currentDelay, pendingDelay, effect);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/// @inheritdoc IAccessManager
|
|
212
|
+
function hasRole(
|
|
213
|
+
uint64 roleId,
|
|
214
|
+
address account
|
|
215
|
+
) public view virtual returns (bool isMember, uint32 executionDelay) {
|
|
216
|
+
if (roleId == PUBLIC_ROLE) {
|
|
217
|
+
return (true, 0);
|
|
218
|
+
} else {
|
|
219
|
+
(uint48 hasRoleSince, uint32 currentDelay, , ) = getAccess(roleId, account);
|
|
220
|
+
return (hasRoleSince != 0 && hasRoleSince <= Time.timestamp(), currentDelay);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// =============================================== ROLE MANAGEMENT ===============================================
|
|
225
|
+
/// @inheritdoc IAccessManager
|
|
226
|
+
function labelRole(uint64 roleId, string calldata label) public virtual onlyAuthorized {
|
|
227
|
+
if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
|
|
228
|
+
revert AccessManagerLockedRole(roleId);
|
|
229
|
+
}
|
|
230
|
+
emit RoleLabel(roleId, label);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/// @inheritdoc IAccessManager
|
|
234
|
+
function grantRole(uint64 roleId, address account, uint32 executionDelay) public virtual onlyAuthorized {
|
|
235
|
+
_grantRole(roleId, account, getRoleGrantDelay(roleId), executionDelay);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/// @inheritdoc IAccessManager
|
|
239
|
+
function revokeRole(uint64 roleId, address account) public virtual onlyAuthorized {
|
|
240
|
+
_revokeRole(roleId, account);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/// @inheritdoc IAccessManager
|
|
244
|
+
function renounceRole(uint64 roleId, address callerConfirmation) public virtual {
|
|
245
|
+
if (callerConfirmation != _msgSender()) {
|
|
246
|
+
revert AccessManagerBadConfirmation();
|
|
247
|
+
}
|
|
248
|
+
_revokeRole(roleId, callerConfirmation);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/// @inheritdoc IAccessManager
|
|
252
|
+
function setRoleAdmin(uint64 roleId, uint64 admin) public virtual onlyAuthorized {
|
|
253
|
+
_setRoleAdmin(roleId, admin);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/// @inheritdoc IAccessManager
|
|
257
|
+
function setRoleGuardian(uint64 roleId, uint64 guardian) public virtual onlyAuthorized {
|
|
258
|
+
_setRoleGuardian(roleId, guardian);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/// @inheritdoc IAccessManager
|
|
262
|
+
function setGrantDelay(uint64 roleId, uint32 newDelay) public virtual onlyAuthorized {
|
|
263
|
+
_setGrantDelay(roleId, newDelay);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @dev Internal version of {grantRole} without access control. Returns true if the role was newly granted.
|
|
268
|
+
*
|
|
269
|
+
* Emits a {RoleGranted} event.
|
|
270
|
+
*/
|
|
271
|
+
function _grantRole(
|
|
272
|
+
uint64 roleId,
|
|
273
|
+
address account,
|
|
274
|
+
uint32 grantDelay,
|
|
275
|
+
uint32 executionDelay
|
|
276
|
+
) internal virtual returns (bool) {
|
|
277
|
+
if (roleId == PUBLIC_ROLE) {
|
|
278
|
+
revert AccessManagerLockedRole(roleId);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
bool newMember = _roles[roleId].members[account].since == 0;
|
|
282
|
+
uint48 since;
|
|
283
|
+
|
|
284
|
+
if (newMember) {
|
|
285
|
+
since = Time.timestamp() + grantDelay;
|
|
286
|
+
_roles[roleId].members[account] = Access({since: since, delay: executionDelay.toDelay()});
|
|
287
|
+
} else {
|
|
288
|
+
// No setback here. Value can be reset by doing revoke + grant, effectively allowing the admin to perform
|
|
289
|
+
// any change to the execution delay within the duration of the role admin delay.
|
|
290
|
+
(_roles[roleId].members[account].delay, since) = _roles[roleId].members[account].delay.withUpdate(
|
|
291
|
+
executionDelay,
|
|
292
|
+
0
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
emit RoleGranted(roleId, account, executionDelay, since, newMember);
|
|
297
|
+
return newMember;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @dev Internal version of {revokeRole} without access control. This logic is also used by {renounceRole}.
|
|
302
|
+
* Returns true if the role was previously granted.
|
|
303
|
+
*
|
|
304
|
+
* Emits a {RoleRevoked} event if the account had the role.
|
|
305
|
+
*/
|
|
306
|
+
function _revokeRole(uint64 roleId, address account) internal virtual returns (bool) {
|
|
307
|
+
if (roleId == PUBLIC_ROLE) {
|
|
308
|
+
revert AccessManagerLockedRole(roleId);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (_roles[roleId].members[account].since == 0) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
delete _roles[roleId].members[account];
|
|
316
|
+
|
|
317
|
+
emit RoleRevoked(roleId, account);
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* @dev Internal version of {setRoleAdmin} without access control.
|
|
323
|
+
*
|
|
324
|
+
* Emits a {RoleAdminChanged} event.
|
|
325
|
+
*
|
|
326
|
+
* NOTE: Setting the admin role as the `PUBLIC_ROLE` is allowed, but it will effectively allow
|
|
327
|
+
* anyone to set grant or revoke such role.
|
|
328
|
+
*/
|
|
329
|
+
function _setRoleAdmin(uint64 roleId, uint64 admin) internal virtual {
|
|
330
|
+
if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
|
|
331
|
+
revert AccessManagerLockedRole(roleId);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
_roles[roleId].admin = admin;
|
|
335
|
+
|
|
336
|
+
emit RoleAdminChanged(roleId, admin);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @dev Internal version of {setRoleGuardian} without access control.
|
|
341
|
+
*
|
|
342
|
+
* Emits a {RoleGuardianChanged} event.
|
|
343
|
+
*
|
|
344
|
+
* NOTE: Setting the guardian role as the `PUBLIC_ROLE` is allowed, but it will effectively allow
|
|
345
|
+
* anyone to cancel any scheduled operation for such role.
|
|
346
|
+
*/
|
|
347
|
+
function _setRoleGuardian(uint64 roleId, uint64 guardian) internal virtual {
|
|
348
|
+
if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
|
|
349
|
+
revert AccessManagerLockedRole(roleId);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
_roles[roleId].guardian = guardian;
|
|
353
|
+
|
|
354
|
+
emit RoleGuardianChanged(roleId, guardian);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @dev Internal version of {setGrantDelay} without access control.
|
|
359
|
+
*
|
|
360
|
+
* Emits a {RoleGrantDelayChanged} event.
|
|
361
|
+
*/
|
|
362
|
+
function _setGrantDelay(uint64 roleId, uint32 newDelay) internal virtual {
|
|
363
|
+
if (roleId == PUBLIC_ROLE) {
|
|
364
|
+
revert AccessManagerLockedRole(roleId);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
uint48 effect;
|
|
368
|
+
(_roles[roleId].grantDelay, effect) = _roles[roleId].grantDelay.withUpdate(newDelay, minSetback());
|
|
369
|
+
|
|
370
|
+
emit RoleGrantDelayChanged(roleId, newDelay, effect);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// ============================================= FUNCTION MANAGEMENT ==============================================
|
|
374
|
+
/// @inheritdoc IAccessManager
|
|
375
|
+
function setTargetFunctionRole(
|
|
376
|
+
address target,
|
|
377
|
+
bytes4[] calldata selectors,
|
|
378
|
+
uint64 roleId
|
|
379
|
+
) public virtual onlyAuthorized {
|
|
380
|
+
for (uint256 i = 0; i < selectors.length; ++i) {
|
|
381
|
+
_setTargetFunctionRole(target, selectors[i], roleId);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* @dev Internal version of {setTargetFunctionRole} without access control.
|
|
387
|
+
*
|
|
388
|
+
* Emits a {TargetFunctionRoleUpdated} event.
|
|
389
|
+
*/
|
|
390
|
+
function _setTargetFunctionRole(address target, bytes4 selector, uint64 roleId) internal virtual {
|
|
391
|
+
_targets[target].allowedRoles[selector] = roleId;
|
|
392
|
+
emit TargetFunctionRoleUpdated(target, selector, roleId);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/// @inheritdoc IAccessManager
|
|
396
|
+
function setTargetAdminDelay(address target, uint32 newDelay) public virtual onlyAuthorized {
|
|
397
|
+
_setTargetAdminDelay(target, newDelay);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* @dev Internal version of {setTargetAdminDelay} without access control.
|
|
402
|
+
*
|
|
403
|
+
* Emits a {TargetAdminDelayUpdated} event.
|
|
404
|
+
*/
|
|
405
|
+
function _setTargetAdminDelay(address target, uint32 newDelay) internal virtual {
|
|
406
|
+
uint48 effect;
|
|
407
|
+
(_targets[target].adminDelay, effect) = _targets[target].adminDelay.withUpdate(newDelay, minSetback());
|
|
408
|
+
|
|
409
|
+
emit TargetAdminDelayUpdated(target, newDelay, effect);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// =============================================== MODE MANAGEMENT ================================================
|
|
413
|
+
/// @inheritdoc IAccessManager
|
|
414
|
+
function setTargetClosed(address target, bool closed) public virtual onlyAuthorized {
|
|
415
|
+
_setTargetClosed(target, closed);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* @dev Set the closed flag for a contract. This is an internal setter with no access restrictions.
|
|
420
|
+
*
|
|
421
|
+
* Emits a {TargetClosed} event.
|
|
422
|
+
*/
|
|
423
|
+
function _setTargetClosed(address target, bool closed) internal virtual {
|
|
424
|
+
_targets[target].closed = closed;
|
|
425
|
+
emit TargetClosed(target, closed);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// ============================================== DELAYED OPERATIONS ==============================================
|
|
429
|
+
/// @inheritdoc IAccessManager
|
|
430
|
+
function getSchedule(bytes32 id) public view virtual returns (uint48) {
|
|
431
|
+
uint48 timepoint = _schedules[id].timepoint;
|
|
432
|
+
return _isExpired(timepoint) ? 0 : timepoint;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/// @inheritdoc IAccessManager
|
|
436
|
+
function getNonce(bytes32 id) public view virtual returns (uint32) {
|
|
437
|
+
return _schedules[id].nonce;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/// @inheritdoc IAccessManager
|
|
441
|
+
function schedule(
|
|
442
|
+
address target,
|
|
443
|
+
bytes calldata data,
|
|
444
|
+
uint48 when
|
|
445
|
+
) public virtual returns (bytes32 operationId, uint32 nonce) {
|
|
446
|
+
address caller = _msgSender();
|
|
447
|
+
|
|
448
|
+
// Fetch restrictions that apply to the caller on the targeted function
|
|
449
|
+
(, uint32 setback) = _canCallExtended(caller, target, data);
|
|
450
|
+
|
|
451
|
+
uint48 minWhen = Time.timestamp() + setback;
|
|
452
|
+
|
|
453
|
+
// If call with delay is not authorized, or if requested timing is too soon, revert
|
|
454
|
+
if (setback == 0 || (when > 0 && when < minWhen)) {
|
|
455
|
+
revert AccessManagerUnauthorizedCall(caller, target, _checkSelector(data));
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Reuse variable due to stack too deep
|
|
459
|
+
when = uint48(Math.max(when, minWhen)); // cast is safe: both inputs are uint48
|
|
460
|
+
|
|
461
|
+
// If caller is authorised, schedule operation
|
|
462
|
+
operationId = hashOperation(caller, target, data);
|
|
463
|
+
|
|
464
|
+
_checkNotScheduled(operationId);
|
|
465
|
+
|
|
466
|
+
unchecked {
|
|
467
|
+
// It's not feasible to overflow the nonce in less than 1000 years
|
|
468
|
+
nonce = _schedules[operationId].nonce + 1;
|
|
469
|
+
}
|
|
470
|
+
_schedules[operationId].timepoint = when;
|
|
471
|
+
_schedules[operationId].nonce = nonce;
|
|
472
|
+
emit OperationScheduled(operationId, nonce, when, caller, target, data);
|
|
473
|
+
|
|
474
|
+
// Using named return values because otherwise we get stack too deep
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* @dev Reverts if the operation is currently scheduled and has not expired.
|
|
479
|
+
*
|
|
480
|
+
* NOTE: This function was introduced due to stack too deep errors in schedule.
|
|
481
|
+
*/
|
|
482
|
+
function _checkNotScheduled(bytes32 operationId) private view {
|
|
483
|
+
uint48 prevTimepoint = _schedules[operationId].timepoint;
|
|
484
|
+
if (prevTimepoint != 0 && !_isExpired(prevTimepoint)) {
|
|
485
|
+
revert AccessManagerAlreadyScheduled(operationId);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/// @inheritdoc IAccessManager
|
|
490
|
+
// Reentrancy is not an issue because permissions are checked on msg.sender. Additionally,
|
|
491
|
+
// _consumeScheduledOp guarantees a scheduled operation is only executed once.
|
|
492
|
+
// slither-disable-next-line reentrancy-no-eth
|
|
493
|
+
function execute(address target, bytes calldata data) public payable virtual returns (uint32) {
|
|
494
|
+
address caller = _msgSender();
|
|
495
|
+
|
|
496
|
+
// Fetch restrictions that apply to the caller on the targeted function
|
|
497
|
+
(bool immediate, uint32 setback) = _canCallExtended(caller, target, data);
|
|
498
|
+
|
|
499
|
+
// If call is not authorized, revert
|
|
500
|
+
if (!immediate && setback == 0) {
|
|
501
|
+
revert AccessManagerUnauthorizedCall(caller, target, _checkSelector(data));
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
bytes32 operationId = hashOperation(caller, target, data);
|
|
505
|
+
uint32 nonce;
|
|
506
|
+
|
|
507
|
+
// If caller is authorised, check operation was scheduled early enough
|
|
508
|
+
// Consume an available schedule even if there is no currently enforced delay
|
|
509
|
+
if (setback != 0 || getSchedule(operationId) != 0) {
|
|
510
|
+
nonce = _consumeScheduledOp(operationId);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// Mark the target and selector as authorised
|
|
514
|
+
bytes32 executionIdBefore = _executionId;
|
|
515
|
+
_executionId = _hashExecutionId(target, _checkSelector(data));
|
|
516
|
+
|
|
517
|
+
// Perform call
|
|
518
|
+
Address.functionCallWithValue(target, data, msg.value);
|
|
519
|
+
|
|
520
|
+
// Reset execute identifier
|
|
521
|
+
_executionId = executionIdBefore;
|
|
522
|
+
|
|
523
|
+
return nonce;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/// @inheritdoc IAccessManager
|
|
527
|
+
function cancel(address caller, address target, bytes calldata data) public virtual returns (uint32) {
|
|
528
|
+
address msgsender = _msgSender();
|
|
529
|
+
bytes4 selector = _checkSelector(data);
|
|
530
|
+
|
|
531
|
+
bytes32 operationId = hashOperation(caller, target, data);
|
|
532
|
+
if (_schedules[operationId].timepoint == 0) {
|
|
533
|
+
revert AccessManagerNotScheduled(operationId);
|
|
534
|
+
} else if (caller != msgsender) {
|
|
535
|
+
// calls can only be canceled by the account that scheduled them, a global admin, or by a guardian of the required role.
|
|
536
|
+
(bool isAdmin, ) = hasRole(ADMIN_ROLE, msgsender);
|
|
537
|
+
(bool isGuardian, ) = hasRole(getRoleGuardian(getTargetFunctionRole(target, selector)), msgsender);
|
|
538
|
+
if (!isAdmin && !isGuardian) {
|
|
539
|
+
revert AccessManagerUnauthorizedCancel(msgsender, caller, target, selector);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
delete _schedules[operationId].timepoint; // reset the timepoint, keep the nonce
|
|
544
|
+
uint32 nonce = _schedules[operationId].nonce;
|
|
545
|
+
emit OperationCanceled(operationId, nonce);
|
|
546
|
+
|
|
547
|
+
return nonce;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/// @inheritdoc IAccessManager
|
|
551
|
+
function consumeScheduledOp(address caller, bytes calldata data) public virtual {
|
|
552
|
+
address target = _msgSender();
|
|
553
|
+
if (IAccessManaged(target).isConsumingScheduledOp() != IAccessManaged.isConsumingScheduledOp.selector) {
|
|
554
|
+
revert AccessManagerUnauthorizedConsume(target);
|
|
555
|
+
}
|
|
556
|
+
_consumeScheduledOp(hashOperation(caller, target, data));
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* @dev Internal variant of {consumeScheduledOp} that operates on bytes32 operationId.
|
|
561
|
+
*
|
|
562
|
+
* Returns the nonce of the scheduled operation that is consumed.
|
|
563
|
+
*/
|
|
564
|
+
function _consumeScheduledOp(bytes32 operationId) internal virtual returns (uint32) {
|
|
565
|
+
uint48 timepoint = _schedules[operationId].timepoint;
|
|
566
|
+
uint32 nonce = _schedules[operationId].nonce;
|
|
567
|
+
|
|
568
|
+
if (timepoint == 0) {
|
|
569
|
+
revert AccessManagerNotScheduled(operationId);
|
|
570
|
+
} else if (timepoint > Time.timestamp()) {
|
|
571
|
+
revert AccessManagerNotReady(operationId);
|
|
572
|
+
} else if (_isExpired(timepoint)) {
|
|
573
|
+
revert AccessManagerExpired(operationId);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
delete _schedules[operationId].timepoint; // reset the timepoint, keep the nonce
|
|
577
|
+
emit OperationExecuted(operationId, nonce);
|
|
578
|
+
|
|
579
|
+
return nonce;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
/// @inheritdoc IAccessManager
|
|
583
|
+
function hashOperation(address caller, address target, bytes calldata data) public view virtual returns (bytes32) {
|
|
584
|
+
return keccak256(abi.encode(caller, target, data));
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// ==================================================== OTHERS ====================================================
|
|
588
|
+
/// @inheritdoc IAccessManager
|
|
589
|
+
function updateAuthority(address target, address newAuthority) public virtual onlyAuthorized {
|
|
590
|
+
IAccessManaged(target).setAuthority(newAuthority);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// ================================================= ADMIN LOGIC ==================================================
|
|
594
|
+
/**
|
|
595
|
+
* @dev Check if the current call is authorized according to admin and roles logic.
|
|
596
|
+
*
|
|
597
|
+
* WARNING: Carefully review the considerations of {AccessManaged-restricted} since they apply to this modifier.
|
|
598
|
+
*/
|
|
599
|
+
function _checkAuthorized() private {
|
|
600
|
+
address caller = _msgSender();
|
|
601
|
+
(bool immediate, uint32 delay) = _canCallSelf(caller, _msgData());
|
|
602
|
+
if (!immediate) {
|
|
603
|
+
if (delay == 0) {
|
|
604
|
+
(, uint64 requiredRole, ) = _getAdminRestrictions(_msgData());
|
|
605
|
+
revert AccessManagerUnauthorizedAccount(caller, requiredRole);
|
|
606
|
+
} else {
|
|
607
|
+
_consumeScheduledOp(hashOperation(caller, address(this), _msgData()));
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* @dev Get the admin restrictions of a given function call based on the function and arguments involved.
|
|
614
|
+
*
|
|
615
|
+
* Returns:
|
|
616
|
+
* - bool restricted: does this data match a restricted operation
|
|
617
|
+
* - uint64: which role is this operation restricted to
|
|
618
|
+
* - uint32: minimum delay to enforce for that operation (max between operation's delay and admin's execution delay)
|
|
619
|
+
*/
|
|
620
|
+
function _getAdminRestrictions(
|
|
621
|
+
bytes calldata data
|
|
622
|
+
) private view returns (bool adminRestricted, uint64 roleAdminId, uint32 executionDelay) {
|
|
623
|
+
if (data.length < 4) {
|
|
624
|
+
return (false, 0, 0);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
bytes4 selector = _checkSelector(data);
|
|
628
|
+
|
|
629
|
+
// Restricted to ADMIN with no delay beside any execution delay the caller may have
|
|
630
|
+
if (
|
|
631
|
+
selector == this.labelRole.selector ||
|
|
632
|
+
selector == this.setRoleAdmin.selector ||
|
|
633
|
+
selector == this.setRoleGuardian.selector ||
|
|
634
|
+
selector == this.setGrantDelay.selector ||
|
|
635
|
+
selector == this.setTargetAdminDelay.selector
|
|
636
|
+
) {
|
|
637
|
+
return (true, ADMIN_ROLE, 0);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// Restricted to ADMIN with the admin delay corresponding to the target
|
|
641
|
+
if (
|
|
642
|
+
selector == this.updateAuthority.selector ||
|
|
643
|
+
selector == this.setTargetClosed.selector ||
|
|
644
|
+
selector == this.setTargetFunctionRole.selector
|
|
645
|
+
) {
|
|
646
|
+
// First argument is a target.
|
|
647
|
+
address target = abi.decode(data[0x04:0x24], (address));
|
|
648
|
+
uint32 delay = getTargetAdminDelay(target);
|
|
649
|
+
return (true, ADMIN_ROLE, delay);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// Restricted to that role's admin with no delay beside any execution delay the caller may have.
|
|
653
|
+
if (selector == this.grantRole.selector || selector == this.revokeRole.selector) {
|
|
654
|
+
// First argument is a roleId.
|
|
655
|
+
uint64 roleId = abi.decode(data[0x04:0x24], (uint64));
|
|
656
|
+
return (true, getRoleAdmin(roleId), 0);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
return (false, getTargetFunctionRole(address(this), selector), 0);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
// =================================================== HELPERS ====================================================
|
|
663
|
+
/**
|
|
664
|
+
* @dev An extended version of {canCall} for internal usage that checks {_canCallSelf}
|
|
665
|
+
* when the target is this contract.
|
|
666
|
+
*
|
|
667
|
+
* Returns:
|
|
668
|
+
* - bool immediate: whether the operation can be executed immediately (with no delay)
|
|
669
|
+
* - uint32 delay: the execution delay
|
|
670
|
+
*/
|
|
671
|
+
function _canCallExtended(
|
|
672
|
+
address caller,
|
|
673
|
+
address target,
|
|
674
|
+
bytes calldata data
|
|
675
|
+
) private view returns (bool immediate, uint32 delay) {
|
|
676
|
+
if (target == address(this)) {
|
|
677
|
+
return _canCallSelf(caller, data);
|
|
678
|
+
} else {
|
|
679
|
+
return data.length < 4 ? (false, 0) : canCall(caller, target, _checkSelector(data));
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* @dev A version of {canCall} that checks for restrictions in this contract.
|
|
685
|
+
*/
|
|
686
|
+
function _canCallSelf(address caller, bytes calldata data) private view returns (bool immediate, uint32 delay) {
|
|
687
|
+
if (data.length < 4) {
|
|
688
|
+
return (false, 0);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
if (caller == address(this)) {
|
|
692
|
+
// Caller is AccessManager, this means the call was sent through {execute} and it already checked
|
|
693
|
+
// permissions. We verify that the call "identifier", which is set during {execute}, is correct.
|
|
694
|
+
return (_isExecuting(address(this), _checkSelector(data)), 0);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
(bool adminRestricted, uint64 roleId, uint32 operationDelay) = _getAdminRestrictions(data);
|
|
698
|
+
|
|
699
|
+
// isTargetClosed apply to non-admin-restricted function
|
|
700
|
+
if (!adminRestricted && isTargetClosed(address(this))) {
|
|
701
|
+
return (false, 0);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
(bool inRole, uint32 executionDelay) = hasRole(roleId, caller);
|
|
705
|
+
if (!inRole) {
|
|
706
|
+
return (false, 0);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
// downcast is safe because both options are uint32
|
|
710
|
+
delay = uint32(Math.max(operationDelay, executionDelay));
|
|
711
|
+
return (delay == 0, delay);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* @dev Returns true if a call with `target` and `selector` is being executed via {executed}.
|
|
716
|
+
*/
|
|
717
|
+
function _isExecuting(address target, bytes4 selector) private view returns (bool) {
|
|
718
|
+
return _executionId == _hashExecutionId(target, selector);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* @dev Returns true if a schedule timepoint is past its expiration deadline.
|
|
723
|
+
*/
|
|
724
|
+
function _isExpired(uint48 timepoint) private view returns (bool) {
|
|
725
|
+
return timepoint + expiration() <= Time.timestamp();
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* @dev Extracts the selector from calldata. Panics if data is not at least 4 bytes
|
|
730
|
+
*/
|
|
731
|
+
function _checkSelector(bytes calldata data) private pure returns (bytes4) {
|
|
732
|
+
return bytes4(data[0:4]);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* @dev Hashing function for execute protection
|
|
737
|
+
*/
|
|
738
|
+
function _hashExecutionId(address target, bytes4 selector) private pure returns (bytes32) {
|
|
739
|
+
return Hashes.efficientKeccak256(bytes32(uint256(uint160(target))), selector);
|
|
740
|
+
}
|
|
741
|
+
}
|