Assessment reports>Staking>Threat Model>unstake

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 in depositBalances.

  • 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 is true.

  • 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.

Zellic © 2024Back to top ↑