Liquid Staking

Stakelink
DeFiHardhatOracle
50,000 USDC
View results
Submission Details
Severity: low
Invalid

Lack of Incentive to Call `FundFlowController::updateVaultGroups` Risks Wasting Available Claiming Period

Summary

The FundFlowController::updateVaultGroups function is responsible for managing vault group updates and ensuring that vaults move into their claiming periods at the correct time. However, the function relies on users to call it on time, and there is no built-in incentive or "dedicated" protocol-run keeper to ensure timely execution. If the function is not called on time, the available window for the claiming period can be shortened or missed entirely, reducing the protocol's efficiency. Without an incentive or automation, the protocol risks losing optimal performance due to the misalignment of vault unbonding and claiming periods.

Vulnerability Details

When FundFlowController::updateVaultGroups is called, it performs the following key operations:

  1. Re-unbonds all vaults in the current vault group, preparing them to be in their claiming period when the curUnbondedVaultGroup rotates back to it.

  2. Increments curUnbondedVaultGroup to the next vault group in the list.

The function depends on external users to call it at the correct time. If this does not happen, the vault group that should be moved into the claiming period may miss its window, reducing the time available to claim tokens once it is finally set as the curUnbondedVaultGroup.

Here is the relevant portion of the function:

function updateVaultGroups() external {
uint256 curUnbondedGroup = curUnbondedVaultGroup;
uint256 nextUnbondedGroup = _getNextGroup(curUnbondedGroup, numVaultGroups);
// claim period must be concluded for current group
if (
timeOfLastUpdateByGroup[nextUnbondedGroup] != 0 &&
block.timestamp <= timeOfLastUpdateByGroup[curUnbondedGroup] + unbondingPeriod + claimPeriod
) revert NoUpdateNeeded();
// ...
timeOfLastUpdateByGroup[curUnbondedGroup] = uint64(block.timestamp);
curUnbondedVaultGroup = uint64(nextUnbondedGroup);
}

Without timely execution, the function may be delayed, causing the next unbonded vault group to enter its claiming period later than intended. This shortens the window of time for claiming rewards, leading to inefficiencies and missed opportunities for users to interact with the protocol.

There is no protocol-run keeper mechanism for this function or incentive system in place to encourage users to call updateVaultGroups on time. The absence of such mechanisms leads to reliance on user goodwill, which can be unreliable.

Impact

Delays in calling updateVaultGroups can shorten or completely miss the claiming period for vault groups, resulting in missed opportunities for users to claim rewards. This affects the efficiency of the protocol and could lead to reduced user satisfaction and performance issues.

Tools Used

Manual

Recommendations

  1. Implement a Keeper Mechanism: Introduce a protocol-run keeper system to automatically call updateVaultGroups at the correct time, ensuring vault updates are always timely and optimal.

  2. Incentivize Users: Provide users with an incentive (e.g., gas reimbursement or reward tokens) to call the function on time, encouraging timely execution.

Updates

Lead Judging Commences

inallhonesty Lead Judge 10 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.