You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
main/contracts/Booster.sol#L329 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L176 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L199 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L218 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L244 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/VE3DRewardPool.sol#L148 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VE3DRewardPool.sol#L214 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L238 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L257 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L281 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VE3DRewardPool.sol#L326 for (uint256 i = 0; i < length; i++) {
main/contracts/VoterProxy.sol#L217 for (uint256 i = 0; i < _tokenVote.length; 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
main/contracts/Booster.sol#L329 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L176 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L199 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L218 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L244 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/VE3DRewardPool.sol#L148 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VE3DRewardPool.sol#L214 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L238 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L257 for (uint256 i = 0; i < length; i++) {
main/contracts/VE3DRewardPool.sol#L281 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VE3DRewardPool.sol#L326 for (uint256 i = 0; i < length; i++) {
main/contracts/VoterProxy.sol#L217 for (uint256 i = 0; i < _tokenVote.length; 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
main/contracts/Booster.sol#L329 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < poolInfo.length; i++) {
main/contracts/BaseRewardPool.sol#L176 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L199 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L218 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L244 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/BaseRewardPool.sol#L282 for (uint256 i = 0; i < extraRewards.length; i++) {
main/contracts/VE3DRewardPool.sol#L148 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VE3DRewardPool.sol#L281 for (uint256 i = 0; i < rewardTokens.length(); i++) {
main/contracts/VoterProxy.sol#L217 for (uint256 i = 0; i < _tokenVote.length; i++) {
Title : Using > 0 costs more gas than != 0 when used on uints in a require() statement
This implementation code can be saving more gas by removing = 0, it because If a variable was not set/initialized, it is assumed to have default value to 0
Tool Used
Manual Review
Mitigation Step
Remove = 0
Occurances
main/contracts/BaseRewardPool.sol#L274 rewards[_account] = 0;
main/contracts/VeAssetDepositor.sol#L28 uint256 public incentiveVeAsset = 0;
main/contracts/VeAssetDepositor.sol#L119 incentiveVeAsset = 0;
main/contracts/VeAssetDepositor.sol#L141 incentiveVeAsset = 0;
main/contracts/BaseRewardPool.sol#L66 uint256 public periodFinish = 0;
main/contracts/BaseRewardPool.sol#L67 uint256 public rewardRate = 0;
main/contracts/BaseRewardPool.sol#L70 uint256 public queuedRewards = 0;
main/contracts/BaseRewardPool.sol#L71 uint256 public currentRewards = 0;
main/contracts/BaseRewardPool.sol#L72 uint256 public historicalRewards = 0;
main/contracts/VE3DRewardPool.sol#L361 rewardTokenInfo[_rewardToken].queuedRewards = 0;
GAS OPT
++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/VeAssetDepositor.sol (Line.132)
2.) FIle : contracts/BaseRewardPool.sol (Line.215)
3.) File : contracts/BaseRewardPool.sol (Line.173)
4.) File : contracts/BaseRewardPool.sol (Line.196)
5.) contracts/BaseRewardPool.sol (Line.215)
6.) File : contracts/VE3DRewardPool.sol (Line.210)
7.) File : contracts/VE3DRewardPool.sol (Line.234)
8.) File : contracts/VE3DRewardPool.sol (Line.254)
= 0
This implementation code can be saving more gas by removing = 0, it because If a variable was not set/initialized, it is assumed to have default value to 0
Tool Used
Manual Review
Mitigation Step
Remove
= 0
Occurances
This can be set as immutable for saving more gas
Tool Used
Remix
Recommended Mitigation
add
immutable
Occurances
1.) File : contracts/VeTokenMinter.sol (Line.16)
2.) File : contracts/VoterProxy.sol (Line.31)
3.) File : contracts/BaseRewardPool.sol (Lines.55-56)
4.) File : contracts/BaseRewardPool.sol (Lines.62-63)
addExtraReward
for saving more gashttps://github.com/code-423n4/2022-05-vetoken/blob/main/contracts/BaseRewardPool.sol#L121-L129
this implementation below can be saving +- 200 gas
Tool Used
Manual Review, Remix
Recommended Mitigation
1.) File : contracts/BaseRewardPool.sol (Line.196)
2.) File : contracts/Booster.sol (Line.434)
3.) File : contracts/VeTokenMinter.sol (Line.32)
4.) File : contracts/VeTokenMinter.sol (Line.36)
calldata
instead ofmemory
1.) File : contracts/VoterProxy.sol (Line.199)
The text was updated successfully, but these errors were encountered: