Function: optOut(ERC20 strategy, FlywheelCore flywheel)
Performs the check that the
strategy
andflywheel
addresses wereoptIn
bymsg.sender
.Accrues rewards for the
msg.sender
on a strategy.Decreases the whole amount of
flywheelStrategyGaugeWeight[strategy][flywheel]
by the current user balance allocated to the strategy.Deletes the
flywheel
address fromuserGaugeFlywheels[msg.sender][strategy]
.Deletes the index of the
flywheel
address fromuserGaugeflywheelId[msg.sender][strategy][flywheel]
.
Inputs
strategy
Constraints: The
userFlywheelId
should not be zero for the providedstrategy
andflywheel
.Impact: The strategy address for which the user will
optOut
, but only after theoptIn
call.
flywheel
Constraints: The
userFlywheelId
should not be zero for the providedstrategy
andflywheel
.Impact: The
flywheel
address for which the user willoptOut
, but only after theoptIn
call.
Branches and code coverage (including function calls)
Intended branches
The
userGaugeflywheelId
== 0 after the call.The
flywheelStrategyGaugeWeight
decremented.
Negative behavior
msg.sender
did notoptIn
before forstrategy
andflywheel
.msg.sender
did notoptIn
before forstrategy
.msg.sender
did notoptIn
before forflywheel
.The case when
length != userFlywheelId
.
Function call analysis
flywheel.accrue(strategy, msg.sender)
What is controllable?
flywheel
andstrategy
.If return value controllable, how is it used and how can it go wrong? N/A.
What happens if it reverts, reenters, or does other unusual control flow? If reverted, the user will not be able to
optIn
and the user’s balance will not be able to take into account total supply.
bHermesGauges(owner()).getUserGaugeWeight(msg.sender, address(strategy))
What is controllable?
strategy
.If return value controllable, how is it used and how can it go wrong? Return the user's allocated weight to that gauge (strategy).
What happens if it reverts, reenters, or does other unusual control flow? No problem --- just view function.