Skip to main content

BLVaultManagerLusd

Git Source

Inherits: Policy, IBLVaultManager, RolesConsumer

State Variables

MINTR

MINTRv1 public MINTR;

TRSRY

TRSRYv1 public TRSRY;

BLREG

BLREGv1 public BLREG;

ohm

address public ohm;

pairToken

address public pairToken;

aura

address public aura;

bal

address public bal;

exchangeName

string public exchangeName;

balancerData

BalancerData public balancerData;

auraData

AuraData public auraData;

auraMiningLib

IAuraMiningLib public auraMiningLib;

ohmEthPriceFeed

OracleFeed public ohmEthPriceFeed;

ethUsdPriceFeed

OracleFeed public ethUsdPriceFeed;

lusdUsdPriceFeed

OracleFeed public lusdUsdPriceFeed;

implementation

BLVaultLusd public implementation;

vaultOwners

mapping(BLVaultLusd => address) public vaultOwners;

userVaults

mapping(address => BLVaultLusd) public userVaults;

totalLp

uint256 public totalLp;

deployedOhm

uint256 public deployedOhm;

circulatingOhmBurned

uint256 public circulatingOhmBurned;

ohmLimit

uint256 public ohmLimit;

currentFee

uint64 public currentFee;

minWithdrawalDelay

uint48 public minWithdrawalDelay;

isLusdBLVaultActive

bool public isLusdBLVaultActive;

MAX_FEE

uint32 public constant MAX_FEE = 10_000;

_ohmIndex

uint8 private constant _ohmIndex = 1;

_lusdIndex

uint8 private constant _lusdIndex = 0;

Functions

constructor

constructor(
Kernel kernel_,
TokenData memory tokenData_,
BalancerData memory balancerData_,
AuraData memory auraData_,
address auraMiningLib_,
OracleFeed memory ohmEthPriceFeed_,
OracleFeed memory ethUsdPriceFeed_,
OracleFeed memory lusdUsdPriceFeed_,
address implementation_,
uint256 ohmLimit_,
uint64 fee_,
uint48 minWithdrawalDelay_
) Policy(kernel_);

configureDependencies

Define module dependencies for this policy.

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

Returns

NameTypeDescription
dependenciesKeycode[]- Keycode array of module dependencies.

requestPermissions

Function called by kernel to set module function permissions.

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

Returns

NameTypeDescription
permissionsPermissions[]requests - Array of keycodes and function selectors for requested permissions.

onlyWhileActive

modifier onlyWhileActive();

onlyVault

modifier onlyVault();

deployVault

Deploys a personal single sided vault for the user

The vault is deployed with the user as the owner

function deployVault() external override onlyWhileActive returns (address vault);

Returns

NameTypeDescription
vaultaddressThe address of the deployed vault

mintOhmToVault

Mints OHM to the caller

Can only be called by an approved vault

function mintOhmToVault(uint256 amount_) external override onlyWhileActive onlyVault;

Parameters

NameTypeDescription
amount_uint256The amount of OHM to mint

burnOhmFromVault

Burns OHM from the caller

Can only be called by an approved vault. The caller must have an OHM approval for the MINTR.

function burnOhmFromVault(uint256 amount_) external override onlyWhileActive onlyVault;

Parameters

NameTypeDescription
amount_uint256The amount of OHM to burn

increaseTotalLp

Increases the tracked value for totalLP

Can only be called by an approved vault

function increaseTotalLp(uint256 amount_) external override onlyWhileActive onlyVault;

Parameters

NameTypeDescription
amount_uint256The amount of LP tokens to add to the total

decreaseTotalLp

Decreases the tracked value for totalLP

Can only be called by an approved vault

function decreaseTotalLp(uint256 amount_) external override onlyWhileActive onlyVault;

Parameters

NameTypeDescription
amount_uint256The amount of LP tokens to remove from the total

canWithdraw

Returns whether enough time has passed since the last deposit for the user to be ale to withdraw

