Skip to main content

TranchingLogic

TranchingLogic

Deployment on Ethereum mainnet:

https://etherscan.io/address/0x100656CbB440D37a7880F4c5BD4aC5edcf411066

Library for handling the payments waterfall

SliceInfo

struct SliceInfo {
uint256 reserveFeePercent;
uint256 interestAccrued;
uint256 principalAccrued;
}

ApplyResult

struct ApplyResult {
uint256 interestRemaining;
uint256 principalRemaining;
uint256 reserveDeduction;
uint256 oldInterestSharePrice;
uint256 oldPrincipalSharePrice;
}

FP_SCALING_FACTOR

uint256 FP_SCALING_FACTOR

NUM_TRANCHES_PER_SLICE

uint256 NUM_TRANCHES_PER_SLICE

usdcToSharePrice

function usdcToSharePrice(uint256 amount, uint256 totalShares) public pure returns (uint256)

sharePriceToUsdc

function sharePriceToUsdc(uint256 sharePrice, uint256 totalShares) public pure returns (uint256)

lockTranche

function lockTranche(struct ITranchedPool.TrancheInfo tranche, contract GoldfinchConfig config) external

redeemableInterestAndPrincipal

function redeemableInterestAndPrincipal(struct ITranchedPool.TrancheInfo trancheInfo, struct IPoolTokens.TokenInfo tokenInfo) public view returns (uint256, uint256)

calculateExpectedSharePrice

function calculateExpectedSharePrice(struct ITranchedPool.TrancheInfo tranche, uint256 amount, struct ITranchedPool.PoolSlice slice) public pure returns (uint256)

scaleForSlice

function scaleForSlice(struct ITranchedPool.PoolSlice slice, uint256 amount, uint256 totalDeployed) public pure returns (uint256)

getSliceInfo

function getSliceInfo(struct ITranchedPool.PoolSlice slice, contract ICreditLine creditLine, uint256 totalDeployed, uint256 reserveFeePercent) public view returns (struct TranchingLogic.SliceInfo)

getTotalInterestAndPrincipal

function getTotalInterestAndPrincipal(struct ITranchedPool.PoolSlice slice, contract ICreditLine creditLine, uint256 totalDeployed) public view returns (uint256, uint256)

scaleByFraction

function scaleByFraction(uint256 amount, uint256 fraction, uint256 total) public pure returns (uint256)

applyToAllSlices

function applyToAllSlices(mapping(uint256 => struct ITranchedPool.PoolSlice) poolSlices, uint256 numSlices, uint256 interest, uint256 principal, uint256 reserveFeePercent, uint256 totalDeployed, contract ICreditLine creditLine, uint256 juniorFeePercent) external returns (uint256)

apply a payment to all slices

Parameters

NameTypeDescription
poolSlicesmapping(uint256 => struct ITranchedPool.PoolSlice)slices to apply to
numSlicesuint256number of slices
interestuint256amount of interest to apply
principaluint256amount of principal to apply
reserveFeePercentuint256percentage that protocol will take for reserves
totalDeployeduint256total amount of principal deployed
creditLinecontract ICreditLinecreditline to account for
juniorFeePercentuint256percentage the junior tranche will take

Return Values

NameTypeDescription
[0]uint256total amount that will be sent to reserves

applyToAllSeniorTranches

function applyToAllSeniorTranches(mapping(uint256 => struct ITranchedPool.PoolSlice) poolSlices, uint256 numSlices, uint256 interest, uint256 principal, uint256 reserveFeePercent, uint256 totalDeployed, contract ICreditLine creditLine, uint256 juniorFeePercent) internal returns (struct TranchingLogic.ApplyResult)

applyToAllJuniorTranches

function applyToAllJuniorTranches(mapping(uint256 => struct ITranchedPool.PoolSlice) poolSlices, uint256 numSlices, uint256 interest, uint256 principal, uint256 reserveFeePercent, uint256 totalDeployed, contract ICreditLine creditLine) internal returns (uint256 totalReserveAmount)

emitSharePriceUpdatedEvent

function emitSharePriceUpdatedEvent(struct ITranchedPool.TrancheInfo tranche, struct TranchingLogic.ApplyResult applyResult) internal

applyToSeniorTranche

function applyToSeniorTranche(struct ITranchedPool.PoolSlice slice, uint256 interestRemaining, uint256 principalRemaining, uint256 juniorFeePercent, struct TranchingLogic.SliceInfo sliceInfo) internal returns (struct TranchingLogic.ApplyResult)

applyToJuniorTranche

function applyToJuniorTranche(struct ITranchedPool.PoolSlice slice, uint256 interestRemaining, uint256 principalRemaining, struct TranchingLogic.SliceInfo sliceInfo) public returns (struct TranchingLogic.ApplyResult)

trancheIdToSliceIndex

function trancheIdToSliceIndex(uint256 trancheId) external pure returns (uint256)

initializeNextSlice

function initializeNextSlice(mapping(uint256 => struct ITranchedPool.PoolSlice) poolSlices, uint256 sliceIndex) external

sliceIndexToJuniorTrancheId

function sliceIndexToJuniorTrancheId(uint256 sliceIndex) public pure returns (uint256)

sliceIndexToSeniorTrancheId

function sliceIndexToSeniorTrancheId(uint256 sliceIndex) public pure returns (uint256)

isSeniorTrancheId

function isSeniorTrancheId(uint256 trancheId) external pure returns (bool)

isJuniorTrancheId

function isJuniorTrancheId(uint256 trancheId) external pure returns (bool)

_applyToSharePrice

function _applyToSharePrice(uint256 amountRemaining, uint256 currentSharePrice, uint256 desiredAmount, uint256 totalShares) internal pure returns (uint256, uint256)

_scaleByPercentOwnership

function _scaleByPercentOwnership(struct ITranchedPool.TrancheInfo tranche, uint256 amount, struct ITranchedPool.PoolSlice slice) internal pure returns (uint256)

_desiredAmountFromSharePrice

function _desiredAmountFromSharePrice(uint256 desiredSharePrice, uint256 actualSharePrice, uint256 totalShares) internal pure returns (uint256)

_applyByAmount

function _applyByAmount(struct ITranchedPool.TrancheInfo tranche, uint256 interestRemaining, uint256 principalRemaining, uint256 desiredInterestAmount, uint256 desiredPrincipalAmount) internal returns (uint256, uint256)

_applyBySharePrice

function _applyBySharePrice(struct ITranchedPool.TrancheInfo tranche, uint256 interestRemaining, uint256 principalRemaining, uint256 desiredInterestSharePrice, uint256 desiredPrincipalSharePrice) internal returns (uint256, uint256)

TrancheLocked

event TrancheLocked(address pool, uint256 trancheId, uint256 lockedUntil)

SharePriceUpdated

event SharePriceUpdated(address pool, uint256 tranche, uint256 principalSharePrice, int256 principalDelta, uint256 interestSharePrice, int256 interestDelta)