Function: optIn(ERC20 strategy, FlywheelCore flywheel)
Performs the check that
userGaugeflywheelIdis not already set formsg.senderand corresponds to thestrategyandflywheeladdresses.Performs the check that the
strategyaddress is trusted gauge.Performs the check that the Flywheel contract was actually deployed over the
bribesFactory.Accrues rewards for the
msg.senderon a strategy.Increases the whole amount of
flywheelStrategyGaugeWeight[strategy][flywheel]by the current user balance allocated to the strategy.Adds the
flywheeladdress to the arrayuserGaugeFlywheels[msg.sender][strategy].Adds the index of
flywheelfromuserGaugeFlywheelsto theuserGaugeflywheelId[msg.sender][strategy][flywheel].
Inputs
strategyConstraints: The address should be a trusted gauge.
Impact: For this strategy address, the
boostedTotalSupplyvalue will be increased; further, this value will be used to accumulate global rewards on a strategy.
flywheelConstraints: The contract should be deployed over the
bribesFactory.Impact: The contract that manages token rewards. It distributes reward streams across various
strategiesand distributes them among theusersof these strategies.
Branches and code coverage (including function calls)
Intended branches
The
userGaugeflywheelId!= 0 after the call.The
flywheelStrategyGaugeWeightincremented.
Negative behavior
Double
optInfor the samestrategyandflywheel.The strategy is not a gauge.
The untrusted Flywheel contract.
Function call analysis
flywheel.accrue(strategy, msg.sender)What is controllable?
flywheelandstrategy.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
optInand 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.