function canWithdraw(address user_) external view override returns (bool);

Parameters

NameTypeDescription
user_addressThe user to check the vault of

Returns

NameTypeDescription
<none>boolbool Whether enough time has passed since the last deposit for the user to be ale to withdraw

getLpBalance

Returns the user's vault's LP balance

function getLpBalance(address user_) external view override returns (uint256);

Parameters

NameTypeDescription
user_addressThe user to check the vault of

Returns

NameTypeDescription
<none>uint256uint256 The user's vault's LP balance

getUserPairShare

Returns the user's vault's claim on the pair token

function getUserPairShare(address user_) external view override returns (uint256);

Parameters

NameTypeDescription
user_addressThe user to check the vault of

Returns

NameTypeDescription
<none>uint256uint256 The user's vault's claim on the pair token

getOutstandingRewards

Returns the user's vault's unclaimed rewards in Aura

function getOutstandingRewards(address user_) external view override returns (RewardsData[] memory);

Parameters

NameTypeDescription
user_addressThe user to check the vault of

Returns

NameTypeDescription
<none>RewardsData[]RewardsData[] The user's vault's unclaimed rewards in Aura

getMaxDeposit

Calculates the max pair token deposit based on the limit and current amount of OHM minted

function getMaxDeposit() external view override returns (uint256);

Returns

NameTypeDescription
<none>uint256uint256 The max pair token deposit

getExpectedLpAmount

Calculates the amount of LP tokens that will be generated for a given amount of pair tokens

This is an external function but should only be used in a callstatic from an external source like the frontend.

function getExpectedLpAmount(uint256 amount_) external override returns (uint256 bptAmount);

Parameters

NameTypeDescription
amount_uint256The amount of pair tokens to calculate the LP tokens for

Returns

NameTypeDescription
bptAmountuint256uint256 The amount of LP tokens that will be generated

getExpectedTokensOutProtocol

Calculates the amount of OHM and pair tokens that should be received by the vault for withdrawing a given amount of LP tokens

This is an external function but should only be used in a callstatic from an external source like the frontend.

function getExpectedTokensOutProtocol(uint256 lpAmount_)
external
override
returns (uint256[] memory expectedTokenAmounts);

Parameters

NameTypeDescription
lpAmount_uint256The amount of LP tokens to calculate the OHM and pair tokens for

Returns

NameTypeDescription
expectedTokenAmountsuint256[]The amount of OHM and pair tokens that should be received

getExpectedPairTokenOutUser

Calculates the amount of pair tokens that should be received by the user for withdrawing a given amount of LP tokens after the treasury takes any arbs

This is an external function but should only be used in a callstatic from an external source like the frontend.

function getExpectedPairTokenOutUser(uint256 lpAmount_) external override returns (uint256 expectedTknAmount);

Parameters

NameTypeDescription
lpAmount_uint256The amount of LP tokens to calculate the pair tokens for

Returns

NameTypeDescription
expectedTknAmountuint256The amount of pair tokens that should be received

getRewardTokens

Gets all the reward tokens from the Aura pool

function getRewardTokens() external view override returns (address[] memory);

Returns

NameTypeDescription
<none>address[]address[] The addresses of the reward tokens

getRewardRate

Gets the reward rate (tokens per second) of the passed reward token

function getRewardRate(address rewardToken_) external view override returns (uint256 rewardRate);

Returns

NameTypeDescription
rewardRateuint256uint256 The reward rate (tokens per second)

getPoolOhmShare

Returns the amount of OHM in the pool that is owned by this vault system.

function getPoolOhmShare() public view override returns (uint256);

Returns

NameTypeDescription
<none>uint256uint256 The amount of OHM in the pool that is owned by this vault system.

getOhmSupplyChangeData

Gets the net OHM emitted or removed by the system since inception

function getOhmSupplyChangeData()
external
view
override
returns (uint256 poolOhmShare, uint256 mintedOhm, uint256 netBurnedOhm);

