PRIV ProtocolPRIV Docs
Contracts

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.

PropertyValue
ContractMintingController
Address (Base Sepolia)0xfEB8AB7767768B714b3f771BA048Da0301B6E916
Total Founder-Mintable17M PRIV (1.7% of max supply)
Cap Reduction Timelock7 days
NetworkBase (Chain ID: 8453)

Phase Schedule

PhaseDurationMinting CapCumulative Time
1Months 0--610M PRIV6 months
2Months 6--125M PRIV12 months
3Months 12--242M PRIV24 months
4Month 24+Founder minting disabledDAO-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 onlyOwner

daoMint

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) external

transferTokenOwnershipToDAO

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() external

getStats

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:

  1. proposeCapReduction(phase, newCap) -- Proposes a lower cap (must be above already-minted amount).
  2. executeCapReduction() -- Executes after 7-day delay.
  3. 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

View on GitHub