IDistributionEngine

Git Source

Interface for distribution engine operations

Defines the standard interface for managing fund distributions with waterfall logic

Functions

initializeDistributionConfig

Initialize distribution configuration

function initializeDistributionConfig(
    WaterfallModel model,
    uint256 preferredReturnRate,
    uint256 catchupPercentage,
    uint256 carriedInterestSplit,
    bool compoundPreferredReturn,
    uint256 hurdleRate
) external;

setDistributionConfig

Update distribution configuration

function setDistributionConfig(
    WaterfallModel model,
    uint256 preferredReturnRate,
    uint256 catchupPercentage,
    uint256 carriedInterestSplit,
    bool compoundPreferredReturn,
    uint256 hurdleRate
) external;

calculateDistribution

Calculate distribution amounts

function calculateDistribution(uint256 totalAmount, bool isFinalDistribution)
    external
    view
    returns (address[] memory recipients, uint256[] memory amounts, DistributionType[] memory distributionTypes);

executeDistribution

Execute distribution with waterfall logic

function executeDistribution(uint256 totalAmount, bool isFinalDistribution)
    external
    returns (address[] memory recipients, uint256[] memory amounts, DistributionType[] memory distributionTypes);

accruePreferredReturn

Accrue preferred return for a period

function accruePreferredReturn(uint256 periodDays) external;

updateWaterfallState

Update waterfall state

function updateWaterfallState(uint256 contributions, uint256 distributions, DistributionType distributionType)
    external;

getDistributionConfig

Get distribution configuration

function getDistributionConfig() external view returns (DistributionConfig memory);

getWaterfallState

Get waterfall state

function getWaterfallState() external view returns (WaterfallState memory);

calculateCarriedInterest

Calculate carried interest for a GP

function calculateCarriedInterest(uint256 profits, address gp) external view returns (uint256);

calculatePreferredReturn

Calculate preferred return for an investor

function calculatePreferredReturn(address investor, uint256 periodDays) external view returns (uint256);

getRemainingPreferredReturn

Get remaining preferred return owed

function getRemainingPreferredReturn() external view returns (uint256);

isHurdleRateAchieved

Check if hurdle rate is achieved

function isHurdleRateAchieved() external view returns (bool);

getNextDistributionType

Get next distribution type in waterfall

function getNextDistributionType() external view returns (DistributionType);

simulateDistribution

Simulate distribution without executing

function simulateDistribution(uint256 amount, bool isFinalDistribution)
    external
    view
    returns (
        uint256 capitalReturn,
        uint256 preferredReturn,
        uint256 gpCatchup,
        uint256 carriedInterest,
        uint256 residualProfits
    );

Events

DistributionCalculated

Emitted when distribution is calculated

event DistributionCalculated(uint256 totalAmount, uint256 recipientCount);

DistributionExecuted

Emitted when distribution is executed

event DistributionExecuted(address indexed recipient, uint256 amount, DistributionType distributionType);

PreferredReturnAccrued

Emitted when preferred return is accrued

event PreferredReturnAccrued(uint256 amount, uint256 totalAccrued);

CarriedInterestEarned

Emitted when carried interest is earned

event CarriedInterestEarned(address indexed gp, uint256 amount);

WaterfallModelUpdated

Emitted when waterfall model is updated

event WaterfallModelUpdated(WaterfallModel oldModel, WaterfallModel newModel);

DistributionConfigUpdated

Emitted when distribution configuration is updated

event DistributionConfigUpdated(WaterfallModel model, uint256 preferredReturnRate, uint256 carriedInterestSplit);

HurdleRateAchieved

Emitted when hurdle rate is achieved

event HurdleRateAchieved(uint256 totalReturn, uint256 hurdleRate);

Structs

DistributionConfig

Distribution configuration

struct DistributionConfig {
    WaterfallModel model;
    uint256 preferredReturnRate;
    uint256 catchupPercentage;
    uint256 carriedInterestSplit;
    bool compoundPreferredReturn;
    uint256 hurdleRate;
}

WaterfallState

Waterfall state tracking

struct WaterfallState {
    uint256 totalContributions;
    uint256 totalDistributed;
    uint256 returnedCapital;
    uint256 distributedProfits;
    uint256 accruedPreferredReturn;
    uint256 paidPreferredReturn;
    uint256 gpCatchup;
    uint256 carriedInterestPaid;
}

Enums

WaterfallModel

Waterfall models for distribution calculations

enum WaterfallModel {
    AMERICAN,
    EUROPEAN,
    HYBRID
}

DistributionType

Types of distributions

enum DistributionType {
    RETURN_OF_CAPITAL,
    PREFERRED_RETURN,
    GP_CATCHUP,
    CARRIED_INTEREST,
    RESIDUAL_PROFITS
}

Last updated

Was this helpful?