Omniscia Badai Tech Audit

BadAIStaking Code Style Findings

BadAIStaking Code Style Findings

BAS-01C: Generic Typographic Mistakes

TypeSeverityLocation
Code StyleBadAIStaking.sol:
I-1: L34
I-2: L35
I-3: L36

Description:

The referenced lines contain typographical mistakes (i.e. private variable without an underscore prefix) or generic documentational errors (i.e. copy-paste) that should be corrected.

Example:

contracts/staking/BadAIStaking.sol
34uint public constant unstakingFeeRatioTimelockPeriod = 600;

Recommendation:

We advise them to be corrected enhancing the legibility of the codebase.

Alleviation (d639d227f8b8d90dbd9813ab9d7a5cbee34dd9b1):

All relevant constant declarations have been renamed based on the UPPER_CASE_FORMAT, addressing this exhibit.

BAS-02C: Ineffectual Usage of Safe Arithmetics

TypeSeverityLocation
Language SpecificBadAIStaking.sol:
I-1: L138
I-2: L140
I-3: L159
I-4: L365
I-5: L369
I-6: L373
I-7: L379

Description:

The linked mathematical operations are guaranteed to be performed safely by surrounding conditionals evaluated in either require checks or if-else constructs.

Example:

contracts/staking/BadAIStaking.sol
153require(
154 _amount <= stakes[msg.sender],
155 "BADStakingImp: not enough stake to transfer"
156);
157_updateReward(msg.sender);
158_updateReward(_recipient);
159stakes[msg.sender] -= _amount;

Recommendation:

Given that safe arithmetics are toggled on by default in pragma versions of 0.8.X, we advise the linked statements to be wrapped in unchecked code blocks thereby optimizing their execution cost.

Alleviation (d639d227f8b8d90dbd9813ab9d7a5cbee34dd9b1):

The Badai Tech team evaluated this optimization and opted to retain checked arithmetics across the codebase so as to increase its readability and prevent future code updates to result in undetected overflows / underflows.

BAS-03C: Inefficient Maximum Mechanism

Description:

The referenced maximum value acquisition will be triggered once in the lifetime of the contract resulting in a continuous inefficiency.

Example:

contracts/staking/BadAIStaking.sol
348function getTotalEmittedTokens(
349 uint _from,
350 uint _to,
351 uint _startingCheckPoint
352) public view returns (uint, uint) {
353 require(_to >= _from, "LM: _to has to be greater than _from.");
354 uint totalEmittedTokens = 0;
355
356 // The time to start calculating rewards from. We'll update it for each emission period we iterate over
357 uint nextStartTime = Math.max(_from, checkPoints[0]);

Recommendation:

We advise the code to be revised by configuring the nextStartTime to the value of checkPoints[0] when startingCheckPoint is 0 (i.e. until the first emission occurs).

Alleviation (d639d227f8b8d90dbd9813ab9d7a5cbee34dd9b1):

The Badai Tech team evaluated this exhibit and opted to retain the maximum mathematical calculation albeit between the _from value and the _startingCheckpoint checkpoint value so as to support external view-only calls.

As external call support is meant to be retained by this function, we consider this exhibit to be resolved.