Skip to content

Latest commit

ย 

History

History
819 lines (682 loc) ยท 73.2 KB

2023_09_18_convergence_finance_gas_report.md

File metadata and controls

819 lines (682 loc) ยท 73.2 KB

Convergence Finance Security Review

This security review provides a detailed compilation of all identified vulnerabilities and recommendations I submitted as part of the Convergence Finance competition on Hats in September 2023.

No. Issue Instances
[G-01] Make constructors payable 3
[G-02] Admin functions can be payable 12
[G-03] Write gas-optimal for-loops 1
[G-04] Pre-increment cost less gas than post-increment 1
[G-05] Cache storage variables 1
[G-06] Constants can be private 3
[G-07] Use Solidity 0.8.19 or higher to save gas 4
[G-08] Consider choosing a very large value for the optimizer 1
[G-09] Split require statements 1

[G-01] Make constructors payable

Instances

  1. CvgOracle.sol#L42-L45
  2. Ibo.sol#L98-L112
  3. VestingCvg.sol#L81-L91

Issue

None of the constructors is payable.

However, making a constructor payable can save over 200 gas on deployment. This is because non-payable functions have an implicit require(msg.value == 0) inserted in them. Additionally, fewer bytecode at deploy time means less gas cost due to smaller calldata.

There are good reasons to make regular functions non-payable, but generally, a contract is deployed by a privileged address that you can reasonably assume wonโ€™t send ether. This might not apply if inexperienced users are deploying the contract.

Recommendation

Assuming that experienced users are deploying the contracts, I'd suggest making the constructors payable as follows:

CvgOracle.sol#L42

