Platform: Code4rena
Start Date: 20/09/2022
Pot Size: $30,000 USDC
Total HM: 12
Participants: 198
Period: 3 days
Judge: 0xean
Total Solo HM: 2
Id: 164
League: ETH
Rank: 173/198
Findings: 1
Award: $9.09
π Selected for report: 0
π Solo Findings: 0
π Selected for report: IllIllI
Also found by: 0v3rf10w, 0x040, 0x1f8b, 0x4non, 0x85102, 0xA5DF, 0xDanielC, 0xNazgul, 0xSmartContract, 0xbepresent, 0xc0ffEE, 0xsam, 2997ms, AkshaySrivastav, Amithuddar, Atarpara, Aymen0909, B2, Bnke0x0, CertoraInc, Chom, ChristianKuri, CodingNameKiki, Deivitto, Diana, DimitarDimitrov, Diraco, Funen, JC, JLevick, JohnSmith, Junnon, KIntern_NA, Lambda, MasterCookie, Matin, Noah3o6, Ocean_Sky, OptimismSec, RaymondFam, Respx, ReyAdmirado, RockingMiles, Rohan16, Rolezn, Ruhum, Saintcode_, Satyam_Sharma, Sm4rty, SnowMan, SooYa, Sta1400, StevenL, Tadashi, Tagir2003, TomJ, Tomio, Tomo, V_B, Waze, WilliamAmbrozic, Yiko, __141345__, a12jmx, adriro, ajtra, ak1, async, aysha, beardofginger, bobirichman, brgltd, bulej93, c3phas, carrotsmuggler, caventa, ch0bu, cryptostellar5, cryptphi, csanuragjain, d3e4, delfin454000, dharma09, djxploit, durianSausage, eighty, emrekocak, erictee, exd0tpy, fatherOfBlocks, francoHacker, gianganhnguyen, gogo, got_targ, hxzy, ignacio, ikbkln, imare, indijanc, jag, jpserrat, karanctf, ladboy233, leosathya, lucacez, lukris02, m9800, malinariy, martin, medikko, mics, millersplanet, mrpathfindr, nalus, natzuu, neko_nyaa, oyc_109, pauliax, peanuts, pedroais, peiw, pfapostol, prasantgupta52, rbserver, ret2basic, rokinot, rotcivegaf, rvierdiiev, sach1r0, samruna, seyni, slowmoses, subtle77, supernova, tgolding55, tibthecat, tnevler, w0Lfrum, yaemsobak, zishansami
9.086 USDC - $9.09
Uninitialized variables are assigned with the types default value. Explicitly initializing a variable with it's default value costs unnecesary gas.
There are 2 instances of this issue:
File: contracts\VTVLVesting.sol uint112 vestAmt = 0;
File: contracts\VTVLVesting.sol for (uint256 i = 0; i < length; i++) {
!= 0 costs less gas compared to > 0 for unsigned integers in require statements with the optimizer enabled (6 gas). For uints the minimum value would be 0 and never a negative value. Since it cannot be a negative value, then the check > 0 is essentially checking that the value is not equal to 0 therefore >0 can be replaced with !=0 which saves gas.
Proof: While it may seem that > 0 is cheaper than !=, this is only true without the optimizer enabled and outside a require statement. If you enable the optimizer at 10k AND youβre in a require statement, this will save gas. You can see this tweet for more proofs: https://twitter.com/gzeon/status/1485428085885640706
I suggest changing > 0 with != 0 here:
File: VTVLVesting.sol Line 107
require(_claim.startTimestamp > 0, "NO_ACTIVE_CLAIM");
File: VTVLVesting.sol Line 256
require(_linearVestAmount + _cliffAmount > 0, "INVALID_VESTED_AMOUNT");
File: VTVLVesting.sol Line 257
require(_startTimestamp > 0, "INVALID_START_TIMESTAMP");
File: VTVLVesting.sol Line 263
require(_releaseIntervalSecs > 0, "INVALID_RELEASE_INTERVAL");
File: VTVLVesting.sol Lines 272-273
_cliffReleaseTimestamp > 0 && _cliffAmount > 0 &&
File: VTVLVesting.sol Line 449
require(bal > 0, "INSUFFICIENT_BALANCE");
File: token\FullPremintERC20Token.sol Line 11
require(supply_ > 0, "NO_ZERO_MINT");
File: token\VariableSupplyERC20Token.sol Line 27
require(initialSupply_ > 0 || maxSupply_ > 0, "INVALID_AMOUNT");
File: token\VariableSupplyERC20Token.sol Line 31
if(initialSupply_ > 0) {
File: token\VariableSupplyERC20Token.sol Line 40
if(mintableSupply > 0) {