Skip to content

esp staking contracts

EspressoStrategy: ESP Liquid Staking Strategy

EspressoStrategy is a staking strategy that manages multiple EspressoVault contracts by tracking the balance of each and moving tokens in and out of them.

Returns the address of the staking token (ESP).

function token() public view returns (address)
Name Type Description
token address ESP token address

Returns the address of the staking pool that controls this strategy.

function stakingPool() public view returns (address)
Name Type Description
stakingPool address Staking pool address

Returns the address of the Espresso delegation contract.

function espressoStaking() public view returns (address)
Name Type Description
espressoStaking address Espresso delegation contract address

Returns the address of the Espresso rewards contract.

function espressoRewards() public view returns (address)
Name Type Description
espressoRewards address Espresso rewards contract address

Returns the address of the fund flow controller contract.

function fundFlowController() public view returns (address)
Name Type Description
fundFlowController address Fund flow controller address

Returns the address of the rewards oracle.

function rewardsOracle() public view returns (address)
Name Type Description
rewardsOracle address Rewards oracle address

Returns the max reward change allowed per update in basis points.

function maxRewardChangeBPS() public view returns (uint256)
Name Type Description
maxRewardChangeBPS uint256 Max reward change per update (bps)

Returns the address of the vault implementation contract.

function vaultImplementation() public view returns (address)
Name Type Description
vaultImplementation address Vault implementation address

Returns the total number of tokens queued for deposit into vaults.

function totalQueued() public view returns (uint256)
Name Type Description
totalQueued uint256 Total queued tokens

Returns the total number of vaults currently unbonding.

function numVaultsUnbonding() public view returns (uint256)
Name Type Description
numVaultsUnbonding uint256 Number of vaults unbonding

Returns the index of vault to withdraw from on next withdrawal.

function vaultWithdrawalIndex() public view returns (uint256)
Name Type Description
vaultWithdrawalIndex uint256 Vault withdrawal index

Returns the available deposit room for this strategy.

function canDeposit() public view returns (uint256)
Name Type Description
canDeposit uint256 Available deposit room

Returns the available withdrawal room for this strategy.

function canWithdraw() public view returns (uint256)
Name Type Description
canWithdraw uint256 Available withdrawal room

Returns the total amount of deposits in this strategy.

function getTotalDeposits() public view returns (uint256)
Name Type Description
totalDeposits uint256 Total deposits

Returns the maximum that can be deposited into this strategy.

function getMaxDeposits() public view returns (uint256)
Name Type Description
maxDeposits uint256 Maximum deposits

Returns the minimum that must remain in this strategy.

function getMinDeposits() public view returns (uint256)
Name Type Description
minDeposits uint256 Minimum deposits

Returns a list of all vaults controlled by this contract.

function getVaults() external view returns (IEspressoVault[] memory)
Name Type Description
vaults IEspressoVault[] List of vaults

Returns the deposit change since deposits were last updated.

function getDepositChange() public view returns (int)
Name Type Description
depositChange int Change in total deposits

Returns a list of all fees and fee receivers.

function getFees() external view returns (Fee[] memory)
Name Type Description
fees Fee[] List of fees

Deposits tokens from the staking pool into this strategy.

function deposit(uint256 _amount, bytes calldata) external
Name Type Description
_amount uint256 Amount to deposit

Withdraws tokens from this strategy and sends them to staking pool.

function withdraw(uint256 _amount, bytes calldata) external
Name Type Description
_amount uint256 Amount to withdraw

Deposits queued tokens into vaults.

function depositQueuedTokens(uint256[] calldata _vaultIds, uint256[] calldata _amounts) external
Name Type Description
_vaultIds uint256[] List of vault IDs
_amounts uint256[] Amounts to deposit per vault

Unbonds token deposits in vaults.

function unbond(uint256 _toUnbond) external
Name Type Description
_toUnbond uint256 Amount to unbond

