@gnosis-guild/zodiac 4.0.3
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/LICENSE +165 -0
- package/README.md +141 -0
- package/contracts/core/GuardableModifier.sol +96 -0
- package/contracts/core/GuardableModule.sol +95 -0
- package/contracts/core/Modifier.sol +204 -0
- package/contracts/core/Module.sol +73 -0
- package/contracts/factory/FactoryFriendly.sol +10 -0
- package/contracts/factory/ModuleProxyFactory.sol +51 -0
- package/contracts/guard/BaseGuard.sol +36 -0
- package/contracts/guard/Guardable.sol +32 -0
- package/contracts/interfaces/IAvatar.sol +71 -0
- package/contracts/interfaces/IGuard.sol +22 -0
- package/contracts/signature/ExecutionTracker.sol +17 -0
- package/contracts/signature/IERC1271.sol +19 -0
- package/contracts/signature/SignatureChecker.sol +154 -0
- package/contracts/test/TestAvatar.sol +64 -0
- package/contracts/test/TestGuard.sol +82 -0
- package/contracts/test/TestGuardableModifier.sol +82 -0
- package/contracts/test/TestModifier.sol +88 -0
- package/contracts/test/TestModule.sol +66 -0
- package/contracts/test/TestSignature.sol +71 -0
- package/dist/cjs/abi/Bridge.json +382 -0
- package/dist/cjs/abi/CirculatingSupplyErc20.json +245 -0
- package/dist/cjs/abi/CirculatingSupplyErc721.json +245 -0
- package/dist/cjs/abi/Connext.json +493 -0
- package/dist/cjs/abi/Delay.json +728 -0
- package/dist/cjs/abi/Erc20Votes.json +797 -0
- package/dist/cjs/abi/Erc721Votes.json +792 -0
- package/dist/cjs/abi/ExitErc20.json +419 -0
- package/dist/cjs/abi/ExitErc721.json +419 -0
- package/dist/cjs/abi/MetaGuard.json +471 -0
- package/dist/cjs/abi/ModuleProxyFactory.json +77 -0
- package/dist/cjs/abi/MultisendEncoder.json +61 -0
- package/dist/cjs/abi/OptimisticGovernor.json +938 -0
- package/dist/cjs/abi/OzGovernor.json +706 -0
- package/dist/cjs/abi/Permissions.json +520 -0
- package/dist/cjs/abi/RealityErc20.json +871 -0
- package/dist/cjs/abi/RealityEth.json +871 -0
- package/dist/cjs/abi/RolesV1.json +990 -0
- package/dist/cjs/abi/RolesV2.json +1484 -0
- package/dist/cjs/abi/ScopeGuard.json +592 -0
- package/dist/cjs/abi/Tellor.json +978 -0
- package/dist/cjs/contracts.d.ts +61 -0
- package/dist/cjs/contracts.js +309 -0
- package/dist/cjs/factory/deployModuleFactory.d.ts +9 -0
- package/dist/cjs/factory/deployModuleFactory.js +44 -0
- package/dist/cjs/factory/index.d.ts +5 -0
- package/dist/cjs/factory/index.js +21 -0
- package/dist/cjs/factory/mastercopyDeployer.d.ts +27 -0
- package/dist/cjs/factory/mastercopyDeployer.js +97 -0
- package/dist/cjs/factory/moduleDeployer.d.ts +105 -0
- package/dist/cjs/factory/moduleDeployer.js +90 -0
- package/dist/cjs/factory/singletonFactory.d.ts +11 -0
- package/dist/cjs/factory/singletonFactory.js +39 -0
- package/dist/cjs/factory/types.d.ts +25 -0
- package/dist/cjs/factory/types.js +58 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/initData/Bridge.d.ts +2 -0
- package/dist/cjs/initData/Bridge.js +5 -0
- package/dist/cjs/initData/CirculatingSupplyErc20.d.ts +2 -0
- package/dist/cjs/initData/CirculatingSupplyErc20.js +5 -0
- package/dist/cjs/initData/CirculatingSupplyErc721.d.ts +2 -0
- package/dist/cjs/initData/CirculatingSupplyErc721.js +5 -0
- package/dist/cjs/initData/Connext.d.ts +2 -0
- package/dist/cjs/initData/Connext.js +5 -0
- package/dist/cjs/initData/Delay.d.ts +2 -0
- package/dist/cjs/initData/Delay.js +5 -0
- package/dist/cjs/initData/Erc20Votes.d.ts +2 -0
- package/dist/cjs/initData/Erc20Votes.js +5 -0
- package/dist/cjs/initData/Erc721Votes.d.ts +2 -0
- package/dist/cjs/initData/Erc721Votes.js +5 -0
- package/dist/cjs/initData/ExitErc20.d.ts +2 -0
- package/dist/cjs/initData/ExitErc20.js +5 -0
- package/dist/cjs/initData/ExitErc721.d.ts +2 -0
- package/dist/cjs/initData/ExitErc721.js +5 -0
- package/dist/cjs/initData/ModuleProxyFactory.d.ts +2 -0
- package/dist/cjs/initData/ModuleProxyFactory.js +5 -0
- package/dist/cjs/initData/MultisendEncoder.d.ts +2 -0
- package/dist/cjs/initData/MultisendEncoder.js +5 -0
- package/dist/cjs/initData/OzGovernor.d.ts +2 -0
- package/dist/cjs/initData/OzGovernor.js +5 -0
- package/dist/cjs/initData/Permissions.d.ts +2 -0
- package/dist/cjs/initData/Permissions.js +5 -0
- package/dist/cjs/initData/RealityErc20.d.ts +2 -0
- package/dist/cjs/initData/RealityErc20.js +5 -0
- package/dist/cjs/initData/RealityEth.d.ts +2 -0
- package/dist/cjs/initData/RealityEth.js +5 -0
- package/dist/cjs/initData/RolesV1.d.ts +2 -0
- package/dist/cjs/initData/RolesV1.js +5 -0
- package/dist/cjs/initData/RolesV2.d.ts +2 -0
- package/dist/cjs/initData/RolesV2.js +5 -0
- package/dist/cjs/initData/ScopeGuard.d.ts +2 -0
- package/dist/cjs/initData/ScopeGuard.js +5 -0
- package/dist/cjs/types/Bridge.d.ts +208 -0
- package/dist/cjs/types/Bridge.js +2 -0
- package/dist/cjs/types/CirculatingSupplyErc20.d.ts +158 -0
- package/dist/cjs/types/CirculatingSupplyErc20.js +2 -0
- package/dist/cjs/types/CirculatingSupplyErc721.d.ts +158 -0
- package/dist/cjs/types/CirculatingSupplyErc721.js +2 -0
- package/dist/cjs/types/Connext.d.ts +289 -0
- package/dist/cjs/types/Connext.js +2 -0
- package/dist/cjs/types/Delay.d.ts +407 -0
- package/dist/cjs/types/Delay.js +2 -0
- package/dist/cjs/types/Erc20Votes.d.ts +475 -0
- package/dist/cjs/types/Erc20Votes.js +2 -0
- package/dist/cjs/types/Erc721Votes.d.ts +455 -0
- package/dist/cjs/types/Erc721Votes.js +2 -0
- package/dist/cjs/types/ExitErc20.d.ts +238 -0
- package/dist/cjs/types/ExitErc20.js +2 -0
- package/dist/cjs/types/ExitErc721.d.ts +238 -0
- package/dist/cjs/types/ExitErc721.js +2 -0
- package/dist/cjs/types/MetaGuard.d.ts +274 -0
- package/dist/cjs/types/MetaGuard.js +2 -0
- package/dist/cjs/types/ModuleProxyFactory.d.ts +54 -0
- package/dist/cjs/types/ModuleProxyFactory.js +2 -0
- package/dist/cjs/types/MultisendEncoder.d.ts +59 -0
- package/dist/cjs/types/MultisendEncoder.js +2 -0
- package/dist/cjs/types/OptimisticGovernor.d.ts +547 -0
- package/dist/cjs/types/OptimisticGovernor.js +2 -0
- package/dist/cjs/types/OzGovernor.d.ts +645 -0
- package/dist/cjs/types/OzGovernor.js +2 -0
- package/dist/cjs/types/Permissions.d.ts +341 -0
- package/dist/cjs/types/Permissions.js +2 -0
- package/dist/cjs/types/RealityErc20.d.ts +471 -0
- package/dist/cjs/types/RealityErc20.js +2 -0
- package/dist/cjs/types/RealityEth.d.ts +471 -0
- package/dist/cjs/types/RealityEth.js +2 -0
- package/dist/cjs/types/RolesV1.d.ts +649 -0
- package/dist/cjs/types/RolesV1.js +2 -0
- package/dist/cjs/types/RolesV2.d.ts +908 -0
- package/dist/cjs/types/RolesV2.js +2 -0
- package/dist/cjs/types/ScopeGuard.d.ts +405 -0
- package/dist/cjs/types/ScopeGuard.js +2 -0
- package/dist/cjs/types/Tellor.d.ts +572 -0
- package/dist/cjs/types/Tellor.js +2 -0
- package/dist/cjs/types/Usul.d.ts +535 -0
- package/dist/cjs/types/Usul.js +2 -0
- package/dist/cjs/types/common.d.ts +50 -0
- package/dist/cjs/types/common.js +2 -0
- package/dist/cjs/types/factories/Bridge__factory.d.ts +303 -0
- package/dist/cjs/types/factories/Bridge__factory.js +399 -0
- package/dist/cjs/types/factories/CirculatingSupplyErc20__factory.d.ts +194 -0
- package/dist/cjs/types/factories/CirculatingSupplyErc20__factory.js +262 -0
- package/dist/cjs/types/factories/CirculatingSupplyErc721__factory.d.ts +194 -0
- package/dist/cjs/types/factories/CirculatingSupplyErc721__factory.js +262 -0
- package/dist/cjs/types/factories/Connext__factory.d.ts +389 -0
- package/dist/cjs/types/factories/Connext__factory.js +510 -0
- package/dist/cjs/types/factories/Delay__factory.d.ts +568 -0
- package/dist/cjs/types/factories/Delay__factory.js +745 -0
- package/dist/cjs/types/factories/Erc20Votes__factory.d.ts +619 -0
- package/dist/cjs/types/factories/Erc20Votes__factory.js +814 -0
- package/dist/cjs/types/factories/Erc721Votes__factory.d.ts +616 -0
- package/dist/cjs/types/factories/Erc721Votes__factory.js +809 -0
- package/dist/cjs/types/factories/ExitErc20__factory.d.ts +329 -0
- package/dist/cjs/types/factories/ExitErc20__factory.js +436 -0
- package/dist/cjs/types/factories/ExitErc721__factory.d.ts +329 -0
- package/dist/cjs/types/factories/ExitErc721__factory.js +436 -0
- package/dist/cjs/types/factories/MetaGuard__factory.d.ts +369 -0
- package/dist/cjs/types/factories/MetaGuard__factory.js +488 -0
- package/dist/cjs/types/factories/ModuleProxyFactory__factory.d.ts +64 -0
- package/dist/cjs/types/factories/ModuleProxyFactory__factory.js +94 -0
- package/dist/cjs/types/factories/MultisendEncoder__factory.d.ts +53 -0
- package/dist/cjs/types/factories/MultisendEncoder__factory.js +78 -0
- package/dist/cjs/types/factories/OptimisticGovernor__factory.d.ts +734 -0
- package/dist/cjs/types/factories/OptimisticGovernor__factory.js +955 -0
- package/dist/cjs/types/factories/OzGovernor__factory.d.ts +827 -0
- package/dist/cjs/types/factories/OzGovernor__factory.js +1080 -0
- package/dist/cjs/types/factories/Permissions__factory.d.ts +423 -0
- package/dist/cjs/types/factories/Permissions__factory.js +537 -0
- package/dist/cjs/types/factories/RealityErc20__factory.d.ts +680 -0
- package/dist/cjs/types/factories/RealityErc20__factory.js +888 -0
- package/dist/cjs/types/factories/RealityEth__factory.d.ts +680 -0
- package/dist/cjs/types/factories/RealityEth__factory.js +888 -0
- package/dist/cjs/types/factories/RolesV1__factory.d.ts +776 -0
- package/dist/cjs/types/factories/RolesV1__factory.js +1007 -0
- package/dist/cjs/types/factories/RolesV2__factory.d.ts +1156 -0
- package/dist/cjs/types/factories/RolesV2__factory.js +1501 -0
- package/dist/cjs/types/factories/ScopeGuard__factory.d.ts +463 -0
- package/dist/cjs/types/factories/ScopeGuard__factory.js +609 -0
- package/dist/cjs/types/factories/Tellor__factory.d.ts +757 -0
- package/dist/cjs/types/factories/Tellor__factory.js +995 -0
- package/dist/cjs/types/factories/Usul__factory.d.ts +634 -0
- package/dist/cjs/types/factories/Usul__factory.js +829 -0
- package/dist/cjs/types/factories/index.d.ts +22 -0
- package/dist/cjs/types/factories/index.js +50 -0
- package/dist/cjs/types/index.d.ts +45 -0
- package/dist/cjs/types/index.js +71 -0
- package/dist/esm/abi/Bridge.json +382 -0
- package/dist/esm/abi/CirculatingSupplyErc20.json +245 -0
- package/dist/esm/abi/CirculatingSupplyErc721.json +245 -0
- package/dist/esm/abi/Connext.json +493 -0
- package/dist/esm/abi/Delay.json +728 -0
- package/dist/esm/abi/Erc20Votes.json +797 -0
- package/dist/esm/abi/Erc721Votes.json +792 -0
- package/dist/esm/abi/ExitErc20.json +419 -0
- package/dist/esm/abi/ExitErc721.json +419 -0
- package/dist/esm/abi/MetaGuard.json +471 -0
- package/dist/esm/abi/ModuleProxyFactory.json +77 -0
- package/dist/esm/abi/MultisendEncoder.json +61 -0
- package/dist/esm/abi/OptimisticGovernor.json +938 -0
- package/dist/esm/abi/OzGovernor.json +706 -0
- package/dist/esm/abi/Permissions.json +520 -0
- package/dist/esm/abi/RealityErc20.json +871 -0
- package/dist/esm/abi/RealityEth.json +871 -0
- package/dist/esm/abi/RolesV1.json +990 -0
- package/dist/esm/abi/RolesV2.json +1484 -0
- package/dist/esm/abi/ScopeGuard.json +592 -0
- package/dist/esm/abi/Tellor.json +978 -0
- package/dist/esm/contracts.d.ts +61 -0
- package/dist/esm/contracts.js +280 -0
- package/dist/esm/factory/deployModuleFactory.d.ts +9 -0
- package/dist/esm/factory/deployModuleFactory.js +46 -0
- package/dist/esm/factory/index.d.ts +5 -0
- package/dist/esm/factory/index.js +5 -0
- package/dist/esm/factory/mastercopyDeployer.d.ts +27 -0
- package/dist/esm/factory/mastercopyDeployer.js +100 -0
- package/dist/esm/factory/moduleDeployer.d.ts +105 -0
- package/dist/esm/factory/moduleDeployer.js +91 -0
- package/dist/esm/factory/singletonFactory.d.ts +11 -0
- package/dist/esm/factory/singletonFactory.js +44 -0
- package/dist/esm/factory/types.d.ts +25 -0
- package/dist/esm/factory/types.js +55 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/initData/Bridge.d.ts +2 -0
- package/dist/esm/initData/Bridge.js +2 -0
- package/dist/esm/initData/CirculatingSupplyErc20.d.ts +2 -0
- package/dist/esm/initData/CirculatingSupplyErc20.js +2 -0
- package/dist/esm/initData/CirculatingSupplyErc721.d.ts +2 -0
- package/dist/esm/initData/CirculatingSupplyErc721.js +2 -0
- package/dist/esm/initData/Connext.d.ts +2 -0
- package/dist/esm/initData/Connext.js +2 -0
- package/dist/esm/initData/Delay.d.ts +2 -0
- package/dist/esm/initData/Delay.js +2 -0
- package/dist/esm/initData/Erc20Votes.d.ts +2 -0
- package/dist/esm/initData/Erc20Votes.js +2 -0
- package/dist/esm/initData/Erc721Votes.d.ts +2 -0
- package/dist/esm/initData/Erc721Votes.js +2 -0
- package/dist/esm/initData/ExitErc20.d.ts +2 -0
- package/dist/esm/initData/ExitErc20.js +2 -0
- package/dist/esm/initData/ExitErc721.d.ts +2 -0
- package/dist/esm/initData/ExitErc721.js +2 -0
- package/dist/esm/initData/ModuleProxyFactory.d.ts +2 -0
- package/dist/esm/initData/ModuleProxyFactory.js +2 -0
- package/dist/esm/initData/MultisendEncoder.d.ts +2 -0
- package/dist/esm/initData/MultisendEncoder.js +2 -0
- package/dist/esm/initData/OzGovernor.d.ts +2 -0
- package/dist/esm/initData/OzGovernor.js +2 -0
- package/dist/esm/initData/Permissions.d.ts +2 -0
- package/dist/esm/initData/Permissions.js +2 -0
- package/dist/esm/initData/RealityErc20.d.ts +2 -0
- package/dist/esm/initData/RealityErc20.js +2 -0
- package/dist/esm/initData/RealityEth.d.ts +2 -0
- package/dist/esm/initData/RealityEth.js +2 -0
- package/dist/esm/initData/RolesV1.d.ts +2 -0
- package/dist/esm/initData/RolesV1.js +2 -0
- package/dist/esm/initData/RolesV2.d.ts +2 -0
- package/dist/esm/initData/RolesV2.js +2 -0
- package/dist/esm/initData/ScopeGuard.d.ts +2 -0
- package/dist/esm/initData/ScopeGuard.js +2 -0
- package/dist/esm/types/Bridge.d.ts +208 -0
- package/dist/esm/types/Bridge.js +1 -0
- package/dist/esm/types/CirculatingSupplyErc20.d.ts +158 -0
- package/dist/esm/types/CirculatingSupplyErc20.js +1 -0
- package/dist/esm/types/CirculatingSupplyErc721.d.ts +158 -0
- package/dist/esm/types/CirculatingSupplyErc721.js +1 -0
- package/dist/esm/types/Connext.d.ts +289 -0
- package/dist/esm/types/Connext.js +1 -0
- package/dist/esm/types/Delay.d.ts +407 -0
- package/dist/esm/types/Delay.js +1 -0
- package/dist/esm/types/Erc20Votes.d.ts +475 -0
- package/dist/esm/types/Erc20Votes.js +1 -0
- package/dist/esm/types/Erc721Votes.d.ts +455 -0
- package/dist/esm/types/Erc721Votes.js +1 -0
- package/dist/esm/types/ExitErc20.d.ts +238 -0
- package/dist/esm/types/ExitErc20.js +1 -0
- package/dist/esm/types/ExitErc721.d.ts +238 -0
- package/dist/esm/types/ExitErc721.js +1 -0
- package/dist/esm/types/MetaGuard.d.ts +274 -0
- package/dist/esm/types/MetaGuard.js +1 -0
- package/dist/esm/types/ModuleProxyFactory.d.ts +54 -0
- package/dist/esm/types/ModuleProxyFactory.js +1 -0
- package/dist/esm/types/MultisendEncoder.d.ts +59 -0
- package/dist/esm/types/MultisendEncoder.js +1 -0
- package/dist/esm/types/OptimisticGovernor.d.ts +547 -0
- package/dist/esm/types/OptimisticGovernor.js +1 -0
- package/dist/esm/types/OzGovernor.d.ts +645 -0
- package/dist/esm/types/OzGovernor.js +1 -0
- package/dist/esm/types/Permissions.d.ts +341 -0
- package/dist/esm/types/Permissions.js +1 -0
- package/dist/esm/types/RealityErc20.d.ts +471 -0
- package/dist/esm/types/RealityErc20.js +1 -0
- package/dist/esm/types/RealityEth.d.ts +471 -0
- package/dist/esm/types/RealityEth.js +1 -0
- package/dist/esm/types/RolesV1.d.ts +649 -0
- package/dist/esm/types/RolesV1.js +1 -0
- package/dist/esm/types/RolesV2.d.ts +908 -0
- package/dist/esm/types/RolesV2.js +1 -0
- package/dist/esm/types/ScopeGuard.d.ts +405 -0
- package/dist/esm/types/ScopeGuard.js +1 -0
- package/dist/esm/types/Tellor.d.ts +572 -0
- package/dist/esm/types/Tellor.js +1 -0
- package/dist/esm/types/Usul.d.ts +535 -0
- package/dist/esm/types/Usul.js +1 -0
- package/dist/esm/types/common.d.ts +50 -0
- package/dist/esm/types/common.js +1 -0
- package/dist/esm/types/factories/Bridge__factory.d.ts +303 -0
- package/dist/esm/types/factories/Bridge__factory.js +395 -0
- package/dist/esm/types/factories/CirculatingSupplyErc20__factory.d.ts +194 -0
- package/dist/esm/types/factories/CirculatingSupplyErc20__factory.js +258 -0
- package/dist/esm/types/factories/CirculatingSupplyErc721__factory.d.ts +194 -0
- package/dist/esm/types/factories/CirculatingSupplyErc721__factory.js +258 -0
- package/dist/esm/types/factories/Connext__factory.d.ts +389 -0
- package/dist/esm/types/factories/Connext__factory.js +506 -0
- package/dist/esm/types/factories/Delay__factory.d.ts +568 -0
- package/dist/esm/types/factories/Delay__factory.js +741 -0
- package/dist/esm/types/factories/Erc20Votes__factory.d.ts +619 -0
- package/dist/esm/types/factories/Erc20Votes__factory.js +810 -0
- package/dist/esm/types/factories/Erc721Votes__factory.d.ts +616 -0
- package/dist/esm/types/factories/Erc721Votes__factory.js +805 -0
- package/dist/esm/types/factories/ExitErc20__factory.d.ts +329 -0
- package/dist/esm/types/factories/ExitErc20__factory.js +432 -0
- package/dist/esm/types/factories/ExitErc721__factory.d.ts +329 -0
- package/dist/esm/types/factories/ExitErc721__factory.js +432 -0
- package/dist/esm/types/factories/MetaGuard__factory.d.ts +369 -0
- package/dist/esm/types/factories/MetaGuard__factory.js +484 -0
- package/dist/esm/types/factories/ModuleProxyFactory__factory.d.ts +64 -0
- package/dist/esm/types/factories/ModuleProxyFactory__factory.js +90 -0
- package/dist/esm/types/factories/MultisendEncoder__factory.d.ts +53 -0
- package/dist/esm/types/factories/MultisendEncoder__factory.js +74 -0
- package/dist/esm/types/factories/OptimisticGovernor__factory.d.ts +734 -0
- package/dist/esm/types/factories/OptimisticGovernor__factory.js +951 -0
- package/dist/esm/types/factories/OzGovernor__factory.d.ts +827 -0
- package/dist/esm/types/factories/OzGovernor__factory.js +1076 -0
- package/dist/esm/types/factories/Permissions__factory.d.ts +423 -0
- package/dist/esm/types/factories/Permissions__factory.js +533 -0
- package/dist/esm/types/factories/RealityErc20__factory.d.ts +680 -0
- package/dist/esm/types/factories/RealityErc20__factory.js +884 -0
- package/dist/esm/types/factories/RealityEth__factory.d.ts +680 -0
- package/dist/esm/types/factories/RealityEth__factory.js +884 -0
- package/dist/esm/types/factories/RolesV1__factory.d.ts +776 -0
- package/dist/esm/types/factories/RolesV1__factory.js +1003 -0
- package/dist/esm/types/factories/RolesV2__factory.d.ts +1156 -0
- package/dist/esm/types/factories/RolesV2__factory.js +1497 -0
- package/dist/esm/types/factories/ScopeGuard__factory.d.ts +463 -0
- package/dist/esm/types/factories/ScopeGuard__factory.js +605 -0
- package/dist/esm/types/factories/Tellor__factory.d.ts +757 -0
- package/dist/esm/types/factories/Tellor__factory.js +991 -0
- package/dist/esm/types/factories/Usul__factory.d.ts +634 -0
- package/dist/esm/types/factories/Usul__factory.js +825 -0
- package/dist/esm/types/factories/index.d.ts +22 -0
- package/dist/esm/types/factories/index.js +25 -0
- package/dist/esm/types/index.d.ts +45 -0
- package/dist/esm/types/index.js +24 -0
- package/package.json +98 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Enum} from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
|
|
5
|
+
import {ExecutionTracker} from "../signature/ExecutionTracker.sol";
|
|
6
|
+
import {IAvatar} from "../interfaces/IAvatar.sol";
|
|
7
|
+
import {Module} from "./Module.sol";
|
|
8
|
+
import {SignatureChecker} from "../signature/SignatureChecker.sol";
|
|
9
|
+
|
|
10
|
+
/// @title Modifier Interface - A contract that sits between a Module and an Avatar and enforce some additional logic.
|
|
11
|
+
abstract contract Modifier is
|
|
12
|
+
Module,
|
|
13
|
+
ExecutionTracker,
|
|
14
|
+
SignatureChecker,
|
|
15
|
+
IAvatar
|
|
16
|
+
{
|
|
17
|
+
address internal constant SENTINEL_MODULES = address(0x1);
|
|
18
|
+
/// Mapping of modules.
|
|
19
|
+
mapping(address => address) internal modules;
|
|
20
|
+
|
|
21
|
+
/// `sender` is not an authorized module.
|
|
22
|
+
/// @param sender The address of the sender.
|
|
23
|
+
error NotAuthorized(address sender);
|
|
24
|
+
|
|
25
|
+
/// `module` is invalid.
|
|
26
|
+
error InvalidModule(address module);
|
|
27
|
+
|
|
28
|
+
/// `pageSize` is invalid.
|
|
29
|
+
error InvalidPageSize();
|
|
30
|
+
|
|
31
|
+
/// `module` is already disabled.
|
|
32
|
+
error AlreadyDisabledModule(address module);
|
|
33
|
+
|
|
34
|
+
/// `module` is already enabled.
|
|
35
|
+
error AlreadyEnabledModule(address module);
|
|
36
|
+
|
|
37
|
+
/// @dev `setModules()` was already called.
|
|
38
|
+
error SetupModulesAlreadyCalled();
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
--------------------------------------------------
|
|
42
|
+
You must override both of the following virtual functions,
|
|
43
|
+
execTransactionFromModule() and execTransactionFromModuleReturnData().
|
|
44
|
+
It is recommended that implementations of both functions make use the
|
|
45
|
+
onlyModule modifier.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/// @dev Passes a transaction to the modifier.
|
|
49
|
+
/// @notice Can only be called by enabled modules.
|
|
50
|
+
/// @param to Destination address of module transaction.
|
|
51
|
+
/// @param value Ether value of module transaction.
|
|
52
|
+
/// @param data Data payload of module transaction.
|
|
53
|
+
/// @param operation Operation type of module transaction.
|
|
54
|
+
function execTransactionFromModule(
|
|
55
|
+
address to,
|
|
56
|
+
uint256 value,
|
|
57
|
+
bytes calldata data,
|
|
58
|
+
Enum.Operation operation
|
|
59
|
+
) public virtual returns (bool success);
|
|
60
|
+
|
|
61
|
+
/// @dev Passes a transaction to the modifier, expects return data.
|
|
62
|
+
/// @notice Can only be called by enabled modules.
|
|
63
|
+
/// @param to Destination address of module transaction.
|
|
64
|
+
/// @param value Ether value of module transaction.
|
|
65
|
+
/// @param data Data payload of module transaction.
|
|
66
|
+
/// @param operation Operation type of module transaction.
|
|
67
|
+
function execTransactionFromModuleReturnData(
|
|
68
|
+
address to,
|
|
69
|
+
uint256 value,
|
|
70
|
+
bytes calldata data,
|
|
71
|
+
Enum.Operation operation
|
|
72
|
+
) public virtual returns (bool success, bytes memory returnData);
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
--------------------------------------------------
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
modifier moduleOnly() {
|
|
79
|
+
if (modules[msg.sender] == address(0)) {
|
|
80
|
+
(bytes32 hash, address signer) = moduleTxSignedBy();
|
|
81
|
+
|
|
82
|
+
// is the signer a module?
|
|
83
|
+
if (modules[signer] == address(0)) {
|
|
84
|
+
revert NotAuthorized(msg.sender);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// is the provided signature fresh?
|
|
88
|
+
if (consumed[signer][hash]) {
|
|
89
|
+
revert HashAlreadyConsumed(hash);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
consumed[signer][hash] = true;
|
|
93
|
+
emit HashExecuted(hash);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
_;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function sentOrSignedByModule() internal view returns (address) {
|
|
100
|
+
if (modules[msg.sender] != address(0)) {
|
|
101
|
+
return msg.sender;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
(, address signer) = moduleTxSignedBy();
|
|
105
|
+
if (modules[signer] != address(0)) {
|
|
106
|
+
return signer;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return address(0);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// @dev Disables a module on the modifier.
|
|
113
|
+
/// @notice This can only be called by the owner.
|
|
114
|
+
/// @param prevModule Module that pointed to the module to be removed in the linked list.
|
|
115
|
+
/// @param module Module to be removed.
|
|
116
|
+
function disableModule(
|
|
117
|
+
address prevModule,
|
|
118
|
+
address module
|
|
119
|
+
) public override onlyOwner {
|
|
120
|
+
if (module == address(0) || module == SENTINEL_MODULES)
|
|
121
|
+
revert InvalidModule(module);
|
|
122
|
+
if (modules[prevModule] != module) revert AlreadyDisabledModule(module);
|
|
123
|
+
modules[prevModule] = modules[module];
|
|
124
|
+
modules[module] = address(0);
|
|
125
|
+
emit DisabledModule(module);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/// @dev Enables a module that can add transactions to the queue
|
|
129
|
+
/// @param module Address of the module to be enabled
|
|
130
|
+
/// @notice This can only be called by the owner
|
|
131
|
+
function enableModule(address module) public override onlyOwner {
|
|
132
|
+
if (module == address(0) || module == SENTINEL_MODULES)
|
|
133
|
+
revert InvalidModule(module);
|
|
134
|
+
if (modules[module] != address(0)) revert AlreadyEnabledModule(module);
|
|
135
|
+
modules[module] = modules[SENTINEL_MODULES];
|
|
136
|
+
modules[SENTINEL_MODULES] = module;
|
|
137
|
+
emit EnabledModule(module);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/// @dev Returns if an module is enabled
|
|
141
|
+
/// @return True if the module is enabled
|
|
142
|
+
function isModuleEnabled(
|
|
143
|
+
address _module
|
|
144
|
+
) public view override returns (bool) {
|
|
145
|
+
return SENTINEL_MODULES != _module && modules[_module] != address(0);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/// @dev Returns array of modules.
|
|
149
|
+
/// If all entries fit into a single page, the next pointer will be 0x1.
|
|
150
|
+
/// If another page is present, next will be the last element of the returned array.
|
|
151
|
+
/// @param start Start of the page. Has to be a module or start pointer (0x1 address)
|
|
152
|
+
/// @param pageSize Maximum number of modules that should be returned. Has to be > 0
|
|
153
|
+
/// @return array Array of modules.
|
|
154
|
+
/// @return next Start of the next page.
|
|
155
|
+
function getModulesPaginated(
|
|
156
|
+
address start,
|
|
157
|
+
uint256 pageSize
|
|
158
|
+
) external view override returns (address[] memory array, address next) {
|
|
159
|
+
if (start != SENTINEL_MODULES && !isModuleEnabled(start)) {
|
|
160
|
+
revert InvalidModule(start);
|
|
161
|
+
}
|
|
162
|
+
if (pageSize == 0) {
|
|
163
|
+
revert InvalidPageSize();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Init array with max page size
|
|
167
|
+
array = new address[](pageSize);
|
|
168
|
+
|
|
169
|
+
// Populate return array
|
|
170
|
+
uint256 moduleCount = 0;
|
|
171
|
+
next = modules[start];
|
|
172
|
+
while (
|
|
173
|
+
next != address(0) && next != SENTINEL_MODULES && moduleCount < pageSize
|
|
174
|
+
) {
|
|
175
|
+
array[moduleCount] = next;
|
|
176
|
+
next = modules[next];
|
|
177
|
+
moduleCount++;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Because of the argument validation we can assume that
|
|
181
|
+
// the `currentModule` will always be either a module address
|
|
182
|
+
// or sentinel address (aka the end). If we haven't reached the end
|
|
183
|
+
// inside the loop, we need to set the next pointer to the last element
|
|
184
|
+
// because it skipped over to the next module which is neither included
|
|
185
|
+
// in the current page nor won't be included in the next one
|
|
186
|
+
// if you pass it as a start.
|
|
187
|
+
if (next != SENTINEL_MODULES) {
|
|
188
|
+
next = array[moduleCount - 1];
|
|
189
|
+
}
|
|
190
|
+
// Set correct size of returned array
|
|
191
|
+
// solhint-disable-next-line no-inline-assembly
|
|
192
|
+
assembly {
|
|
193
|
+
mstore(array, moduleCount)
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/// @dev Initializes the modules linked list.
|
|
198
|
+
/// @notice Should be called as part of the `setUp` / initializing function and can only be called once.
|
|
199
|
+
function setupModules() internal {
|
|
200
|
+
if (modules[SENTINEL_MODULES] != address(0))
|
|
201
|
+
revert SetupModulesAlreadyCalled();
|
|
202
|
+
modules[SENTINEL_MODULES] = SENTINEL_MODULES;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Enum} from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
|
|
5
|
+
|
|
6
|
+
import {FactoryFriendly} from "../factory/FactoryFriendly.sol";
|
|
7
|
+
import {IAvatar} from "../interfaces/IAvatar.sol";
|
|
8
|
+
|
|
9
|
+
/// @title Module Interface - A contract that can pass messages to a Module Manager contract if enabled by that contract.
|
|
10
|
+
abstract contract Module is FactoryFriendly {
|
|
11
|
+
/// @dev Address that will ultimately execute function calls.
|
|
12
|
+
address public avatar;
|
|
13
|
+
/// @dev Address that this module will pass transactions to.
|
|
14
|
+
address public target;
|
|
15
|
+
|
|
16
|
+
/// @dev Emitted each time the avatar is set.
|
|
17
|
+
event AvatarSet(address indexed previousAvatar, address indexed newAvatar);
|
|
18
|
+
/// @dev Emitted each time the Target is set.
|
|
19
|
+
event TargetSet(address indexed previousTarget, address indexed newTarget);
|
|
20
|
+
|
|
21
|
+
/// @dev Sets the avatar to a new avatar (`newAvatar`).
|
|
22
|
+
/// @notice Can only be called by the current owner.
|
|
23
|
+
function setAvatar(address _avatar) public onlyOwner {
|
|
24
|
+
address previousAvatar = avatar;
|
|
25
|
+
avatar = _avatar;
|
|
26
|
+
emit AvatarSet(previousAvatar, _avatar);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// @dev Sets the target to a new target (`newTarget`).
|
|
30
|
+
/// @notice Can only be called by the current owner.
|
|
31
|
+
function setTarget(address _target) public onlyOwner {
|
|
32
|
+
address previousTarget = target;
|
|
33
|
+
target = _target;
|
|
34
|
+
emit TargetSet(previousTarget, _target);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// @dev Passes a transaction to be executed by the avatar.
|
|
38
|
+
/// @notice Can only be called by this contract.
|
|
39
|
+
/// @param to Destination address of module transaction.
|
|
40
|
+
/// @param value Ether value of module transaction.
|
|
41
|
+
/// @param data Data payload of module transaction.
|
|
42
|
+
/// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.
|
|
43
|
+
function exec(
|
|
44
|
+
address to,
|
|
45
|
+
uint256 value,
|
|
46
|
+
bytes memory data,
|
|
47
|
+
Enum.Operation operation
|
|
48
|
+
) internal virtual returns (bool success) {
|
|
49
|
+
return
|
|
50
|
+
IAvatar(target).execTransactionFromModule(to, value, data, operation);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// @dev Passes a transaction to be executed by the target and returns data.
|
|
54
|
+
/// @notice Can only be called by this contract.
|
|
55
|
+
/// @param to Destination address of module transaction.
|
|
56
|
+
/// @param value Ether value of module transaction.
|
|
57
|
+
/// @param data Data payload of module transaction.
|
|
58
|
+
/// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.
|
|
59
|
+
function execAndReturnData(
|
|
60
|
+
address to,
|
|
61
|
+
uint256 value,
|
|
62
|
+
bytes memory data,
|
|
63
|
+
Enum.Operation operation
|
|
64
|
+
) internal virtual returns (bool success, bytes memory returnData) {
|
|
65
|
+
return
|
|
66
|
+
IAvatar(target).execTransactionFromModuleReturnData(
|
|
67
|
+
to,
|
|
68
|
+
value,
|
|
69
|
+
data,
|
|
70
|
+
operation
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
|
|
3
|
+
/// @title Zodiac FactoryFriendly - A contract that allows other contracts to be initializable and pass bytes as arguments to define contract state
|
|
4
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
5
|
+
|
|
6
|
+
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
|
|
7
|
+
|
|
8
|
+
abstract contract FactoryFriendly is OwnableUpgradeable {
|
|
9
|
+
function setUp(bytes memory initializeParams) public virtual;
|
|
10
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.8.0;
|
|
3
|
+
|
|
4
|
+
contract ModuleProxyFactory {
|
|
5
|
+
event ModuleProxyCreation(address indexed proxy, address indexed masterCopy);
|
|
6
|
+
|
|
7
|
+
/// `target` can not be zero.
|
|
8
|
+
error ZeroAddress(address target);
|
|
9
|
+
|
|
10
|
+
/// `target` has no code deployed.
|
|
11
|
+
error TargetHasNoCode(address target);
|
|
12
|
+
|
|
13
|
+
/// `address_` is already taken.
|
|
14
|
+
error TakenAddress(address address_);
|
|
15
|
+
|
|
16
|
+
/// @notice Initialization failed.
|
|
17
|
+
error FailedInitialization();
|
|
18
|
+
|
|
19
|
+
function createProxy(
|
|
20
|
+
address target,
|
|
21
|
+
bytes32 salt
|
|
22
|
+
) internal returns (address result) {
|
|
23
|
+
if (address(target) == address(0)) revert ZeroAddress(target);
|
|
24
|
+
if (address(target).code.length == 0) revert TargetHasNoCode(target);
|
|
25
|
+
bytes memory deployment = abi.encodePacked(
|
|
26
|
+
hex"602d8060093d393df3363d3d373d3d3d363d73",
|
|
27
|
+
target,
|
|
28
|
+
hex"5af43d82803e903d91602b57fd5bf3"
|
|
29
|
+
);
|
|
30
|
+
// solhint-disable-next-line no-inline-assembly
|
|
31
|
+
assembly {
|
|
32
|
+
result := create2(0, add(deployment, 0x20), mload(deployment), salt)
|
|
33
|
+
}
|
|
34
|
+
if (result == address(0)) revert TakenAddress(result);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function deployModule(
|
|
38
|
+
address masterCopy,
|
|
39
|
+
bytes memory initializer,
|
|
40
|
+
uint256 saltNonce
|
|
41
|
+
) public returns (address proxy) {
|
|
42
|
+
proxy = createProxy(
|
|
43
|
+
masterCopy,
|
|
44
|
+
keccak256(abi.encodePacked(keccak256(initializer), saltNonce))
|
|
45
|
+
);
|
|
46
|
+
(bool success, ) = proxy.call(initializer);
|
|
47
|
+
if (!success) revert FailedInitialization();
|
|
48
|
+
|
|
49
|
+
emit ModuleProxyCreation(proxy, masterCopy);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Enum} from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
|
|
5
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
6
|
+
|
|
7
|
+
import {IGuard} from "../interfaces/IGuard.sol";
|
|
8
|
+
|
|
9
|
+
abstract contract BaseGuard is IERC165 {
|
|
10
|
+
function supportsInterface(
|
|
11
|
+
bytes4 interfaceId
|
|
12
|
+
) external pure override returns (bool) {
|
|
13
|
+
return
|
|
14
|
+
interfaceId == type(IGuard).interfaceId || // 0xe6d7a83a
|
|
15
|
+
interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/// @dev Module transactions only use the first four parameters: to, value, data, and operation.
|
|
19
|
+
/// Module.sol hardcodes the remaining parameters as 0 since they are not used for module transactions.
|
|
20
|
+
/// @notice This interface is used to maintain compatibilty with Gnosis Safe transaction guards.
|
|
21
|
+
function checkTransaction(
|
|
22
|
+
address to,
|
|
23
|
+
uint256 value,
|
|
24
|
+
bytes memory data,
|
|
25
|
+
Enum.Operation operation,
|
|
26
|
+
uint256 safeTxGas,
|
|
27
|
+
uint256 baseGas,
|
|
28
|
+
uint256 gasPrice,
|
|
29
|
+
address gasToken,
|
|
30
|
+
address payable refundReceiver,
|
|
31
|
+
bytes memory signatures,
|
|
32
|
+
address msgSender
|
|
33
|
+
) external virtual;
|
|
34
|
+
|
|
35
|
+
function checkAfterExecution(bytes32 txHash, bool success) external virtual;
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
|
|
5
|
+
|
|
6
|
+
import {BaseGuard} from "../guard/BaseGuard.sol";
|
|
7
|
+
import {IGuard} from "../interfaces/IGuard.sol";
|
|
8
|
+
|
|
9
|
+
/// @title Guardable - A contract that manages fallback calls made to this contract
|
|
10
|
+
contract Guardable is OwnableUpgradeable {
|
|
11
|
+
address public guard;
|
|
12
|
+
|
|
13
|
+
event ChangedGuard(address guard);
|
|
14
|
+
|
|
15
|
+
/// `guard_` does not implement IERC165.
|
|
16
|
+
error NotIERC165Compliant(address guard_);
|
|
17
|
+
|
|
18
|
+
/// @dev Set a guard that checks transactions before execution.
|
|
19
|
+
/// @param _guard The address of the guard to be used or the 0 address to disable the guard.
|
|
20
|
+
function setGuard(address _guard) external onlyOwner {
|
|
21
|
+
if (_guard != address(0)) {
|
|
22
|
+
if (!BaseGuard(_guard).supportsInterface(type(IGuard).interfaceId))
|
|
23
|
+
revert NotIERC165Compliant(_guard);
|
|
24
|
+
}
|
|
25
|
+
guard = _guard;
|
|
26
|
+
emit ChangedGuard(guard);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getGuard() external view returns (address _guard) {
|
|
30
|
+
return guard;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
|
|
3
|
+
/// @title Zodiac Avatar - A contract that manages modules that can execute transactions via this contract.
|
|
4
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
5
|
+
|
|
6
|
+
import {Enum} from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
|
|
7
|
+
|
|
8
|
+
interface IAvatar {
|
|
9
|
+
event EnabledModule(address module);
|
|
10
|
+
event DisabledModule(address module);
|
|
11
|
+
event ExecutionFromModuleSuccess(address indexed module);
|
|
12
|
+
event ExecutionFromModuleFailure(address indexed module);
|
|
13
|
+
|
|
14
|
+
/// @dev Enables a module on the avatar.
|
|
15
|
+
/// @notice Can only be called by the avatar.
|
|
16
|
+
/// @notice Modules should be stored as a linked list.
|
|
17
|
+
/// @notice Must emit EnabledModule(address module) if successful.
|
|
18
|
+
/// @param module Module to be enabled.
|
|
19
|
+
function enableModule(address module) external;
|
|
20
|
+
|
|
21
|
+
/// @dev Disables a module on the avatar.
|
|
22
|
+
/// @notice Can only be called by the avatar.
|
|
23
|
+
/// @notice Must emit DisabledModule(address module) if successful.
|
|
24
|
+
/// @param prevModule Address that pointed to the module to be removed in the linked list
|
|
25
|
+
/// @param module Module to be removed.
|
|
26
|
+
function disableModule(address prevModule, address module) external;
|
|
27
|
+
|
|
28
|
+
/// @dev Allows a Module to execute a transaction.
|
|
29
|
+
/// @notice Can only be called by an enabled module.
|
|
30
|
+
/// @notice Must emit ExecutionFromModuleSuccess(address module) if successful.
|
|
31
|
+
/// @notice Must emit ExecutionFromModuleFailure(address module) if unsuccessful.
|
|
32
|
+
/// @param to Destination address of module transaction.
|
|
33
|
+
/// @param value Ether value of module transaction.
|
|
34
|
+
/// @param data Data payload of module transaction.
|
|
35
|
+
/// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.
|
|
36
|
+
function execTransactionFromModule(
|
|
37
|
+
address to,
|
|
38
|
+
uint256 value,
|
|
39
|
+
bytes memory data,
|
|
40
|
+
Enum.Operation operation
|
|
41
|
+
) external returns (bool success);
|
|
42
|
+
|
|
43
|
+
/// @dev Allows a Module to execute a transaction and return data
|
|
44
|
+
/// @notice Can only be called by an enabled module.
|
|
45
|
+
/// @notice Must emit ExecutionFromModuleSuccess(address module) if successful.
|
|
46
|
+
/// @notice Must emit ExecutionFromModuleFailure(address module) if unsuccessful.
|
|
47
|
+
/// @param to Destination address of module transaction.
|
|
48
|
+
/// @param value Ether value of module transaction.
|
|
49
|
+
/// @param data Data payload of module transaction.
|
|
50
|
+
/// @param operation Operation type of module transaction: 0 == call, 1 == delegate call.
|
|
51
|
+
function execTransactionFromModuleReturnData(
|
|
52
|
+
address to,
|
|
53
|
+
uint256 value,
|
|
54
|
+
bytes memory data,
|
|
55
|
+
Enum.Operation operation
|
|
56
|
+
) external returns (bool success, bytes memory returnData);
|
|
57
|
+
|
|
58
|
+
/// @dev Returns if an module is enabled
|
|
59
|
+
/// @return True if the module is enabled
|
|
60
|
+
function isModuleEnabled(address module) external view returns (bool);
|
|
61
|
+
|
|
62
|
+
/// @dev Returns array of modules.
|
|
63
|
+
/// @param start Start of the page.
|
|
64
|
+
/// @param pageSize Maximum number of modules that should be returned.
|
|
65
|
+
/// @return array Array of modules.
|
|
66
|
+
/// @return next Start of the next page.
|
|
67
|
+
function getModulesPaginated(
|
|
68
|
+
address start,
|
|
69
|
+
uint256 pageSize
|
|
70
|
+
) external view returns (address[] memory array, address next);
|
|
71
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Enum} from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
|
|
5
|
+
|
|
6
|
+
interface IGuard {
|
|
7
|
+
function checkTransaction(
|
|
8
|
+
address to,
|
|
9
|
+
uint256 value,
|
|
10
|
+
bytes memory data,
|
|
11
|
+
Enum.Operation operation,
|
|
12
|
+
uint256 safeTxGas,
|
|
13
|
+
uint256 baseGas,
|
|
14
|
+
uint256 gasPrice,
|
|
15
|
+
address gasToken,
|
|
16
|
+
address payable refundReceiver,
|
|
17
|
+
bytes memory signatures,
|
|
18
|
+
address msgSender
|
|
19
|
+
) external;
|
|
20
|
+
|
|
21
|
+
function checkAfterExecution(bytes32 txHash, bool success) external;
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
pragma solidity >=0.8.0 <0.9.0;
|
|
3
|
+
|
|
4
|
+
/// @title ExecutionTracker - A contract that keeps track of executed and invalidated hashes
|
|
5
|
+
contract ExecutionTracker {
|
|
6
|
+
error HashAlreadyConsumed(bytes32);
|
|
7
|
+
|
|
8
|
+
event HashExecuted(bytes32);
|
|
9
|
+
event HashInvalidated(bytes32);
|
|
10
|
+
|
|
11
|
+
mapping(address => mapping(bytes32 => bool)) public consumed;
|
|
12
|
+
|
|
13
|
+
function invalidate(bytes32 hash) external {
|
|
14
|
+
consumed[msg.sender][hash] = true;
|
|
15
|
+
emit HashInvalidated(hash);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
/* solhint-disable one-contract-per-file */
|
|
3
|
+
pragma solidity >=0.7.0 <0.9.0;
|
|
4
|
+
|
|
5
|
+
interface IERC1271 {
|
|
6
|
+
/**
|
|
7
|
+
* @notice EIP1271 method to validate a signature.
|
|
8
|
+
* @param hash Hash of the data signed on the behalf of address(this).
|
|
9
|
+
* @param signature Signature byte array associated with _data.
|
|
10
|
+
*
|
|
11
|
+
* MUST return the bytes4 magic value 0x1626ba7e when function passes.
|
|
12
|
+
* MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)
|
|
13
|
+
* MUST allow external calls
|
|
14
|
+
*/
|
|
15
|
+
function isValidSignature(
|
|
16
|
+
bytes32 hash,
|
|
17
|
+
bytes memory signature
|
|
18
|
+
) external view returns (bytes4);
|
|
19
|
+
}
|