Function: unstake(address _depositToken, uint256 _amount)
Allows unstaking of tokens.
Inputs
_depositToken
Control: The
_depositToken
is controlled by the caller.Constraints: Checked that the token is whitelisted (
isDepositToken
).Impact: The token to be unstaked.
_amount
Control: The
_amount
is controlled by the caller.Constraints: Checked that the amount is greater than zero. Also, in
safeTransfer
call, it is checked that the_account
has enough balance.Impact: The amount of tokens to be unstaked.
Branches and code coverage (including function calls)
Intended branches
Checks that the token is whitelisted (
isDepositToken
).Checks that the amount is greater than zero.
Checks that the
_account
has enough balance (safeTransfer
) --- also the check indepositBalances
.Decreases the total deposit supply for the
_depositToken
.Decreases the
depositBalances
for the_account
.Decreases the
stakedAmounts
for the_account
.Decreases the
balances
for the_account
(by burning this contract's tokens).Transfers the
_amount
of deposit tokens back to the_account
.
Negative behavior
Should not allow withdrawing more than the staked amount.
Should not be callable if
isPrivateStakingMode
istrue
.Assumes user cannot unstake a token that they have not staked. That is handled by the
depositBalances
decrease.Should not allow unstaking more tokens than the user has staked.