1234567891011121314151617181920212223242526272829303132 |
- // SPDX-License-Identifier: MIT
- // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/AuthorityUtils.sol)
- pragma solidity ^0.8.20;
- import {IAuthority} from "./IAuthority.sol";
- library AuthorityUtils {
- /**
- * @dev Since `AccessManager` implements an extended IAuthority interface, invoking `canCall` with backwards compatibility
- * for the preexisting `IAuthority` interface requires special care to avoid reverting on insufficient return data.
- * This helper function takes care of invoking `canCall` in a backwards compatible way without reverting.
- */
- function canCallWithDelay(
- address authority,
- address caller,
- address target,
- bytes4 selector
- ) internal view returns (bool immediate, uint32 delay) {
- (bool success, bytes memory data) = authority.staticcall(
- abi.encodeCall(IAuthority.canCall, (caller, target, selector))
- );
- if (success) {
- if (data.length >= 0x40) {
- (immediate, delay) = abi.decode(data, (bool, uint32));
- } else if (data.length >= 0x20) {
- immediate = abi.decode(data, (bool));
- }
- }
- return (immediate, delay);
- }
- }
|