Omniscia DAFI Protocol Audit

dToken Code Style Findings

dToken Code Style Findings

DTO-01C: Codebase Optimization

TypeSeverityLocation
Gas OptimizationInformationaldToken.sol:L65-L77

Description:

The enable and disable prefixed functions toggle the state of the same variable.

Example:

contracts/dToken.sol
65function enableTransfer() public onlyOwner {
66
67 require(!transferAllowance,"Already Enabled");
68
69 transferAllowance = true;
70}
71
72function disableTransfer() public onlyOwner {
73
74 require(transferAllowance,"Already Disabled");
75
76 transferAllowance = false;
77}

Recommendation:

We advise them to be combined into a single function that either directly sets it or toggles it to optimize the bytecode of the contract.The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.

Alleviation:

The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.

DTO-02C: Redundant Assignment

TypeSeverityLocation
Gas OptimizationInformationaldToken.sol:L28

Description:

All values in Solidity are initiated to a default value which is equivalent to 0 in the respective data type.

Example:

contracts/dToken.sol
24constructor(string memory _name, string memory _symbol) public Ownable(msg.sender){
25
26 name = _name;
27 symbol = _symbol;
28 _totalSupply = 0;
29
30}

Recommendation:

We advise the assignment of 0 to be removed from the constructor as it is consequently redundant.The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.

Alleviation:

The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.

DTO-03C: Redundant Check

TypeSeverityLocation
Gas OptimizationInformationaldToken.sol:L47

Description:

The require check imposed within burn is redundant as it is indirectly evaluated by the sub invocation on the balances.

Example:

contracts/dToken.sol
46function burn(uint256 _value, address _beneficiary) external onlyOwner {
47 require(balanceCheck(_beneficiary) >= _value,"User does not have sufficient synths to burn");
48 uint256 _value1 = (_value.mul(1 ether)).div(demandFactor);
49 _totalSupply = _totalSupply.sub(_value1);
50 balances[_beneficiary] = balances[_beneficiary].sub(_value1);
51
52 emit Transfer(_beneficiary, address(0), _value);
53}

Recommendation:

We advise it to be safely omitted from the codebase.The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.

Alleviation:

The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase citing time constraints.