- constructor(address treasuryDao) { 
+ constructor(address treasuryDao) payable {

Ibo.sol#L104

- ) ERC721("IBO Cvg", "cvgIBO") {
+ ) ERC721("IBO Cvg", "cvgIBO") payable {

VestingCvg.sol#L86

- ) {
+ ) payable {

Implementing these changes will save a total of 664 gas during deployment.

diff --git a/gasReporting.md b/gasReporting.md
index a4051d4..612bb4b 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -91,11 +91,11 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgControlTower                                      ยท          -  ยท          -  ยท     859604  ยท        2.9 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgOracle                                            ยท          -  ยท          -  ยท    1905972  ยท        6.4 %  ยท          -  โ”‚
+|  CvgOracle                                            ยท          -  ยท          -  ยท    1905748  ยท        6.4 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgV3Aggregator                                      ยท          -  ยท          -  ยท     622164  ยท        2.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                                                  ยท          -  ยท          -  ยท    3102182  ยท       10.3 %  ยท          -  โ”‚
+|  Ibo                                                  ยท          -  ยท          -  ยท    3101968  ยท       10.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  mock_CloneFactoryV2                                  ยท          -  ยท          -  ยท     535562  ยท        1.8 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     670490  ยท     725531  ยท     698015  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1852678  ยท        6.2 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1852452  ยท        6.2 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2977045  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

[G-02] Admin functions can be payable

Instances

  1. CvgOracle.sol#L323-L328
  2. CvgOracle.sol#L334-L336
  3. Ibo.sol#L119-L121
  4. Ibo.sol#L128-L131
  5. VestingCvg.sol#L115-L117
  6. VestingCvg.sol#L119-L121
  7. VestingCvg.sol#L123-L125
  8. VestingCvg.sol#L127-L129
  9. VestingCvg.sol#L131-L133
  10. VestingCvg.sol#L171-L214
  11. VestingCvg.sol#L220-L227
  12. VestingCvg.sol#L402-L407

Issue

None of the admin functions is payable.

However, making admin functions payable can save gas because it skips checking the callvalue.

There are good reasons to make regular functions non-payable, but generally, the admin functions of a contract are only callable by an address that you can reasonably assume wonโ€™t send ether. This might not apply if inexperienced users are making these calls.

Recommendation

As we can see from the Hardhat gas reporter, making this change will optimize the cost of runtime code but increase the deployment costs significantly.

diff --git a/gasReporting.md b/gasReporting.md
index 40846af..2d98def 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -23,15 +23,15 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgControlTower      ยท  setOracle                    ยท          -  ยท          -  ยท      53467  ยท            2  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgOracle            ยท  setCvgToken                  ยท          -  ยท          -  ยท      46095  ยท            1  ยท          -  โ”‚
+|  CvgOracle            ยท  setCvgToken                  ยท          -  ยท          -  ยท      46071  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgOracle            ยท  setTokenOracleParams         ยท      71411  ยท      71675  ยท      71540  ยท           31  ยท          -  โ”‚
+|  CvgOracle            ยท  setTokenOracleParams         ยท      71387  ยท      71651  ยท      71516  ยท           31  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59525  ยท           22  ยท          -  โ”‚
+|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59526  ยท           22  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  ERC20                ยท  approve                      ยท      26558  ยท      46700  ยท      44526  ยท          119  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                  ยท  createBond                   ยท          -  ยท          -  ยท      98410  ยท            7  ยท          -  โ”‚
+|  Ibo                  ยท  createBond                   ยท          -  ยท          -  ยท      98386  ยท            7  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  Ibo                  ยท  deposit                      ยท     112237  ยท     320062  ยท     240553  ยท           23  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -41,7 +41,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  SeedPresaleCvg       ยท  setSaleState                 ยท          -  ยท          -  ยท      28801  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  createVestingSchedule        ยท     155747  ยท     190007  ยท     169458  ยท           10  ยท          -  โ”‚
+|  VestingCvg           ยท  createVestingSchedule        ยท     155723  ยท     189983  ยท     169434  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseIbo                   ยท      71280  ยท     123640  ยท      84900  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -51,19 +51,19 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseWl                    ยท      75787  ยท     128147  ยท      88499  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  revokeVestingSchedule        ยท          -  ยท          -  ยท      38463  ยท            2  ยท          -  โ”‚
+|  VestingCvg           ยท  revokeVestingSchedule        ยท          -  ยท          -  ยท      38439  ยท            2  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setCvg                       ยท          -  ยท          -  ยท      46172  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setCvg                       ยท          -  ยท          -  ยท      46148  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setPresale                   ยท          -  ยท          -  ยท      29094  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setPresale                   ยท          -  ยท          -  ยท      29070  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setPresaleSeed               ยท          -  ยท          -  ยท      29016  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setPresaleSeed               ยท          -  ยท          -  ยท      28992  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setWhitelistDao              ยท          -  ยท          -  ยท      46149  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setWhitelistDao              ยท          -  ยท          -  ยท      46125  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setWhitelistTeam             ยท          -  ยท          -  ยท      46128  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setWhitelistTeam             ยท          -  ยท          -  ยท      46104  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  withdrawOnlyExcess           ยท          -  ยท          -  ยท      61943  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  withdrawOnlyExcess           ยท          -  ยท          -  ยท      61919  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg         ยท  investMint                   ยท     295021  ยท     317287  ยท     307430  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -91,11 +91,11 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgControlTower                                      ยท          -  ยท          -  ยท     859604  ยท        2.9 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgOracle                                            ยท          -  ยท          -  ยท    1905520  ยท        6.4 %  ยท          -  โ”‚
+|  CvgOracle                                            ยท          -  ยท          -  ยท    1947502  ยท        6.5 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgV3Aggregator                                      ยท          -  ยท          -  ยท     620882  ยท        2.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                                                  ยท    3041083  ยท    3041095  ยท    3041089  ยท       10.1 %  ยท          -  โ”‚
+|  Ibo                                                  ยท    3133486  ยท    3133498  ยท    3133492  ยท       10.4 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  mock_CloneFactoryV2                                  ยท          -  ยท          -  ยท     535562  ยท        1.8 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     665377  ยท     720406  ยท     692890  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1822493  ยท        6.1 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1898072  ยท        6.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2976839  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

For this reason, I would recommend implementing this change only if deployment costs are not a priority and you would rather have optimized runtime code.

Assuming that experienced users are calling the admin functions and that you want to make your admin functions payable regardless of the increased deployment costs, here is how this change would be implemented:

CvgOracle.sol#L326

- ) external onlyOwner {
+ ) external payable onlyOwner {

CvgOracle.sol#L334

- function setCvgToken(IERC20Metadata _cvg) external onlyOwner {
+ function setCvgToken(IERC20Metadata _cvg) external payable onlyOwner {

Ibo.sol#L119

- function createBond(BondParams calldata bondParams) external onlyOwner {
+ function createBond(BondParams calldata bondParams) external payable onlyOwner {

Ibo.sol#L128

- function setComposedFunction(uint256 bondId, uint8 newComposedFunction) external onlyOwner {
+ function setComposedFunction(uint256 bondId, uint8 newComposedFunction) external payable onlyOwner {

VestingCvg.sol#L115

- function setCvg(IERC20 _cvg) external onlyOwner {
+ function setCvg(IERC20 _cvg) external payable onlyOwner {

VestingCvg.sol#L119

- function setPresale(IPresaleCvgWl _newPresaleWl) external onlyOwner {
+ function setPresale(IPresaleCvgWl _newPresaleWl) external payable onlyOwner {

VestingCvg.sol#L123

- function setPresaleSeed(IPresaleCvgSeed _newPresaleSeed) external onlyOwner {
+ function setPresaleSeed(IPresaleCvgSeed _newPresaleSeed) external payable onlyOwner {

VestingCvg.sol#L127

- function setWhitelistTeam(address newWhitelistedTeam) external onlyOwner {
+ function setWhitelistTeam(address newWhitelistedTeam) external payable onlyOwner {

VestingCvg.sol#L131

- function setWhitelistDao(address newWhitelistedDao) external onlyOwner {
+ function setWhitelistDao(address newWhitelistedDao) external payable onlyOwner {

VestingCvg.sol#L178

- ) external onlyOwner {
+ ) external payable onlyOwner {

VestingCvg.sol#L220

- function revokeVestingSchedule(uint256 _vestingScheduleId) external onlyOwner {
+ function revokeVestingSchedule(uint256 _vestingScheduleId) external payable onlyOwner {

VestingCvg.sol#L402

- function withdrawOnlyExcess(uint256 _amount) external onlyOwner {
+ function withdrawOnlyExcess(uint256 _amount) external payable onlyOwner {

[G-03] Write gas-optimal for-loops

Instances

  1. Ibo.sol#L313-L315

Issue

The for-loop mentioned above is not written in a gas-optimal way.

More specifically, it uses post-increment instead of pre-increment and implicitly checks the increment for a potential overflow although an overflow isn't possible.

Recommendation

A gas-optimal for-loop looks like this:

for (uint256 i; i < limit; ) {
    
    // inside the loop
    
    unchecked {
        ++i;
    }
}

The two differences here from a conventional for loop are that i++ becomes ++i, and that the loop variable's increment is unchecked because the limit variable ensures it wonโ€™t overflow. First, ++i and i++ are equivalent operations in the for-loop's logic, but ++i is more gas-efficient than i++. Second, placing the increment inside unchecked will skip the superfluous check for an arithmetic overflow.

In conclusion, one can implement the following changes to save gas:

Ibo.sol#L313-L315

- for (uint256 i = 0; i < range; i++) {
-     tokenIds[i] = tokenOfOwnerByIndex(_wallet, i);
- }
+ for (uint256 i; i < range; ) {
+     tokenIds[i] = tokenOfOwnerByIndex(_wallet, i);
+
+     unchecked {
+         ++i;
+     } 
+ } 

Implementing these changes and running the Hardhat gas reporter, one finds that the optimized loop saves 2160 gas.

diff --git a/gasReporting.md b/gasReporting.md
index af0346b..42c8232 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -95,7 +95,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgV3Aggregator                                      ยท          -  ยท          -  ยท     622164  ยท        2.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                                                  ยท    3101956  ยท    3101968  ยท    3101962  ยท       10.3 %  ยท          -  โ”‚
+|  Ibo                                                  ยท    3099796  ยท    3099808  ยท    3099802  ยท       10.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  mock_CloneFactoryV2                                  ยท          -  ยท          -  ยท     535562  ยท        1.8 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท

[G-04] Pre-increment cost less gas than post-increment

Instances

  1. VestingCvg.sol#L213

Issue

A post-increment (i++) is more expensive in terms of gas than a pre-increment (++i). The reason is that i++ increments the value of i but returns the original value. This means the EVM needs to temporarily store the original value before incrementing i. In the case of ++i, however, the EVM can increment the value of i right away and simply return the incremented value; no need for temporary storage.

So, roughly speaking, the EVM will operate as follows:

i++:

  1. Store the current value of i temporarily.
  2. Increment i.
  3. Return the stored (original) value.

++i:

  1. Increment i.
  2. Return the new value of i.

In particular, this means that pre- and post-increment are generally not equivalent operations. For example, doing

i = 0;
array[i++];

will increment i by 1 but access the array at index 0. On the contrary, using array[++i] will increment i by 1, too, but access the array at index 1.

So, depending on the context, one cannot always replace i++ with ++i to save gas without changing the contract's logic.

Let me emphasize that the codebase provided for this audit contains two instances of post-increment, which should not be changed to pre-increment because this would change the logic due to the different return values. These instances are:

Ibo.sol#L120

Ibo.sol#L169

Recommendation

There are two instances where the post-increment is used to increment a number but, at the same time, the post-increment's return value isn't used in the contract's logic. The first instance is the for-loop variable, which I already described in detail in another finding. The second instance can be found in VestingCvg.sol. Therefore, I recommend adjusting the code as follows:

VestingCvg.sol#L213

- nextVestingScheduleId++;
+ ++nextVestingScheduleId;

According to the Hardhat gas reporter, implementing this change will save 14 gas with each function call to createVestingSchedule and 1068 gas during deployment:

diff --git a/gasReporting.md b/gasReporting.md
index 42c8232..e0275b6 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -41,7 +41,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  SeedPresaleCvg       ยท  setSaleState                 ยท          -  ยท          -  ยท      28801  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  createVestingSchedule        ยท     156058  ยท     190318  ยท     169769  ยท           10  ยท          -  โ”‚
+|  VestingCvg           ยท  createVestingSchedule        ยท     156044  ยท     190304  ยท     169755  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseIbo                   ยท      71258  ยท     123618  ยท      84878  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     670502  ยท     725531  ยท     698015  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1852452  ยท        6.2 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1851384  ยท        6.2 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2977045  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

[G-05] Cache storage variables

Instances

  1. VestingCvg.sol#L171-L214

Issue

Reading from a storage variable costs at least 100 gas as Solidity does not cache the storage read. Writes are considerably more expensive. Therefore, you should manually cache the variable and, ideally, only do exactly one storage read and exactly one storage write.

In the above-mentioned instance, a storage variable isn't cached but instead read from contract storage multiple times within the same function.

Recommendation

Work with the cached value instead of reading from storage multiple times:

VestingCvg.sol#L201-L213

- vestingSchedules[nextVestingScheduleId] = VestingSchedule({
-    revoked: false,
-    totalAmount: _totalAmount,
-    totalReleased: 0,
-    startTimestamp: _startTimestamp,
-    daysBeforeCliff: _daysBeforeCliff,
-    daysAfterCliff: _daysAfterCliff,
-    vestingType: _vestingType,
-    dropCliff: _dropCliff
- });
-  
- vestingIdForType[_vestingType] = nextVestingScheduleId;
- nextVestingScheduleId++;
+ vestingSchedules[vestingScheduleId] = VestingSchedule({
+    revoked: false,
+    totalAmount: _totalAmount,
+    totalReleased: 0,
+    startTimestamp: _startTimestamp,
+    daysBeforeCliff: _daysBeforeCliff,
+    daysAfterCliff: _daysAfterCliff,
+    vestingType: _vestingType,
+    dropCliff: _dropCliff
+ });
+  
+ vestingIdForType[_vestingType] = vestingScheduleId;
+ nextVestingScheduleId = vestingScheduleId + 1;

Notice that, should you decide to implement the above change, this will get rid of any pre-/post-increment operation that was either kept or implemented due to my recommendation regarding pre-/post-increments.

According to the Hardhat gas reporter, implementing these changes will save 297 gas per function call and a total of 6897 gas during deployment.

diff --git a/gasReporting.md b/gasReporting.md
index e0275b6..5b82305 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -27,7 +27,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgOracle            ยท  setTokenOracleParams         ยท      71411  ยท      71675  ยท      71540  ยท           31  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59526  ยท           22  ยท          -  โ”‚
+|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59525  ยท           22  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  ERC20                ยท  approve                      ยท      26558  ยท      46700  ยท      44526  ยท          119  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -41,7 +41,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  SeedPresaleCvg       ยท  setSaleState                 ยท          -  ยท          -  ยท      28801  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  createVestingSchedule        ยท     156044  ยท     190304  ยท     169755  ยท           10  ยท          -  โ”‚
+|  VestingCvg           ยท  createVestingSchedule        ยท     155747  ยท     190007  ยท     169458  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseIbo                   ยท      71258  ยท     123618  ยท      84878  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     670502  ยท     725531  ยท     698015  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1851384  ยท        6.2 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1844487  ยท        6.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2977045  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

[G-06] Constants can be private

Instances

  1. BondCalculator.sol#L19
  2. Ibo.sol#L65-L80
  3. VestingCvg.sol#L62-L72

Issue

Some constants could be private but aren't.

Marking constants as private saves gas upon deployment, as the compiler does not have to create getter functions for these variables. It is worth noting that a private variable can still be read using either the verified contract source code or the bytecode. For immutable variables written via constructor parameters, you can also look the contract deployment transaction.

Recommendation

Change the visibility modifier of the following constants to private:

BondCalculator.sol#L19

- uint256 public constant TEN_POWER_6 = 10 ** 6;
+ uint256 private constant TEN_POWER_6 = 10 ** 6;

Ibo.sol#L65-L80

- address public immutable treasuryBonds;
- 
- /// @dev bond ROI calculator
- IBondCalculator public immutable bondCalculator;
-
- /// @dev oracle fetching prices in LP
- ICvgOracle public immutable cvgOracle;
-
- uint256 public immutable iboStartTimestamp;
-
- /// @dev 0.33$
- uint256 public constant CVG_PRICE_NO_ROI = 33 * 10 ** 16;
- uint256 public constant IBO_DURATION = 6 hours;
- 
- uint256 public constant MAX_CVG_PEPE_PRIVILEGE = 15_000 * 10 ** 18;
- uint256 public constant MAX_CVG_WL_PRIVILEGE = 7_500 * 10 ** 18;
+ address private immutable treasuryBonds;
+ 
+ /// @dev bond ROI calculator
+ IBondCalculator private immutable bondCalculator;
+
+ /// @dev oracle fetching prices in LP
+ ICvgOracle private immutable cvgOracle;
+
+ uint256 private immutable iboStartTimestamp;
+
+ /// @dev 0.33$
+ uint256 public constant CVG_PRICE_NO_ROI = 33 * 10 ** 16;
+ uint256 private constant IBO_DURATION = 6 hours;
+ 
+ uint256 private constant MAX_CVG_PEPE_PRIVILEGE = 15_000 * 10 ** 18;
+ uint256 private constant MAX_CVG_WL_PRIVILEGE = 7_500 * 10 ** 18;

Notice that the above CVG_PRICE_NO_ROI has been left public because its implicit getter function is directly accessed in one of the tests.

VestingCvg.sol#L62-L72

- uint256 public constant MAX_SUPPLY_TEAM = 12_750_000 * 10 ** 18;
- uint256 public constant MAX_SUPPLY_DAO = 15_000_000 * 10 ** 18;
-
- uint256 public constant ONE_DAY = 1 days;
-
- uint256 public constant ONE_GWEI = 10 ** 9;
+ uint256 private constant MAX_SUPPLY_TEAM = 12_750_000 * 10 ** 18;
+ uint256 private constant MAX_SUPPLY_DAO = 15_000_000 * 10 ** 18;
+
+ uint256 private constant ONE_DAY = 1 days;
+
+ uint256 private constant ONE_GWEI = 10 ** 9;

From the output of the Hardhat gas reporter, we can see that the function calls are 88 gas more expensive (on average, and assuming all functions are called equally often). However, one saves a total of 84869 gas during deployment.

diff --git a/gasReporting.md b/gasReporting.md
index 46c6f97..ca87ff6 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -31,7 +31,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  ERC20                ยท  approve                      ยท      26558  ยท      46700  ยท      44526  ยท          119  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                  ยท  createBond                   ยท          -  ยท          -  ยท      98432  ยท            7  ยท          -  โ”‚
+|  Ibo                  ยท  createBond                   ยท          -  ยท          -  ยท      98410  ยท            7  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  Ibo                  ยท  deposit                      ยท     112237  ยท     320062  ยท     240553  ยท           23  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -43,7 +43,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  createVestingSchedule        ยท     155747  ยท     190007  ยท     169458  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  releaseIbo                   ยท      71258  ยท     123618  ยท      84878  ยท            4  ยท          -  โ”‚
+|  VestingCvg           ยท  releaseIbo                   ยท      71280  ยท     123640  ยท      84900  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseSeed                  ยท      73648  ยท     126008  ยท      91384  ยท            5  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -53,17 +53,17 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  revokeVestingSchedule        ยท          -  ยท          -  ยท      38463  ยท            2  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setCvg                       ยท          -  ยท          -  ยท      46194  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setCvg                       ยท          -  ยท          -  ยท      46172  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setPresale                   ยท          -  ยท          -  ยท      29006  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setPresale                   ยท          -  ยท          -  ยท      29094  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setPresaleSeed               ยท          -  ยท          -  ยท      28994  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setPresaleSeed               ยท          -  ยท          -  ยท      29016  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  setWhitelistDao              ยท          -  ยท          -  ยท      46149  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  setWhitelistTeam             ยท          -  ยท          -  ยท      46150  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  setWhitelistTeam             ยท          -  ยท          -  ยท      46128  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  withdrawOnlyExcess           ยท          -  ยท          -  ยท      61921  ยท            1  ยท          -  โ”‚
+|  VestingCvg           ยท  withdrawOnlyExcess           ยท          -  ยท          -  ยท      61943  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg         ยท  investMint                   ยท     295021  ยท     317287  ยท     307430  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -83,7 +83,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  BaseTest                                             ยท          -  ยท          -  ยท     388889  ยท        1.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  BondCalculator                                       ยท          -  ยท          -  ยท    1081664  ยท        3.6 %  ยท          -  โ”‚
+|  BondCalculator                                       ยท          -  ยท          -  ยท    1077092  ยท        3.6 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CloneFactory                                         ยท          -  ยท          -  ยท     582766  ยท        1.9 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -95,7 +95,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgV3Aggregator                                      ยท          -  ยท          -  ยท     622164  ยท        2.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  Ibo                                                  ยท    3099796  ยท    3099808  ยท    3099802  ยท       10.3 %  ยท          -  โ”‚
+|  Ibo                                                  ยท    3041289  ยท    3041301  ยท    3041295  ยท       10.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  mock_CloneFactoryV2                                  ยท          -  ยท          -  ยท     535562  ยท        1.8 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     670502  ยท     725531  ยท     698015  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1844487  ยท        6.1 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1822697  ยท        6.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2977045  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

[G-07] Use Solidity 0.8.19 or higher to save gas

Instances

  1. BondCalculator.sol#L12
  2. CvgOracle.sol#L12
  3. Ibo.sol#L24
  4. VestingCvg.sol#L12

Issue

The Solidity release 0.8.19 introduced some changes that will make the same code run more gas-efficiently compared to versions below 0.8.19.

Recommendation

Replace the current version pragmas with 0.8.19 or higher and compile the contracts with the new version. In all four instances

BondCalculator.sol#L12

CvgOracle.sol#L12

Ibo.sol#L24

VestingCvg.sol#L12

the change to the version pragma 0.8.19 would look like this:

- pragma solidity ^0.8.0;
+ pragma solidity 0.8.19;

Notice that the new version pragma is no longer "floating", i.e., it only allows for compilation with only one specific compiler version.

Assuming you use Solidity 0.8.19, the output of the Hardhat gas reporter tells us that these changes will save 23 gas on the function calls and a total of 5535 gas during deployment.

diff --git a/gasReporting.md b/gasReporting.md
index a71dda1..f1a226e 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -1,5 +1,5 @@
 ยท-------------------------------------------------------|---------------------------|-------------|-----------------------------ยท
-|                 Solc version: 0.8.17                  ยท  Optimizer enabled: true  ยท  Runs: 250  ยท  Block limit: 30000000 gas  โ”‚
+|                 Solc version: 0.8.19                  ยท  Optimizer enabled: true  ยท  Runs: 250  ยท  Block limit: 30000000 gas  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  Methods                                                                                                                      โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -7,7 +7,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  BaseTest             ยท  incrementCounter             ยท          -  ยท          -  ยท      48258  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CloneFactory         ยท  createCvgAggregator          ยท     201615  ยท     218835  ยท     204161  ยท           14  ยท          -  โ”‚
+|  CloneFactory         ยท  createCvgAggregator          ยท     201603  ยท     218823  ยท     204149  ยท           14  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  Cvg                  ยท  approve                      ยท          -  ยท          -  ยท      46596  ยท            2  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -27,7 +27,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  CvgOracle            ยท  setTokenOracleParams         ยท      71411  ยท      71675  ยท      71540  ยท           31  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59525  ยท           22  ยท          -  โ”‚
+|  CvgV3Aggregator      ยท  setLatestPrice               ยท      37766  ยท      71978  ยท      59526  ยท           22  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  ERC20                ยท  approve                      ยท      26558  ยท      46700  ยท      44526  ยท          119  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -35,7 +35,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  Ibo                  ยท  deposit                      ยท     112237  ยท     320063  ยท     240553  ยท           23  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  mock_CloneFactoryV2  ยท  createBaseTest               ยท          -  ยท          -  ยท     119967  ยท            3  ยท          -  โ”‚
+|  mock_CloneFactoryV2  ยท  createBaseTest               ยท          -  ยท          -  ยท     119955  ยท            3  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  ProxyAdmin           ยท  upgrade                      ยท          -  ยท          -  ยท      38853  ยท            1  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -81,29 +81,29 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  TransparentUpgradeableProxy                          ยท     670502  ยท     725531  ยท     698015  ยท        2.3 %  ยท          -  โ”‚
+|  TransparentUpgradeableProxy                          ยท     665377  ยท     720406  ยท     692890  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1822697  ยท        6.1 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1822493  ยท        6.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2977045  ยท        9.9 %  ยท          -  โ”‚
+|  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2976839  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

[G-08] Consider choosing a very large value for the optimizer

The Solidity optimizer focuses on optimizing two primary aspects:

  1. The deployment cost of a smart contract.
  2. The execution cost of functions within the smart contract.

Thereโ€™s a trade-off involved in selecting the runs parameter for the optimizer.

Smaller run values prioritize minimizing the deployment cost, resulting in smaller creation code but potentially unoptimized runtime code. While this reduces gas costs during deployment, it may not be as efficient during execution.

Conversely, larger values of the runs parameter prioritize the execution cost. This leads to larger creation code but an optimized runtime code that is cheaper to execute. While this may not significantly affect deployment gas costs, it can significantly reduce gas costs during execution.

Given this trade-off, if your contract will be used frequently, you should consider using a larger value for the optimizer, as this will save gas costs in the long term.

[G-09] Split require statements

Instances

  1. VestingCvg.sol#L179-L183

Issue

There is a require statement whose first argument is a boolean && expression and can, therefore, be split into two require statements.

When we split require statements, we are essentially saying that each statement must be true for the function to continue executing.

If the first statement evaluates to false, the function will revert immediately, and the following require statements will not be examined. This will save the gas cost rather than evaluating the next require statement.

Recommendation

As we can see from the Hardhat gas reporter, making this change will optimize the cost of runtime code but increase the deployment costs significantly.

diff --git a/gasReporting.md b/gasReporting.md
index 40846af..3a5359d 100644
--- a/gasReporting.md
+++ b/gasReporting.md
@@ -41,7 +41,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  SeedPresaleCvg       ยท  setSaleState                 ยท          -  ยท          -  ยท      28801  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg           ยท  createVestingSchedule        ยท     155747  ยท     190007  ยท     169458  ยท           10  ยท          -  โ”‚
+|  VestingCvg           ยท  createVestingSchedule        ยท     155739  ยท     189999  ยท     169450  ยท           10  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  VestingCvg           ยท  releaseIbo                   ยท      71280  ยท     123640  ยท      84900  ยท            4  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
@@ -103,7 +103,7 @@
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  TransparentUpgradeableProxy                          ยท     665377  ยท     720406  ยท     692890  ยท        2.3 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
-|  VestingCvg                                           ยท          -  ยท          -  ยท    1822493  ยท        6.1 %  ยท          -  โ”‚
+|  VestingCvg                                           ยท          -  ยท          -  ยท    1837122  ยท        6.1 %  ยท          -  โ”‚
 ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
 |  WlPresaleCvg                                         ยท          -  ยท          -  ยท    2976839  ยท        9.9 %  ยท          -  โ”‚
 ยท-------------------------------------------------------|-------------|-------------|-------------|---------------|-------------ยท

For this reason, I would recommend implementing this change only if deployment costs are not a priority and you would rather have optimized runtime code.

If you do decide to split the require statements, here is how this change would be implemented:

VestingCvg.sol#L179-L183

- require(
-     presaleSeed.saleState() == IPresaleCvgSeed.SaleState.OVER &&
-         presaleWl.saleState() == IPresaleCvgWl.SaleState.OVER,
-     "PRESALE_ROUND_NOT_FINISHED"
- );
+ require(
+     presaleSeed.saleState() == IPresaleCvgSeed.SaleState.OVER,
+     "PRESALE_ROUND_NOT_FINISHED"
+ );
+ require(
+     presaleWl.saleState() == IPresaleCvgWl.SaleState.OVER,
+     "PRESALE_ROUND_NOT_FINISHED"
+ );