Files
no_five/contracts/interfaces/IPolicyEngine.sol
2025-11-20 15:35:25 -08:00

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);
}