63 lines
1.8 KiB
Solidity
63 lines
1.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.24;
|
|
|
|
import "./IPolicyModule.sol";
|
|
|
|
/**
|
|
* @title IPolicyEngine
|
|
* @notice Interface for policy engine
|
|
* @dev Aggregates policy decisions from multiple modules
|
|
*/
|
|
interface IPolicyEngine {
|
|
/**
|
|
* @notice Emitted when a policy module is registered
|
|
* @param module Module address
|
|
* @param name Module name
|
|
*/
|
|
event PolicyModuleRegistered(address indexed module, string name);
|
|
|
|
/**
|
|
* @notice Emitted when a policy module is unregistered
|
|
* @param module Module address
|
|
*/
|
|
event PolicyModuleUnregistered(address indexed module);
|
|
|
|
/**
|
|
* @notice Register a policy module
|
|
* @param module Module address
|
|
*/
|
|
function registerPolicyModule(address module) external;
|
|
|
|
/**
|
|
* @notice Unregister a policy module
|
|
* @param module Module address
|
|
*/
|
|
function unregisterPolicyModule(address module) external;
|
|
|
|
/**
|
|
* @notice Evaluate all registered policy modules
|
|
* @param actionType Type of action
|
|
* @param actionData Action-specific data
|
|
* @return allowed True if all modules allow the action
|
|
* @return reason Reason for denial (if any module denies)
|
|
*/
|
|
function evaluateAll(
|
|
bytes32 actionType,
|
|
bytes memory actionData
|
|
) external view returns (bool allowed, string memory reason);
|
|
|
|
/**
|
|
* @notice Get all registered policy modules
|
|
* @return modules Array of module addresses
|
|
*/
|
|
function getPolicyModules() external view returns (address[] memory modules);
|
|
|
|
/**
|
|
* @notice Check if a module is registered
|
|
* @param module Module address
|
|
* @return registered True if registered
|
|
*/
|
|
function isRegistered(address module) external view returns (bool registered);
|
|
}
|
|
|