44 lines
1.3 KiB
Solidity
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);
|
|
}
|