// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title IComplianceGuard * @notice Interface for compliance guard enforcing ISO-4217 W token rules * @dev Ensures GRU isolation, money multiplier = 1.0, reserve constraints */ interface IComplianceGuard { /** * @notice Validate mint operation * @param currencyCode ISO-4217 currency code * @param amount Amount to mint * @param currentSupply Current token supply * @param verifiedReserve Verified reserve balance * @return isValid True if mint is compliant * @return reasonCode Reason if not compliant */ function validateMint( string memory currencyCode, uint256 amount, uint256 currentSupply, uint256 verifiedReserve ) external view returns (bool isValid, bytes32 reasonCode); /** * @notice Validate that money multiplier = 1.0 * @dev Hard constraint: m = 1.0 (no fractional reserve) * @param reserve Reserve balance * @param supply Token supply * @return isValid True if multiplier = 1.0 */ function validateMoneyMultiplier(uint256 reserve, uint256 supply) external pure returns (bool isValid); /** * @notice Check if currency is ISO-4217 compliant * @param currencyCode Currency code to validate * @return isISO4217 True if ISO-4217 compliant */ function isISO4217Compliant(string memory currencyCode) external pure returns (bool isISO4217); /** * @notice Check if operation violates GRU isolation * @param currencyCode Currency code * @return violatesIsolation True if GRU linkage detected */ function violatesGRUIsolation(string memory currencyCode) external pure returns (bool violatesIsolation); /** * @notice Validate reserve sufficiency * @param reserve Reserve balance * @param supply Token supply * @return isSufficient True if reserve >= supply */ function isReserveSufficient(uint256 reserve, uint256 supply) external pure returns (bool isSufficient); event ComplianceCheckPassed(string indexed currencyCode, bytes32 checkType); event ComplianceCheckFailed(string indexed currencyCode, bytes32 checkType, bytes32 reasonCode); }