Files
smom-dbis-138/contracts/rwa/IGruMonetaryPolicyGate.sol

44 lines
1.3 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* @notice On-chain GRU Monetary Policy mint gate (coverage, velocity zone, utilization).
*/
interface IGruMonetaryPolicyGate {
enum VelocityZone {
Green,
AmberLow,
AmberHigh,
Red,
Black
}
struct MetricsSnapshot {
uint256 coverageRatioBps;
uint256 m1ToM00Utilization; // whole number ratio numerator (e.g. 25 = 25:1)
VelocityZone velocityZone;
uint256 metricsUpdatedAt;
bool issuancePaused;
}
event MetricsUpdated(uint256 coverageRatioBps, uint256 m1ToM00Utilization, VelocityZone zone, bool issuancePaused);
event PolicyGateSet(address indexed token, bool enabled);
function metrics() external view returns (MetricsSnapshot memory);
function tokenGateEnabled(address token) external view returns (bool);
function setTokenGate(address token, bool enabled) external;
function updateMetrics(
uint256 coverageRatioBps,
uint256 m1ToM00Utilization,
VelocityZone zone,
bool issuancePaused
) external;
function canMint(address token, uint256 amount) external view returns (bool);
function canMintReason(address token, uint256 amount) external view returns (bool ok, bytes32 reason);
}