|
@@ -10,27 +10,30 @@ contract AccessManagedHarness is AccessManaged {
|
|
|
|
|
|
constructor(address initialAuthority) AccessManaged(initialAuthority) {}
|
|
|
|
|
|
- function someFunction() public restricted() {
|
|
|
+ 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)
|
|
|
+ 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);
|
|
|
+ (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);
|
|
|
+ (, 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));
|
|
|
}
|
|
|
+
|
|
|
+ function _hasCode(address account) public view returns (bool) {
|
|
|
+ return account.code.length > 0;
|
|
|
+ }
|
|
|
}
|