Skip to main content

ICoolerLtvOracle

Git Source

It is a custom oracle (not dependant on external markets/AMMs/dependencies) to give the serve both the Origination LTV and Liquidation LTV

  • They are both quoted in [debtToken / collateralToken] units
  • It is a fixed 18dp price
  • Origination LTV updates on a per second basis according to a policy set rate of change (and is up only or flat)
  • Liquidation LTV is a policy set percentage above the Origination LTV

Functions

collateralToken

The collateral asset of the LTV [debtToken / collateralToken]

function collateralToken() external view returns (IERC20);

debtToken

The debt asset of the LTV [debtToken / collateralToken]

function debtToken() external view returns (IERC20);

currentLtvs

The current Origination LTV and Liquidation LTV

function currentLtvs() external view returns (uint96 originationLtv, uint96 liquidationLtv);

currentOriginationLtv

The current Origination LTV

function currentOriginationLtv() external view returns (uint96);

currentLiquidationLtv

The current Liquidation LTV

function currentLiquidationLtv() external view returns (uint96);

maxOriginationLtvDelta

The maximum allowed Origination LTV change on any single setOriginationLtvAt(), in absolute terms between the Origination LTV as of now and the targetOriginationLtv

18 decimal places, 0.20e18 == $0.20. Used as a bound to avoid unintended/fat fingering when updating Origination LTV

function maxOriginationLtvDelta() external view returns (uint96);

minOriginationLtvTargetTimeDelta

The minimum time delta required for Origination LTV to reach it's target value when setOriginationLtvAt() is called.

In seconds. Used as a bound to avoid unintended/fat fingering when updating Origination LTV

function minOriginationLtvTargetTimeDelta() external view returns (uint32);

maxOriginationLtvRateOfChange

The maximum (positive) rate of change of Origination LTV allowed, when setOriginationLtvAt() is called.

Units: [Origination LTV / second]

function maxOriginationLtvRateOfChange() external view returns (uint96);

originationLtvData

The current Origination LTV state data

function originationLtvData()
external
view
returns (uint96 startingValue, uint40 startTime, uint96 targetValue, uint40 targetTime, uint96 slope);

maxLiquidationLtvPremiumBps

The maximum Liquidation LTV premium (in basis points) which is allowed to be set when calling setLiquidationLtvPremiumBps()

function maxLiquidationLtvPremiumBps() external view returns (uint16);

liquidationLtvPremiumBps

The premium (in basis points) of the Liquidation LTV above the Origination LTV

function liquidationLtvPremiumBps() external view returns (uint16);

setLiquidationLtvPremiumBps

Set maximum Liquidation LTV premium (in basis points) which is allowed to be set when calling setLiquidationLtvPremiumBps().

function setLiquidationLtvPremiumBps(uint16 premiumBps) external;

setMaxLiquidationLtvPremiumBps

Set Liquidation LTV premium (in basis points) of the Liquidation LTV above the Origination LTV

function setMaxLiquidationLtvPremiumBps(uint16 premiumBps) external;

setMaxOriginationLtvDelta

Set the maximum allowed Origination LTV change on any single setOriginationLtvAt(), in absolute terms between the Origination LTV as of now and the targetOriginationLtv

18 decimal places, 0.20e18 == $0.20

function setMaxOriginationLtvDelta(uint96 maxDelta) external;

setMinOriginationLtvTargetTimeDelta

Set the minimum time delta required for Origination LTV to reach it's target value when setOriginationLtvAt() is called.

In seconds.

function setMinOriginationLtvTargetTimeDelta(uint32 minTargetTimeDelta) external;

setMaxOriginationLtvRateOfChange

Set the maximum (positive) rate of change of Origination LTV allowed, when setOriginationLtvAt() is called.

Units: [Origination LTV / second]

function setMaxOriginationLtvRateOfChange(uint96 originationLtvDelta, uint32 timeDelta) external;

setOriginationLtvAt

Set the target Origination LTV which will incrementally increase from it's current value to targetOriginationLtv between now and targetTime.

targetTime is unixtime, targetOriginationLtv is 18 decimal places, 1.05e18 == $1.05

function setOriginationLtvAt(uint96 targetOriginationLtv, uint40 targetTime) external;

DECIMALS

The decimal precision of both the Origination LTV and Liquidation LTV

function DECIMALS() external view returns (uint8);

Events

OriginationLtvSetAt

event OriginationLtvSetAt(uint96 oldOriginationLtv, uint96 newOriginationLtvTarget, uint256 targetTime);

MaxOriginationLtvDeltaSet

event MaxOriginationLtvDeltaSet(uint256 maxDelta);

MinOriginationLtvTargetTimeDeltaSet

event MinOriginationLtvTargetTimeDeltaSet(uint32 maxTargetTimeDelta);

MaxOriginationLtvRateOfChangeSet

event MaxOriginationLtvRateOfChangeSet(uint96 maxRateOfChange);

MaxLiquidationLtvPremiumBpsSet

event MaxLiquidationLtvPremiumBpsSet(uint96 maxPremiumBps);

LiquidationLtvPremiumBpsSet

event LiquidationLtvPremiumBpsSet(uint96 premiumBps);

Errors

BreachedMaxOriginationLtvDelta

error BreachedMaxOriginationLtvDelta(uint96 oldOriginationLtv, uint96 newOriginationLtv, uint256 maxDelta);

BreachedMinDateDelta

error BreachedMinDateDelta(uint40 targetTime, uint40 currentDate, uint32 maxTargetTimeDelta);

BreachedMaxOriginationLtvRateOfChange

error BreachedMaxOriginationLtvRateOfChange(uint96 targetRateOfChange, uint96 maxRateOfChange);

CannotDecreaseLtv

error CannotDecreaseLtv();

InvalidParam

error InvalidParam();