Skip to main content

CoolerLtvOracle

Git Source

Inherits: ICoolerLtvOracle, Policy, PolicyAdmin

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

State Variables

_DEBT_TOKEN

The debt token

ERC20 private immutable _DEBT_TOKEN;

_COLLATERAL_TOKEN

The collateral token

ERC20 private immutable _COLLATERAL_TOKEN;

originationLtvData

The current Origination LTV state data

OriginationLtvData public override originationLtvData;

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

uint96 public override maxOriginationLtvDelta;

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

uint32 public override minOriginationLtvTargetTimeDelta;

maxOriginationLtvRateOfChange

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

Units: [Origination LTV / second]

uint96 public override maxOriginationLtvRateOfChange;

maxLiquidationLtvPremiumBps

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

uint16 public override maxLiquidationLtvPremiumBps;

liquidationLtvPremiumBps

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

uint16 public override liquidationLtvPremiumBps;

DECIMALS

The decimal precision of both the Origination LTV and Liquidation LTV

uint8 public constant override DECIMALS = 18;

BASIS_POINTS_DIVISOR

uint96 public constant BASIS_POINTS_DIVISOR = 10_000;

Functions

constructor

constructor(
address kernel_,
address collateralToken_,
address debtToken_,
uint96 initialOriginationLtv_,
uint96 maxOriginationLtvDelta_,
uint32 minOriginationLtvTargetTimeDelta_,
uint96 maxOriginationLtvRateOfChange_,
uint16 maxLiquidationLtvPremiumBps_,
uint16 liquidationLtvPremiumBps_
) Policy(Kernel(kernel_));

configureDependencies

Define module dependencies for this policy.

function configureDependencies() external override returns (Keycode[] memory dependencies);

Returns

NameTypeDescription
dependenciesKeycode[]- Keycode array of module dependencies.

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 override onlyAdminRole;

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 override onlyAdminRole;

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
override
onlyAdminRole;

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 targetValue, uint40 targetTime) external override onlyAdminRole;

setMaxLiquidationLtvPremiumBps

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

function setMaxLiquidationLtvPremiumBps(uint16 maxPremiumBps) external override onlyAdminRole;

setLiquidationLtvPremiumBps

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

function setLiquidationLtvPremiumBps(uint16 premiumBps) external override onlyAdminRole;

collateralToken

The collateral asset of the LTV [debtToken / collateralToken]

function collateralToken() external view override returns (IERC20);

debtToken

The debt asset of the LTV [debtToken / collateralToken]

function debtToken() external view override returns (IERC20);

currentLtvs

function currentLtvs() public view override returns (uint96 originationLtv, uint96 liquidationLtv);

currentLiquidationLtv

The current Liquidation LTV

function currentLiquidationLtv() external view override returns (uint96);

currentOriginationLtv

The current Origination LTV

function currentOriginationLtv() public view override returns (uint96);

_currentLiquidationLtv

function _currentLiquidationLtv(uint96 oltv) private view returns (uint96);

Structs

OriginationLtvData

struct OriginationLtvData {
uint96 startingValue;
uint40 startTime;
uint96 targetValue;
uint40 targetTime;
uint96 slope;
}