123456789101112131415161718192021222324252627282930313233343536 |
- // SPDX-License-Identifier: MIT
- pragma solidity ^0.8.20;
- import "../patched/access/manager/IAccessManager.sol";
- import "../patched/access/manager/AccessManaged.sol";
- contract AccessManagedHarness is AccessManaged {
- bytes internal SOME_FUNCTION_CALLDATA = abi.encodeCall(this.someFunction, ());
- constructor(address initialAuthority) AccessManaged(initialAuthority) {}
- function someFunction() public restricted() {
- // Sanity for FV: the msg.data when calling this function should be the same as the data used when checking
- // the schedule. This is a reformulation of `msg.data == SOME_FUNCTION_CALLDATA` that focuses on the operation
- // hash for this call.
- require(
- IAccessManager(authority()).hashOperation(_msgSender(), address(this), msg.data)
- ==
- IAccessManager(authority()).hashOperation(_msgSender(), address(this), SOME_FUNCTION_CALLDATA)
- );
- }
- function authority_canCall_immediate(address caller) public view returns (bool result) {
- (result,) = AuthorityUtils.canCallWithDelay(authority(), caller, address(this), this.someFunction.selector);
- }
- function authority_canCall_delay(address caller) public view returns (uint32 result) {
- (,result) = AuthorityUtils.canCallWithDelay(authority(), caller, address(this), this.someFunction.selector);
- }
- function authority_getSchedule(address caller) public view returns (uint48) {
- IAccessManager manager = IAccessManager(authority());
- return manager.getSchedule(manager.hashOperation(caller, address(this), SOME_FUNCTION_CALLDATA));
- }
- }
|