Skip to content

Abstract

This PIP defines the Fee Routing Protocol for Pars Network. It establishes how protocol fees are collected, aggregated, and distributed across the ecosystem including the 10 Committees, gauge-directed emissions, and staker rewards.

Motivation

Pars Network generates revenue from multiple sources:

  • Bond premiums
  • Advance facility fees
  • Protocol-owned liquidity trading fees
  • Yield from treasury positions

This revenue must be distributed transparently and efficiently to:

  1. Fund the 10 operational Committees
  2. Reward veASHA stakers
  3. Incentivize liquidity via gauge-directed emissions
  4. Build treasury reserves

Without a standardized fee routing system:

  • Distribution would require manual governance actions
  • Committee funding would be inconsistent
  • Staker rewards would be unpredictable
  • Gauge incentives could not respond to market conditions

Specification

Fee Routing Architecture

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                           FEE ROUTING PROTOCOL                                        │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                      │
│  REVENUE SOURCES                                                                     │
│  ┌───────────────────────────────────────────────────────────────────────────────┐  │
│  │  Bond Premiums │ Advance Fees │ Trading Fees │ Yield │ Liquidations          │  │
│  └───────────────────────────────────────────────────────────────────────────────┘  │
│                                      │                                               │
│                                      ▼                                               │
│  FEE ROUTER                                                                          │
│  ┌───────────────────────────────────────────────────────────────────────────────┐  │
│  │                                                                               │  │
│  │  Revenue In ──► Aggregate ──► Distribute per epoch                            │  │
│  │                                                                               │  │
│  │  Distribution Split:                                                          │  │
│  │  ┌─────────────────────────────────────────────────────────────────────────┐  │  │
│  │  │  10% ──► Base Allocation (10 Committees)                                │  │  │
│  │  │  │       └──► KHAZ 25% │ AMN 10% │ SAL 10% │ FARH 10% │ DAN 10%        │  │  │
│  │  │  │           └──► SAZ 10% │ DAD 5% │ PAY 5% │ WAQF 10% │ MIZ 5%        │  │  │
│  │  │  │                                                                      │  │  │
│  │  │  90% ──► Gauge Controller                                               │  │  │
│  │  │         └──► veASHA-weighted gauge voting determines allocation         │  │  │
│  │  └─────────────────────────────────────────────────────────────────────────┘  │  │
│  │                                                                               │  │
│  └───────────────────────────────────────────────────────────────────────────────┘  │
│                                      │                                               │
│                                      ▼                                               │
│  DISTRIBUTION TARGETS                                                                │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐            │
│  │ Committee │ │  xPARS    │ │ Liquidity │ │ Treasury  │ │  Bonds    │            │
│  │ Treasuries│ │  Stakers  │ │  Gauges   │ │ Reserves  │ │  Market   │            │
│  └───────────┘ └───────────┘ └───────────┘ └───────────┘ └───────────┘            │
│                                                                                      │
└─────────────────────────────────────────────────────────────────────────────────────┘

Fee Router Contract

The FeeRouter is the central hub for all protocol fee collection:

solidity
interface IFeeRouter {
    /// @notice Deposit fees into the router
    /// @param token The fee token (PARS, USDC, etc.)
    /// @param amount Amount of fees
    /// @param source Revenue source identifier
    function depositFees(
        address token,
        uint256 amount,
        bytes32 source
    ) external;

    /// @notice Trigger epoch distribution
    /// @dev Called by keeper or governance at epoch boundaries
    function distributeEpoch() external;

    /// @notice Get current epoch accumulated fees
    /// @return Total fees per token in current epoch
    function getEpochFees() external view returns (FeeAccumulator[] memory);

    /// @notice Get distribution split configuration
    /// @return baseAllocationPct Percentage to Committees (basis points)
    /// @return gaugeAllocationPct Percentage to GaugeController (basis points)
    function getDistributionSplit() external view returns (
        uint256 baseAllocationPct,
        uint256 gaugeAllocationPct
    );
}

Distribution Split

