IDistributionEngine
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?