Skip to content

StETHQueueCore ​

validAddress ​

solidity
modifier validAddress(address value_)

validates that an address is not the zero address

_getLiquidityExchangePrice ​

solidity
function _getLiquidityExchangePrice() internal view returns (uint256 borrowExchangePrice_)

reads the current, updated borrow exchange price for Native ETH at Liquidity

ReentrancyGuard ​

_ReentrancyGuard based on OpenZeppelin implementation. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.8/contracts/security/ReentrancyGuard.sol_

REENTRANCY_NOT_ENTERED ​

solidity
uint8 REENTRANCY_NOT_ENTERED

REENTRANCY_ENTERED ​

solidity
uint8 REENTRANCY_ENTERED

constructor ​

solidity
constructor() internal

nonReentrant ​

solidity
modifier nonReentrant()

Prevents a contract from calling itself, directly or indirectly. See OpenZeppelin implementation for more info

StETHQueueAdmin ​

FluidStETHQueue admin related methods

onlyAuths ​

solidity
modifier onlyAuths()

only auths guard

isAuth ​

solidity
function isAuth(address auth_) public view returns (bool)

reads if a certain auth_ address is an allowed auth or not

isGuardian ​

solidity
function isGuardian(address guardian_) public view returns (bool)

reads if a certain guardian_ address is an allowed guardian or not

isUserAllowed ​

solidity
function isUserAllowed(address user_) public view returns (bool)

reads if a certain user_ address is an allowed user or not

isPaused ​

solidity
function isPaused() public view returns (bool)

reads if the protocol is paused or not

setAuth ​

solidity
function setAuth(address auth_, bool allowed_) external

Sets an address as allowed auth or not. Only callable by owner.

Parameters ​

NameTypeDescription
auth_addressaddress to set auth value for
allowed_boolbool flag for whether address is allowed as auth or not

setGuardian ​

solidity
function setGuardian(address guardian_, bool allowed_) external

Sets an address as allowed guardian or not. Only callable by owner.

Parameters ​

NameTypeDescription
guardian_addressaddress to set guardian value for
allowed_boolbool flag for whether address is allowed as guardian or not

setUserAllowed ​

solidity
function setUserAllowed(address user_, bool allowed_) external

Sets an address as allowed user or not. Only callable by auths.

Parameters ​

NameTypeDescription
user_addressaddress to set allowed value for
allowed_boolbool flag for whether address is allowed as user or not

setMaxLTV ​

solidity
function setMaxLTV(uint16 maxLTV_) external

Sets maxLTV to maxLTV_ (in 1e2: 1% = 100, 100% = 10000). Must be > 0 and < 100%.

pause ​

solidity
function pause() external

Pauses the protocol (blocks queue() and claim()). Only callable by guardians.

unpause ​

solidity
function unpause() external

Unpauses the protocol (enables queue() and claim()). Only callable by owner.

setAllowListActive ​

solidity
function setAllowListActive(bool status_) external

Sets allowListActive flag to status_. Only callable by owner.

FluidStETHQueue ​

queues an amount of stETH at the Lido WithdrawalQueue, using it as collateral to borrow an amount of ETH that is paid back when Lido Withdrawal is claimable. Useful e.g. to deleverage a stETH / ETH borrow position. User target group are whales that want to deleverage stETH / ETH without having to swap (no slippage).

claims are referenced to via the claimTo address and the Lido requestIdFrom, which must be tracked from the moment of queuing, where it is emitted in the LogQueue event, to pass in that information later for claim(). For view methods / accessing data, use the "StETHResolver" periphery contract.

constructor ​

solidity
constructor(contract IFluidLiquidity liquidity_, contract ILidoWithdrawalQueue lidoWithdrawalQueue_, contract IERC20 stETH_) public

initialize ​

solidity
function initialize(address owner_) public

initializes the contract with owner_ as owner

receive ​

solidity
receive() external payable

_authorizeUpgrade ​

solidity
function _authorizeUpgrade(address) internal

renounceOwnership ​

solidity
function renounceOwnership() public view

override renounce ownership as it could leave the contract in an unwanted state if called by mistake.

queue ​

solidity
function queue(uint256 ethBorrowAmount_, uint256 stETHAmount_, address borrowTo_, address claimTo_) public returns (uint256 requestIdFrom_)

queues an amount of stETH at the Lido WithdrawalQueue, using it as collateral to borrow an amount of ETH from Liquidity that is paid back when Lido Withdrawal is claimable, triggered with claim().

if allowListActive == true, then only allowed users can call this method.

Parameters ​

NameTypeDescription
ethBorrowAmount_uint256amount of ETH to borrow and send to borrowTo_
stETHAmount_uint256amount of stETH to queue at Lido Withdrawal Queue and use as collateral
borrowTo_addressreceiver of the ethBorrowAmount_
claimTo_addressreceiver of the left over stETH funds at time of claim()

Return Values ​

NameTypeDescription
requestIdFrom_uint256first request id at Lido withdrawal queue. Used to identify claims

claim ​

solidity
function claim(address claimTo_, uint256 requestIdFrom_) public returns (uint256 claimedAmount_, uint256 repayAmount_)

claims all open requests at LidoWithdrawalQueue for claimTo_, repays the borrowed ETH amount at Liquidity and sends the rest of funds to claimTo_.

Parameters ​

NameTypeDescription
claimTo_addressclaimTo receiver to process the claim for
requestIdFrom_uint256Lido requestId from (start), as emitted at time of queuing (queue()) via LogQueue

Return Values ​

NameTypeDescription
claimedAmount_uint256total amount of claimed stETH
repayAmount_uint256total repaid ETH amount at Liquidity

onERC721Received ​

solidity
function onERC721Received(address, address, uint256, bytes) public view returns (bytes4)

accept ERC721 token transfers ONLY from LIDO_WITHDRAWAL_QUEUE

liquidityCallback ​

solidity
function liquidityCallback(address, uint256, bytes) external pure

liquidityCallback as used by Liquidity -> But unsupported in this contract as it only ever uses native token as borrowed asset, which is repaid directly via msg.value. Always reverts.