MintingController
Phase-based minting caps that decrease over time, ensuring transparent and bounded token issuance before transitioning to DAO-only control.
Overview
MintingController owns the PRIVToken contract and enforces minting limits across four time-based phases. Caps decrease over time, and after 24 months all minting authority transitions to the DAO. Every mint is logged on-chain with a reason string for full transparency.
| Property | Value |
|---|---|
| Contract | MintingController |
| Address (Base Sepolia) | 0xfEB8AB7767768B714b3f771BA048Da0301B6E916 |
| Total Founder-Mintable | 17M PRIV (1.7% of max supply) |
| Cap Reduction Timelock | 7 days |
| Network | Base (Chain ID: 8453) |
Phase Schedule
| Phase | Duration | Minting Cap | Cumulative Time |
|---|---|---|---|
| 1 | Months 0--6 | 10M PRIV | 6 months |
| 2 | Months 6--12 | 5M PRIV | 12 months |
| 3 | Months 12--24 | 2M PRIV | 24 months |
| 4 | Month 24+ | Founder minting disabled | DAO-only |
Phase transitions happen automatically based on elapsed time since deployment. No manual intervention is needed to advance phases.
Key Functions
mint
Mint tokens within the current phase cap. Owner-only, first 24 months. Every call records a reason string in mintHistory.
function mint(address to, uint256 amount, string calldata reason) external onlyOwnerdaoMint
Mint tokens via the DAO governance contract. Available in any phase once DAO governance is set.
function daoMint(address to, uint256 amount, string calldata reason) externaltransferTokenOwnershipToDAO
Irreversibly transfers PRIVToken ownership to the DAO governance contract. Callable by the owner after Phase 3 ends, or by the DAO at any time.
function transferTokenOwnershipToDAO() externalgetStats
Returns comprehensive statistics: current phase, per-phase caps and usage, total founder cap, and time until next phase.
function getStats() external view returns (
uint8 currentPhase, uint256 phase1Cap, uint256 phase1Used,
uint256 phase2Cap, uint256 phase2Used, uint256 phase3Cap, uint256 phase3Used,
uint256 totalFounderCap, uint256 totalFounderUsed,
uint256 daoMintedTotal, uint256 timeUntilNextPhase
)Cap Reduction (Governance)
Governance can lower phase caps but never raise them. Reductions use a 7-day timelock:
proposeCapReduction(phase, newCap)-- Proposes a lower cap (must be above already-minted amount).executeCapReduction()-- Executes after 7-day delay.cancelCapReduction()-- Cancels a pending proposal.
Transparency
All minting events are stored in the mintHistory array and queryable on-chain:
struct MintRecord {
address recipient;
uint256 amount;
uint8 phase;
string reason;
uint256 timestamp;
}Use getMintHistoryLength() and getMintRecord(index) to audit the full minting history.
Security
- Decreasing caps: Phase caps are hardcoded and decrease over time. Governance can only reduce them further.
- Automatic DAO transition: After 24 months, founder minting is permanently disabled.
- Timelocked reductions: Cap reductions require a 7-day delay, giving stakeholders time to react.
- On-chain audit trail: Every mint records recipient, amount, phase, reason, and timestamp.
- Emergency pause: Owner can pause all minting.
Source Code
TreasuryManager
Automated treasury operations with Chainlink Automation compatibility, portfolio rebalancing, and emergency circuit breakers.
FounderPerformanceBond
Locks founder tokens against TVL milestones with M-of-N oracle consensus, ensuring accountability through on-chain performance verification.