Using i++ instead ++i for all the loops, the variable i is incremented using i++. It is known that implementation by using ++i costs less gas per iteration than i++.
Tools Used
Manual Review
Occurances
contracts/contracts/Gauge.sol#L179 for (uint i = 0; i < numRewards; i++) {
contracts/contracts/Gauge.sol#L353 for (uint i = 0; i < tokens.length; i++) {
contracts/contracts/Gauge.sol#L426 for (uint i = _startIndex; i < _endIndex; i++) {
contracts/contracts/Gauge.sol#L448 for (uint i; i < length; i++) {
contracts/contracts/Gauge.sol#L484 for (uint i = _startIndex; i < _endIndex; i++) {
contracts/contracts/Minter.sol#L57 for (uint i = 0; i < claimants.length; i++) {
contracts/contracts/Pair.sol#L257 for (uint i = 0; i < _prices.length; i++) {
contracts/contracts/Pair.sol#L389 for (uint i = 0; i < 255; i++) {
contracts/contracts/RewardsDistributor.sol#L75 for (uint i = 0; i < 20; i++) {
contracts/contracts/RewardsDistributor.sol#L105 for (uint i = 0; i < 128; i++) {
contracts/contracts/RewardsDistributor.sol#L121 for (uint i = 0; i < 128; i++) {
contracts/contracts/RewardsDistributor.sol#L148 for (uint i = 0; i < 20; i++) {
contracts/contracts/RewardsDistributor.sol#L195 for (uint i = 0; i < 50; i++) {
contracts/contracts/RewardsDistributor.sol#L252 for (uint i = 0; i < 50; i++) {
contracts/contracts/RewardsDistributor.sol#L301 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/Router.sol#L90 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/Router.sol#L316 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/VelodromeLibrary.sol#L24 for (uint i = 0; i < 255; i++) {
contracts/contracts/Voter.sol#L76 for (uint i = 0; i < _tokens.length; i++) {
contracts/contracts/Voter.sol#L143 for (uint i = 0; i < _poolCnt; i++) {
contracts/contracts/Voter.sol#L147 for (uint i = 0; i < _poolCnt; i++) {
contracts/contracts/Voter.sol#L266 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L272 for (uint i = start; i < end; i++) {
contracts/contracts/Voter.sol#L304 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L310 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/VotingEscrow.sol#L1146 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1193 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1225 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1249 for (uint i = 0; i < dstRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1295 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1320 for (uint i = 0; i < dstRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1325 for (uint i = 0; i < ownerTokenCount; i++) {
Title : change uint256 i = 0 into uint256 i for saving more gas
using this implementation can saving more gas for each loops.
Tool Used
Manual Review
Recommended Mitigation
Change it
Occurances
contracts/contracts/Gauge.sol#L179 for (uint i = 0; i < numRewards; i++) {
contracts/contracts/Gauge.sol#L353 for (uint i = 0; i < tokens.length; i++) {
contracts/contracts/Minter.sol#L57 for (uint i = 0; i < claimants.length; i++) {
contracts/contracts/Pair.sol#L257 for (uint i = 0; i < _prices.length; i++) {
contracts/contracts/Pair.sol#L389 for (uint i = 0; i < 255; i++) {
contracts/contracts/RewardsDistributor.sol#L75 for (uint i = 0; i < 20; i++) {
contracts/contracts/RewardsDistributor.sol#L105 for (uint i = 0; i < 128; i++) {
contracts/contracts/RewardsDistributor.sol#L121 for (uint i = 0; i < 128; i++) {
contracts/contracts/RewardsDistributor.sol#L148 for (uint i = 0; i < 20; i++) {
contracts/contracts/RewardsDistributor.sol#L195 for (uint i = 0; i < 50; i++) {
contracts/contracts/RewardsDistributor.sol#L252 for (uint i = 0; i < 50; i++) {
contracts/contracts/RewardsDistributor.sol#L301 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/Router.sol#L90 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/Router.sol#L316 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/VelodromeLibrary.sol#L24 for (uint i = 0; i < 255; i++) {
contracts/contracts/Voter.sol#L76 for (uint i = 0; i < _tokens.length; i++) {
contracts/contracts/Voter.sol#L143 for (uint i = 0; i < _poolCnt; i++) {
contracts/contracts/Voter.sol#L147 for (uint i = 0; i < _poolCnt; i++) {
contracts/contracts/Voter.sol#L266 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L304 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L310 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/VotingEscrow.sol#L632 for (uint i = 0; i < 255; ++i) {
contracts/contracts/VotingEscrow.sol#L1146 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1193 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1225 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1249 for (uint i = 0; i < dstRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1295 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1320 for (uint i = 0; i < dstRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1325 for (uint i = 0; i < ownerTokenCount; i++) {
Title : Caching array length can saving more gas
This implementation can be saving more gas, since if caching the array length is more gas efficient.
just because access to a local variable in solidity is more efficient.
Tool Used
Manual Review
Occurances
contracts/contracts/Gauge.sol#L353 for (uint i = 0; i < tokens.length; i++) {
contracts/contracts/Minter.sol#L57 for (uint i = 0; i < claimants.length; i++) {
contracts/contracts/Pair.sol#L257 for (uint i = 0; i < _prices.length; i++) {
contracts/contracts/Pair.sol#L389 for (uint i = 0; i < 255; i++) {
contracts/contracts/RewardsDistributor.sol#L301 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/Router.sol#L90 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/Router.sol#L316 for (uint i = 0; i < routes.length; i++) {
contracts/contracts/Voter.sol#L76 for (uint i = 0; i < _tokens.length; i++) {
contracts/contracts/Voter.sol#L266 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L304 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/Voter.sol#L310 for (uint i = 0; i < _gauges.length; i++) {
contracts/contracts/VotingEscrow.sol#L1146 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1193 for (uint i = 0; i < _tokenIds.length; i++) {
contracts/contracts/VotingEscrow.sol#L1225 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1249 for (uint i = 0; i < dstRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1295 for (uint i = 0; i < srcRepOld.length; i++) {
contracts/contracts/VotingEscrow.sol#L1320 for (uint i = 0; i < dstRepOld.length; i++) {
++i
thani++
for saving more gasUsing
i++
instead++i
for all the loops, the variable i is incremented using i++. It is known that implementation by using++i
costs less gas per iteration thani++
.Tools Used
Manual Review
Occurances
uint256 i = 0
intouint256 i
for saving more gasusing this implementation can saving more gas for each loops.
Tool Used
Manual Review
Recommended Mitigation
Change it
Occurances
This implementation can be saving more gas, since if caching the array length is more gas efficient. just because access to a local variable in solidity is more efficient.
Tool Used
Manual Review
Occurances
1.) File : contracts/contracts/Pair.sol (Line.282)
changed to :
2.) File : contracts/contracts/VotingEscrow.sol (Line.453)
changed to :
1.) File : contracts/contracts/Gauge.sol (Line.512)
2.) File : contracts/contracts/Gauge.sol (Line.512)
3.) File : contracts/contracts/Gauge.sol (Line.592)
4.) File : contracts/contracts/Gauge.sol (Line.613)