// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title IMintController * @notice Interface for minting ISO-4217 W tokens with reserve verification * @dev Minting requires: verified fiat settlement, custodian attestation, oracle quorum */ interface IMintController { /** * @notice Mint tokens (requires reserve verification) * @param token Token address * @param to Recipient address * @param amount Amount to mint (in token decimals) * @param settlementId Fiat settlement ID for audit trail */ function mint(address token, address to, uint256 amount, bytes32 settlementId) external; /** * @notice Check if minting is allowed * @param token Token address * @param amount Amount to mint * @return canMint True if minting is allowed * @return reasonCode Reason if not allowed */ function canMint(address token, uint256 amount) external view returns (bool canMint, bytes32 reasonCode); /** * @notice Check if oracle quorum is met * @param token Token address * @return quorumMet True if quorum is met */ function isOracleQuorumMet(address token) external view returns (bool quorumMet); event MintExecuted( address indexed token, address indexed to, uint256 amount, bytes32 indexed settlementId ); event MintRejected(address indexed token, uint256 amount, bytes32 reasonCode); }