AllocationPercentageRecipientPurpose
Base Allocation10%10 CommitteesGuaranteed operational funding
Gauge-Directed90%GaugeControllerveASHA-weighted distribution

The base allocation ensures Committees have predictable funding regardless of gauge voting outcomes.

Base Allocation Distribution

The 10% base allocation is split among Committees according to PIP-7002:

CommitteeSymbolShare of BaseEffective Total
TreasuryKHAZ25%2.5% of fees
SecurityAMN10%1.0% of fees
HealthSAL10%1.0% of fees
CultureFARH10%1.0% of fees
ResearchDAN10%1.0% of fees
InfrastructureSAZ10%1.0% of fees
GovernanceDAD5%0.5% of fees
ConsularPAY5%0.5% of fees
EndowmentWAQF10%1.0% of fees
IntegrityMIZ5%0.5% of fees

Gauge Controller Integration

The remaining 90% flows to the GaugeController for veASHA-weighted distribution:

solidity
interface IGaugeController {
    /// @notice Get gauge weight for a recipient
    /// @param gauge The gauge address
    /// @return Weight in basis points
    function getGaugeWeight(address gauge) external view returns (uint256);

    /// @notice Vote for gauge weight allocation
    /// @param gauge The gauge to vote for
    /// @param weight Weight allocation (basis points of voter's veASHA)
    function vote(address gauge, uint256 weight) external;

    /// @notice Get total weight across all gauges
    /// @return Total weight sum
    function getTotalWeight() external view returns (uint256);

    /// @notice Distribute fees to gauges based on weights
    /// @param token Token to distribute
    /// @param amount Total amount to distribute
    function distribute(address token, uint256 amount) external;
}

Gauge Types

Gauge TypePurposeExample Recipients
Liquidity GaugesIncentivize DEX liquidityPARS/ETH, PARS/USDC pools
Staking GaugesReward xPARS stakersxPARS vault
Committee GaugesAdditional Committee fundingAny of 10 Committees
Treasury GaugeBuild reservesMain Treasury
Bond GaugeSubsidize bond marketsBond market contracts

Epoch Mechanics

Fees are distributed on a weekly epoch cycle:

PhaseDurationDescription
Accumulation6 daysFees accumulate in FeeRouter
Distribution1 dayKeeper triggers distribution
ClaimOngoingRecipients claim their allocation

Receipt Registry

All fee distributions are recorded on-chain for transparency:

solidity
interface IReceiptRegistry {
    /// @notice Record a fee distribution
    /// @param epoch The epoch number
    /// @param recipient The receiving address
    /// @param token Token distributed
    /// @param amount Amount distributed
    /// @param source Distribution source (base/gauge)
    function recordDistribution(
        uint256 epoch,
        address recipient,
        address token,
        uint256 amount,
        bytes32 source
    ) external;

    /// @notice Get distribution history for a recipient
    /// @param recipient The address to query
    /// @param fromEpoch Starting epoch
    /// @param toEpoch Ending epoch
    /// @return Array of distribution records
    function getDistributions(
        address recipient,
        uint256 fromEpoch,
        uint256 toEpoch
    ) external view returns (DistributionRecord[] memory);
}

Governance Parameters

ParameterDefault ValueGovernance Control
baseAllocationPct1000 (10%)Council resolution
epochDuration7 daysCouncil resolution
minGaugeWeight100 (1%)Council resolution
maxGaugeWeight5000 (50%)Council resolution
voteDecayPeriod30 daysCouncil resolution

Security Considerations

Fee Manipulation

  • Revenue sources are whitelisted contracts only
  • Fee deposits require valid source identifier
  • Epoch timing prevents flash loan attacks on distribution

Gauge Voting

  • veASHA-weighted voting prevents Sybil attacks
  • Vote decay requires ongoing engagement
  • Maximum weight cap prevents single gauge domination

Distribution Safety

  • Multi-sig approval for parameter changes
  • Timelock on distribution split modifications
  • Emergency pause via 2-of-5 Guardian signers

References

Copyright and related rights waived via CC0.

Released under the MIT License.