TenderLeverageStrategy.sol
Last updated
Was this helpful?
Last updated
Was this helpful?
balancerVault
address
public; constant
_positionId
uint256
private
The identifier for the strategy position that is maintained by the Factor Leverage Vault.
_vaultManager
IERC721
private
The address of the Vault Manager contract which facilitates vault admin operations (the underlying Leverage Vault contract in this instance).
_asset
IERC20
private
The address of the asset token (i.e. collateral and token being levered).
_debtToken
IERC20
private
The address of the debt token (i.e. borrow asset for flash loan).
_assetPool
address
public
The address of the asset
lending pool.
_debtPool
address
public
The address of the debt
lending pool.
tenderUniTroller
address
public; constant
tenderVester
address
public; constant
tenderVestedToken
address
public; constant
tenderToken
address
public; constant
weth
address
public; constant
flMode
uint8
private
The flash loan mode used to determine the relevant operations to receive the flash loan:
1
= addLeverage
2
= removeLeverage
3
= switchAsset
4
= switchDebt
5
= closeLeverage
Emitted when leverage is added to the position (i.e. this Leverage Strategy contract).
amount
uint256
The amount of asset
that was supplied to the lending pool.
debt
uint256
The amount of debt
that was taken out as a flash loan denominated in _debtToken
.
Emitted when leverage is removed from the leveraged position (i.e. this Leverage Strategy contract).
debt
uint256
The amount of debt
that was repaid.
Emitted when the leveraged position is closed (i.e. fully repaid).
assetBalance
uint256
The amount of asset
that was returned after closing the position.
debtBalance
uint256
The amount of debt
that was returned after closing the position.
Emitted when the underlying collateral asset for the leveraged position is switched.
newAsset
address
The address of the token used to collateralize the newly switched leverage position.
balance
uint256
The amount of newAsset
that was collateralized.
Emitted when the debt token for the leveraged position is switched.
newDebt
address
The address of the token that was borrowed (i.e. the debt token).
balance
uint256
The amount of newDebt
that is owed (i.e. the debt amount).
Emitted when asset
is withdrawn from the Tender.fi lending pool.
amount
uint256
The amount of asset
withdrawn from the Tender.fi lending pool.
Emitted when the Tender.fi lending pool debt
is repaid.
amount
uint256
The amount of debt
that was repaid.
Emitted when asset
is supplied to the Tender.fi lending pool.
amount
uint256
The amount of asset
supplied to the Tender.fi lending pool.
Emitted when debt
is borrowed from the Tender.fi lending pool (which collateralizes the provided asset
).
amount
uint256
The amount of debt
that was borrowed from the Tender.fi lending pool.
Emitted when stuck tokens are withdrawn from the Strategy contract.
tokenAddress
address
The address of the token to be withdrawn.
amount
uint256
The amount of asset
withdrawn from the Tender.fi lending pool.
Emitted when Tender.fi rewards are claimed as TND tokens and transferred to the msg.sender
(i.e. user).
amount
uint256
The amount of rewards claimed denominated in TND tokens.
Emitted when Tender.fi rewards are claimed as asset
tokens and transferred to the msg.sender
(i.e. user).
amount
uint256
The amount of rewards claimed denominated in TND tokens.
Emitted when Tender.fi rewards are claimed as debt
tokens and transferred to the msg.sender
(i.e. user).
amount
uint256
The amount of rewards claimed denominated in TND tokens.
Emitted when a leverage fee is charged.
amount
uint256
Checks if the msg.sender
address is equal to the owner
of the position as maintained by the Leverage Vault contract.
public
initializer
Initializes the Strategy contract with the __positionId
and initial address configurations.
__positionId
uint256
The identifier of the leveraged position as maintained by the underlying Leverage Vault contract.
_vaultManagerAddress
address
The address of the Vault Manager contract (the underlying Leverage Vault contract in this instance).
_assetAddress
address
The address of the Strategy's asset token (i.e. collateral and token being levered).
_debtAddress
address
The address of the Strategy's debt token (i.e. borrow asset for flash loan).
_assetPoolAddress
address
The address of the asset
lending pool.
_debtPoolAddress
address
The address of the debt
lending pool.
public
view
returns
Returns the address of the Factor Vault Manager contract which contains vault admin functions (e.g. upgrade strategy, set fees, etc.).
address
The address of the Factor Vault Manager.
public
view
returns
Returns the position identifier maintained by the underlying Leverage Vault contract. Each strategy implementation (such as this contract) is tied to a positionId
.
uint256
The identifier of the position on the underlying Leverage Vault contract.
public
view
returns
Returns the address of the token configured as the main asset for this leverage Strategy contract (i.e. collateralized asset).
address
The address of the Strategy's _asset
.
public
view
returns
Returns the address of the debt token which is used for taking out a flash loan (i.e. borrow token) for this Strategy contract.
address
The address of the Strategy's _debtToken
.
public
view
returns
Returns the address of the Tender.fi lending pool where the _asset
is being collateralized.
address
The address of the Strategy's _assetPool
.
public
view
returns
Returns the address of the Tender.fi lending pool where the _debtToken
was borrowed from.
address
The address of the Strategy's _debtPool
.
public
view
returns
Returns the total collateralized balance (i.e. _asset
supplied) of the Strategy contract that is held by the Tender.fi lending pool.
uint256
The total _asset
supplied to the Tender.fi lending pool.
public
view
returns
Returns the outstanding debt balance (i.e. _debtToken
borrowed) which the Strategy contract owes to the Tender.fi lending contract.
uint256
The total _debtToken
that needs to be repaid to the Tender.fi lending pool.
public
view
returns
Returns the address of the owner
of the leveraged position.
address
The address of the owner
of the position.
external
payable
Adds leverage to a position by executing the following:
Transfer asset
from owner
to the Strategy contract
Supply asset
to the Tender.fi pool
If debt
is specified, executes a flash loan to borrow configured debt
amount on Balancer vault
amount
uint256
The amount of _asset
being supplied.
debt
uint256
The amount of _debtToken
to be flash loaned.
data
bytes
The Balancer userData
which in this context is used for pool-specific instructions needed to do the calculations.
Emits the results of the leverage addition.
internal
An internal function which is meant to be called by the Balancer vault contract which repays the flash loan on Balancer by borrowing debt
against the new asset
collateralized amount on Tender.fi.
Supply newly acquired asset
to the Tender.fi pool (i.e. increase total collateral value)
Borrow _debtToken
from the Tender.fi pool to repay Balancer flash loan
Repay the Balancer flash loan
params
bytes
Encoded bytes data which consists of:
amount
= The number of _debtToken
that was flash loaned.
data
= The Balancer userData
.
feeAmount
uint256
The flash loan fee amount to be repaid denominated in _debtToken
.
Removes a specified amount of leverage from the Strategy contract by executing the following:
Query the outstanding debt
on the Tender.fi lending pool
Executes a flash loan to borrow debt
from the Balancer vault equivalent to the outstanding debt
on the Tender.fi pool
Transfer withdrawn asset
to the owner
onlyOwner
amount
uint256
The amount of asset
being removed.
data
bytes
The Balancer userData
which in this context is used for pool-specific instructions needed to do the calculations.
Emits the results of the leverage removal.
internal
An internal function which is meant to be called by the Balancer vault contract which repays the flash loan on Balancer by withdrawing asset
from the Tender.fi lending pool.
Queries the outstanding debt
on the Tender.fi lending pool
Repays all of the outstanding debt
on Tender.fi
Calculates the remaining Balancer flash loan debt
outstanding
Borrow the oustanding flash loan debt
amount (including fees) from Tender.fi lending pool
Repay the Balancer flash loan
params
bytes
Encoded bytes data which consists of:
amount
= The number of _asset
that is being removed from the Strategy contract.
data
= The Balancer userData
.
feeAmount
uint256
The flash loan fee amount to be repaid denominated in _debtToken
.
public
returns
Allows the msg.sender
to conduct a swap via the OpenOcean aggregator.
tokenIn
address
The address of the token being swapped from.
tokenOut
address
The address of the token being swapped to.
amount
uint256
The amount of tokenIn
being swapped.
data
bytes
The bytes data which consists of the swap method and params.
uint256
The amount of tokenOut
resulting from the swap minus the leverage strategy fees.
Enables the owner
to transfer strategy asset
from the msg.sender
(i.e. depositor) to the Strategy contract which is then supplied to the Tender.fi lending pool. The Strategy contract will hold the balance on behalf of the owner
.
onlyOwner
amount
uint256
The amount of asset
that was used for leverage.
Emits the amount of asset
that was supplied.
uint256
The leverage fee charged denominated in token
.
Enables the owner
to utilize the collateralized asset
in the Tender.fi lending pool to borrow the specified amount
of debt
. The debt
is transferred to the msg.owner
(i.e. owner
) with the Strategy contract holding the debt on behalf of the owner
.
onlyOwner
amount
uint256
The amount of debt
to be borrowed.
Emits the amount of debt
that was borrowed.
Enables the owner
to repay a specified amount
of the debt
for a borrow position on the Tender.fi lending pool. The debt
is repaid on behalf of the Strategy contract which holds the owner
's debt obligations.
onlyOwner
amount
uint256
The amount of debt
to be repaid.
Emits the amount of debt
that was repaid.
Enables the owner
to withdraw a specified amount
of asset
from the Tender.fi lending pool. The Strategy contract executes the withdrawal as it holds deposit balance on behalf of the owner
. The corresponding amount
of asset
is transferred to the owner
address.
Note that due to accrued fees to the iToken, the amount returned by the Tender.fi lending pool might be higher than the given amount
. In such cases, the higher of the expected amount or final amount is returned to the owner
.
onlyOwner
amount
uint256
The amount of asset
to be withdrawn.
Emits the amount of asset
that was withdrawn.
Switches the position's underlying asset
to a newly specified newAsset
token.
Query the outstanding debt
on the Tender.fi lending pool
Executes a flash loan to borrow debt
from the Balancer vault equivalent to the outstanding debt on the Tender.fi vault
newAsset
address
The address of the token which will be switched with the current asset
.
amount
uint256
The amount of existing asset
that is being switched for the newAsset
.
data
bytes
The Balancer userData
which in this context is used for pool-specific instructions needed to do the calculations.
internal
An internal function which is meant to be called by the Balancer vault contract which switches the asset
collateralizing the leveraged position.
Queries the outstanding debt
on the Tender.fi lending pool
Repays all of the outstanding debt
on Tender.fi
Withdraws all of the asset
from the existing position on Tender.fi
Change the Factor Strategy contract properties to align with the newAsset
Supply the swapped newAsset
to the newAsset
Tender.fi lending pool
Borrow the initial debt
balance from Tender.fi using the newAsset
as collateral
Repay the Balancer flash loan
params
bytes
Encoded bytes data which consists of:
newAsset
= The address of the token that is being used as the new collateral
amount
= The number of _asset
that is being switched.
data
= The Balancer userData
.
feeAmount
uint256
The flash loan fee amount to be repaid denominated in _debtToken
.
Emits the results of the asset switch and new asset balance denominated in newAsset
.
Switches the debt
of the leverage position for a specified newDebtToken
.
Executes a flash loan to borrow existing debt
from the Balancer vault equivalent to the outstanding debt on the Tender.fi lending pool
onlyOwner
newDebtToken
address
The address of the token which will be switched with the current debt
.
newDebt
uint256
The amount of newDebtToken
that is being switched in place of the old debt
.
data
bytes
The Balancer userData
which in this context is used for pool-specific instructions needed to do the calculations.
internal
An internal function which is meant to be called by the Balancer vault contract which switches the debt
of a leveraged position with a provided newDebtToken
.
Queries the outstanding debt
on the Tender.fi lending pool
Repays all of the outstanding debt
on Tender.fi
Change the Factor Strategy contract properties to align with the newDebtToken
Borrow the provided newDebt
amount of newDebtToken
from the corresponding Tender.fi pool using the untouched underlying asset
as collateral
Repay the Balancer flash loan using the acquired debt
params
bytes
Encoded bytes data which consists of:
newDebtToken
= The address of the token to be used as the new debt
newDebt
= The number of newDebtToken
that is being borrowed
poolAddress
= The address of the corresponding Tender.fi lending pool.
data
= The Balancer userData
.
feeAmount
uint256
The flash loan fee amount to be repaid denominated in the old debt
.
Emits the results of the asset switch and new asset balance denominated in newAsset
.
Closes the leveraged position and transfers the remaining asset
and debt
amounts to the owner
. If the asset
amount
specified is greater than the debt value, the position value will be returned in debt
tokens.
Executes a flash loan to borrow existing debt
from the Balancer vault equivalent to the outstanding debt on the Tender.fi lending pool
Transfers the remaining asset
and debt
tokens to the owner
(i.e. depositor)
onlyOwner
amount
uint256
The amount of asset
that will be swapped for debt
.
data
bytes
The Balancer userData
which in this context is used for pool-specific instructions needed to do the calculations.
Emits the results of the leverage position closure.
internal
An internal function which is meant to be called by the Balancer vault contract which switches the debt
of the leveraged position with a provided newDebtToken
.
Queries the outstanding debt
on the Tender.fi lending pool
Repays all of the outstanding debt
on Tender.fi
Withdraws all of the asset
from the existing position on Tender.fi
Repay the Balancer flash loan using the acquired debt
params
bytes
Encoded bytes data which consists of:
amount
= The number of asset
that is swapped for debt
data
= The Balancer userData
.
feeAmount
uint256
The flash loan fee amount to be repaid denominated in the old debt
.
external
pure
returns
Returns the strategy version which is hardcoded based on contract deployment.
string
The Strategy contract version.
onlyOwner
newImplementation
address
The address of the proposed Strategy contract.
A private function which faciliates the claiming of Tender.fi rewards based on the specified output token
. If the token
is not specified, the rewards will be claimed as TND else the claimed TND rewards will be swapped for the specified token
.
onlyOwner
pool
address
The address of the Tender.fi lending pool from which rewards are being claimed.
token
address
The token that the claimed rewards will be received in (i.e. tokenOut).
fnSelector
bytes4
The bytes signature of the target function on the Tender.fi Reward contract.
amountOutMinimum
uint256
The minimum amount of asset
received from the claim else the transaction reverts.
Emits the amount of rewards claimed. Denominated in TND.
Allows the position owner
to claim Tender.fi rewards in TND tokens.
onlyOwner
Allows the position owner
to claim Tender.fi rewards and supply the claimed value as asset
tokens to the relevant Tender.fi lending pool.
onlyOwner
amountOutMinimum
uint256
The minimum amount of asset
received from swapping the claimed rewards else the transaction reverts.
Allows the position owner
to claim Tender.fi rewards and repay the claimed value as debt
tokens to the relevant Tender.fi lending pool.
onlyOwner
amountOutMinimum
uint256
The minimum amount of debt
received from swapping the claimed rewards else the transaction reverts.
Enables the owner
to withdraw any tokenAddress
that is stuck in the Strategy contract.
onlyOwner
tokenAddress
address
The address of the token to withdraw.
amount
uint256
The amount of tokenAddress
to be withdrawn.
Emits the amount of tokenAddress
that was withdrawn as well as the tokenAddress
.
internal
returns
Charges the fee for the leverage strategy and transfers the fee to the fee recipient. The fee configs are maintained by the Vault Manager contract.
amount
uint256
The amount of token
that was used for leverage.
token
address
Emits the leverage fee that was charged.
external
override
nonReentrant
An external function meant to be called by the Balancer vault contract to check the validity of the vault receiving the flash loan (i.e. can the flash loan be repaid). Reads the configured flMode
at the time of execution to determine the correct operation to call.
nonReentrant
tokens
address[]
The list of token addresses associated with the flash loan operations.
amounts
uint256[]
The amount of each token in tokens
to be used for the flash loan operation. The order of each token amount must correspond with the order of the token address in tokens
.
feeAmounts
uint256[]
The flash loan fee amount of each token in tokens
to be used for the flash loan operation. The order of each token amount must correspond with the order of the token address in tokens
.
params
bytes
The Balancer userData
passed in as calldata.
The address of the (to facilitate flash loans).
The address of the Tender.fi which proxies Comptroller logic and maintains stores state.
The address of the Tender.fi which facilitates the vested TND rewards.
The address of the vested Tender.fi token (i.e. ).
The address of the Tender.fi token (i.e. ).
The address of the .
The leverage fee charged denominated in token
passed in .
Factor Strategy contracts implements OpenZeppelin's upgradeable contracts design and locks the strategy contract upon initialization to avoid contract takeover by an attacker. More info can be found on .
Balancer vault calls to trigger flash swap and flash loan debt repayment via
Swap debt
for asset
(via )
Balancer vault calls to trigger flash swap and flash loan debt repayment via
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Withdraws the specified amount
of asset
(as per )
Swap the withdrawn asset
for debt
(via )
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Balancer vault calls to trigger flash swap and flash loan debt repayment via
Swaps the specified amount
(per ) of the withdrawn asset
for newAsset
(via )
Balancer vault calls to trigger flash swap and flash loan debt repayment via
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Swaps the specified newDebt
amount (per ) of the newDebtToken
for the previous debt
token (via )
Balancer vault calls to trigger flash swap and flash loan debt repayment via
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Swaps the specified amount
of asset
(per ) for debt
(via )
An internal function that is meant to be called by the that checks if the new implementation is registered by the Factor Vault Manager.
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
If the claimRewardsSupply
(from ) or claimRewardsRepay (from ) selector is specified, the claimed rewards will be swapped for the specified token
and supplied/repaid to the corresponding Tender.fi lending pool.
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
Ensures that only the specified owner
of the contract is able to execute administrative tasks. More info on .
The token which will be collected as fees (i.e. the tokenOut
from ).
Ensures that there are no nested (reentrant calls). More info on .