Unbonds token deposits in vaults (used to rebalance between vaults).

function forceUnbond(uint256[] calldata _vaultIds, uint256[] calldata _amounts) external
Name Type Description
_vaultIds uint256[] List of vault IDs
_amounts uint256[] Amounts to unbond per vault

Claims and withdraws tokens from vaults that are unbonded.

function claimUnbond(uint256[] calldata _vaultIds) external
Name Type Description
_vaultIds uint256[] List of vault IDs

Updates deposit accounting and calculates fees on newly earned rewards.

function updateDeposits(bytes calldata) external returns (int256 depositChange, address[] memory receivers, uint256[] memory amounts)
Name Type Description
depositChange int256 Change in deposits since last update
receivers address[] List of fee receivers
amounts uint256[] List of fee amounts

Restakes rewards in the Espresso staking contract for given vaults.

function restakeRewards(uint256[] calldata _vaultIds, uint256[] calldata _lifetimeRewards, bytes[] calldata _authData) external
Name Type Description
_vaultIds uint256[] List of vault IDs
_lifetimeRewards uint256[] Lifetime rewards values for each vault
_authData bytes[] Authorization data for each vault

Withdraws rewards from the Espresso staking contract for given vaults.

function withdrawRewards(uint256[] calldata _vaultIds, uint256[] calldata _lifetimeRewards, bytes[] calldata _authData) external
Name Type Description
_vaultIds uint256[] List of vault IDs
_lifetimeRewards uint256[] Lifetime rewards values for each vault
_authData bytes[] Authorization data for each vault

Updates lifetime rewards tracking for specified vaults. Used to sync lifetime rewards which is fetched off chain.

function updateLifetimeRewards(uint256[] calldata _vaultIds, uint256[] calldata _lifetimeRewards) external
Name Type Description
_vaultIds uint256[] List of vault IDs
_lifetimeRewards uint256[] Lifetime rewards values for each vault

Claims validator exits for specified vaults.

function claimValidatorExits(uint256[] calldata _vaultIds) external
Name Type Description
_vaultIds uint256[] List of vault IDs

Adds a new vault for a validator.

function addVault(address _validator) external
Name Type Description
_validator address Validator address

Removes vaults. Withdraws any remaining principal deposits so vault must be empty or any unbonding periods must have elapsed for remaining deposits. Will not claim rewards so rewards must be claimed before removing a vault.

function removeVaults(uint256[] calldata _vaultIdxs) external
Name Type Description
_vaultIdxs uint256[] List of vault indices (must be ascending order)

Upgrades vaults to a new implementation contract.

function upgradeVaults(address[] calldata _vaults, bytes[] memory _data) external
Name Type Description
_vaults address[] List of vault addresses
_data bytes[] Encoded function calls per vault

Adds a new fee.

function addFee(address _receiver, uint256 _feeBasisPoints) external
Name Type Description
_receiver address Fee receiver address
_feeBasisPoints uint256 Fee in basis points

Updates an existing fee. Set _feeBasisPoints to 0 to remove the fee.

function updateFee(uint256 _index, address _receiver, uint256 _feeBasisPoints) external
Name Type Description
_index uint256 Fee index
_receiver address Fee receiver address
_feeBasisPoints uint256 Fee in basis points

Sets a new vault implementation contract to be used when deploying/upgrading vaults.

function setVaultImplementation(address _vaultImplementation) external
Name Type Description
_vaultImplementation address Vault implementation address

Sets the fund flow controller.

function setFundFlowController(address _fundFlowController) external
Name Type Description
_fundFlowController address Fund flow controller address

Sets the rewards oracle.

function setRewardsOracle(address _rewardsOracle) external
Name Type Description
_rewardsOracle address Rewards oracle address

Sets the max reward change allowed per update in basis points.

function setMaxRewardChangeBPS(uint256 _maxRewardChangeBPS) external
Name Type Description
_maxRewardChangeBPS uint256 Max reward change per update (bps)