Returns

NameTypeDescription
poolOhmShareuint256uint256 Vault system's current claim on OHM from the Balancer pool
mintedOhmuint256
netBurnedOhmuint256

getOhmTknPrice

Gets the number of OHM per 1 pair token using oracle prices

function getOhmTknPrice() public view override returns (uint256);

Returns

NameTypeDescription
<none>uint256uint256 OHM per 1 pair token (9 decimals)

getTknOhmPrice

Gets the number of pair tokens per 1 OHM using oracle prices

function getTknOhmPrice() public view override returns (uint256);

Returns

NameTypeDescription
<none>uint256uint256 Pair tokens per 1 OHM (18 decimals)

getOhmTknPoolPrice

Gets the number of OHM per 1 pair token using pool prices

function getOhmTknPoolPrice() public view override returns (uint256);

Returns

NameTypeDescription
<none>uint256uint256 OHM per 1 pair token (9 decimals)

emergencyBurnOhm

Emergency burns OHM that has been sent to the manager in the event a user had to emergency withdraw

Can only be called by the admin

function emergencyBurnOhm(uint256 amount_) external override onlyRole("liquidityvault_admin");

Parameters

NameTypeDescription
amount_uint256The amount of OHM to burn

setLimit

Updates the limit on minting OHM

Can only be called by the admin. Cannot be set lower than the current outstanding minted OHM.

function setLimit(uint256 newLimit_) external override onlyRole("liquidityvault_admin");

Parameters

NameTypeDescription
newLimit_uint256The new OHM limit (9 decimals)

setFee

Updates the fee on reward tokens

Can only be called by the admin. Cannot be set beyond 10_000 (100%). Only is used by vaults deployed after the update.

function setFee(uint64 newFee_) external override onlyRole("liquidityvault_admin");

Parameters

NameTypeDescription
newFee_uint64The new fee (in basis points)

setWithdrawalDelay

Updates the minimum holding period before a user can withdraw

Can only be called by the admin

function setWithdrawalDelay(uint48 newDelay_) external override onlyRole("liquidityvault_admin");

Parameters

NameTypeDescription
newDelay_uint48The new minimum holding period (in seconds)

changeUpdateThresholds

function changeUpdateThresholds(
uint48 ohmEthUpdateThreshold_,
uint48 ethUsdUpdateThreshold_,
uint48 lusdUsdUpdateThreshold_
) external onlyRole("liquidityvault_admin");

activate

Activates the vault manager and all approved vaults

Can only be called by the admin

function activate() external override onlyRole("liquidityvault_admin");

deactivate

Deactivates the vault manager and all approved vaults

Can only be called by the admin

function deactivate() external override onlyRole("emergency_admin");

_validatePrice

function _validatePrice(AggregatorV3Interface priceFeed_, uint48 updateThreshold_) internal view returns (uint256);

Events

VaultDeployed

event VaultDeployed(address vault, address owner, uint64 fee);

Errors

BLManagerLusd_AlreadyActive

error BLManagerLusd_AlreadyActive();

BLManagerLusd_AlreadyInactive

error BLManagerLusd_AlreadyInactive();

BLManagerLusd_Inactive

error BLManagerLusd_Inactive();

BLManagerLusd_InvalidVault

error BLManagerLusd_InvalidVault();

BLManagerLusd_LimitViolation

error BLManagerLusd_LimitViolation();

BLManagerLusd_InvalidLpAmount

error BLManagerLusd_InvalidLpAmount();

BLManagerLusd_InvalidLimit

error BLManagerLusd_InvalidLimit();

BLManagerLusd_InvalidFee

error BLManagerLusd_InvalidFee();

BLManagerLusd_BadPriceFeed

error BLManagerLusd_BadPriceFeed();

BLManagerLusd_VaultAlreadyExists

error BLManagerLusd_VaultAlreadyExists();

BLManagerLusd_NoUserVault

error BLManagerLusd_NoUserVault();