-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Handle
0xImpostor
Vulnerability details
Impact
Small gas optimization if you pass the time delta into _setCurrentAccumulativeIssuancePerStakeStakedSynthSnapshot and _calculateNewCumulativeIssuancePerStakedSynth
Proof of Concept
https://github.com/code-423n4/2021-08-floatcapital/blob/main/contracts/contracts/Staker.sol#L635
// https://github.com/code-423n4/2021-08-floatcapital/blob/main/contracts/contracts/Staker.sol#L635
uint256 **timeDelta** = _calculateTimeDeltaFromLastAccumulativeIssuancePerStakedSynthSnapshot(marketIndex);
if (**timeDelta** > 0) {
_setCurrentAccumulativeIssuancePerStakeStakedSynthSnapshot(
marketIndex,
longPrice,
shortPrice,
longValue,
shortValue,
**timeDelta**
);
}
// https://github.com/code-423n4/2021-08-floatcapital/blob/main/contracts/contracts/Staker.sol#L567
function _setCurrentAccumulativeIssuancePerStakeStakedSynthSnapshot(
uint32 marketIndex,
uint256 longPrice,
uint256 shortPrice,
uint256 longValue,
uint256 shortValue,
uint256 **timeDelta**
) internal virtual {
(
uint256 newLongAccumulativeValue,
uint256 newShortAccumulativeValue
) = _calculateNewCumulativeIssuancePerStakedSynth(marketIndex, longPrice, shortPrice, longValue, shortValue, **timeDelta**);
...
}
// https://github.com/code-423n4/2021-08-floatcapital/blob/main/contracts/contracts/Staker.sol#L531
function _calculateNewCumulativeIssuancePerStakedSynth(
uint32 marketIndex,
uint256 longPrice,
uint256 shortPrice,
uint256 longValue,
uint256 shortValue,
**uint256 timeDelta,**
) internal view virtual returns (uint256 longCumulativeRates, uint256 shortCumulativeRates) {
// Compute the current 'r' value for float issuance per second.
(uint256 longFloatPerSecond, uint256 shortFloatPerSecond) = _calculateFloatPerSecond(
marketIndex,
longPrice,
shortPrice,
longValue,
shortValue
);
...
}Tools Used
manual analysis