Skip to main content

YieldRepurchaseFacility

Git Source

Inherits: IYieldRepo, Policy, RolesConsumer

the Yield Repurchase Facility (Yield Repo) contract pulls a derived amount of yield from the Olympus treasury each week and uses it, along with the backing of previously purchased OHM, to purchase OHM off the market using a Bond Protocol SDA market.

State Variables

sReserve

ERC4626 public immutable sReserve

reserve

ERC20 public immutable reserve

_reserveDecimals

uint8 internal immutable _reserveDecimals

ohm

ERC20 public immutable ohm

_ohmDecimals

uint8 internal immutable _ohmDecimals

_oracleDecimals

uint8 internal _oracleDecimals

TRSRY

TRSRYv1 public TRSRY

PRICE

PRICEv1 public PRICE

CHREG

CHREGv1 public CHREG

teller

address public immutable teller

auctioneer

IBondSDA public immutable auctioneer

epoch

uint48 public epoch

nextYield

uint256 public nextYield

lastReserveBalance

uint256 public lastReserveBalance

lastConversionRate

uint256 public lastConversionRate

isShutdown

bool public isShutdown

epochLength

uint48 public constant epochLength = 21

backingPerToken

uint256 public constant backingPerToken = 1133 * 1e7

Functions

constructor

constructor(Kernel kernel_, address ohm_, address sReserve_, address teller_, address auctioneer_) Policy(kernel_);

initialize

function initialize(uint256 initialReserveBalance, uint256 initialConversionRate, uint256 initialYield)
external
onlyRole("loop_daddy");

configureDependencies

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

requestPermissions

function requestPermissions() external view override returns (Permissions[] memory permissions);

VERSION

Returns the version of the policy.

function VERSION() external pure returns (uint8 major, uint8 minor);

Returns

NameTypeDescription
majoruint8The major version of the policy.
minoruint8The minor version of the policy.

endEpoch

create a new bond market at the end of the day with some portion of remaining funds

function endEpoch() public override onlyRole("heart");

adjustNextYield

allow manager to increase (by maximum 10%) or decrease yield for week if contract is inaccurate

function adjustNextYield(uint256 newNextYield) external onlyRole("loop_daddy");

Parameters

NameTypeDescription
newNextYielduint256to fund

shutdown

retire contract by burning ohm balance and transferring tokens to treasury

function shutdown(ERC20[] memory tokensToTransfer) external onlyRole("loop_daddy");

Parameters

NameTypeDescription
tokensToTransferERC20[]list of tokens to transfer back to treasury (i.e. reserves)

_createMarket

create bond protocol market with given budget

function _createMarket(uint256 bidAmount) internal;

Parameters

NameTypeDescription
bidAmountuint256amount of reserve to fund bond market with

_getBackingForPurchased

internal function to burn ohm and retrieve backing

function _getBackingForPurchased() internal;

_withdraw

internal function to withdraw sReserve from treasury

note amount given is in reserve, not sReserve

function _withdraw(uint256 amount) internal;

Parameters

NameTypeDescription
amountuint256an amount to withdraw, in reserve

_getPriceDecimals

Helper function to calculate number of price decimals based on the value returned from the price feed.

function _getPriceDecimals(uint256 price_) internal view returns (int8);

Parameters

NameTypeDescription
price_uint256The price to calculate the number of decimals for

Returns

NameTypeDescription
<none>int8The number of decimals

getReserveBalance

fetch combined sReserve balance of active clearinghouses and treasury, in reserve

function getReserveBalance() public view override returns (uint256 balance);

getNextYield

compute yield for the next week

function getNextYield() public view override returns (uint256 yield);

getOhmBalanceAndBacking

compute backing for ohm balance

function getOhmBalanceAndBacking() public view override returns (uint256 balance, uint256 backing);

Events

RepoMarket

event RepoMarket(uint256 marketId, uint256 bidAmount);

NextYieldSet

event NextYieldSet(uint256 nextYield);

Shutdown

event Shutdown();