AccessManagedTarget.sol 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {AccessManaged} from "../access/manager/AccessManaged.sol";
  4. import {StorageSlot} from "../utils/StorageSlot.sol";
  5. abstract contract AccessManagedTarget is AccessManaged {
  6. event CalledRestricted(address caller);
  7. event CalledUnrestricted(address caller);
  8. event CalledFallback(address caller);
  9. function fnRestricted() public restricted {
  10. emit CalledRestricted(msg.sender);
  11. }
  12. function fnUnrestricted() public {
  13. emit CalledUnrestricted(msg.sender);
  14. }
  15. function setIsConsumingScheduledOp(bool isConsuming, bytes32 slot) external {
  16. // Memory layout is 0x....<_consumingSchedule (boolean)><authority (address)>
  17. bytes32 mask = bytes32(uint256(1 << 160));
  18. if (isConsuming) {
  19. StorageSlot.getBytes32Slot(slot).value |= mask;
  20. } else {
  21. StorageSlot.getBytes32Slot(slot).value &= ~mask;
  22. }
  23. }
  24. fallback() external {
  25. emit CalledFallback(msg.sender);
  26. }
  27. }