Function: unstakeForAccount(address _account, address _receiver, uint256 _depositToken, address _amount)
Allows unstaking of tokens on behalf of another account.
Inputs
_accountControl: Fully controlled by the caller (handler).
Constraints: Checked that
_accountcan afford to unstake_amountof_depositToken(viadepositBalances,stakedAmounts, etc.).Impact: The account that will be unstaked for.
_receiverControl: Fully controlled by the caller (handler).
Constraints: None.
Impact: The beneficiary of the deposit tokens resulting from the unstaking.
_depositTokenControl: Fully controlled by the caller (handler).
Constraints: Checked that the token is whitelisted (
isDepositToken).Impact: The token to be unstaked.
_amountControl: Fully controlled by the caller (handler).
Constraints: Checked that the amount is greater than zero. Also, in
safeTransfercall, it is checked that the_accounthas enough balance.Impact: The amount of tokens to be unstaked.
Branches and code coverage (including function calls)
Intended branches
Assumes no malicious intent on behalf of the handler.
Checks that the token is whitelisted (
isDepositToken).Checks that the amount is greater than zero.
Checks that the
_accounthas enough balance (safeTransfer) --- also the check indepositBalances.Decreases the total deposit supply for the
_depositToken.Decreases the
depositBalancesfor the_account.Decreases the
stakedAmountsfor the_account.Decreases the
balancesfor the_account(by burning this contract's tokens).Transfers the
_amountof deposit tokens back to the_account.
Negative behavior
Should not be callable by anyone other than a handler.
Should not allow withdrawing more than the staked amount.
Should not be callable if
isPrivateStakingModeistrue.Assumes user cannot unstake a token that they have not staked. That is handled by the
depositBalancesdecrease.Should not allow unstaking more tokens than the user has staked.