Omniscia Tokemak Network Audit
VoteTracker Code Style Findings
VoteTracker Code Style Findings
VTR-01C: Inefficient Hash Specification
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | Informational | VoteTracker.sol:L34, L39, L44, L47, L48 |
Description:
The linked variable is assigned to a keccak256 instruction and is declared as constant.
Example:
contracts/vote/VoteTracker.sol
34bytes32 public constant EIP712_DOMAIN_TYPEHASH =35 keccak256(36 "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"37 );Recommendation:
We advise it to be set as immutable instead to cache the result of the keccak256 instruction as otherwise it is performed each time redundantly.
Alleviation:
All linked variables were properly set to immutable from constant to take advantage of the gas optimization.
VTR-02C: Inefficient Loop Halt
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | Informational | VoteTracker.sol:L407, L408, L412 |
Description:
The linked guard variable used to terminate the while loop can be entirely omitted.
Example:
contracts/vote/VoteTracker.sol
405function _removeUserVoteKey(address account, bytes32 reactorKey) internal whenNotPaused {406 uint256 i = 0;407 bool deleted = false;408 while (i < userVoteKeys[account].length && !deleted) {409 if (userVoteKeys[account][i] == reactorKey) {410 userVoteKeys[account][i] = userVoteKeys[account][userVoteKeys[account].length - 1];411 userVoteKeys[account].pop();412 deleted = true;413 }414 i++;415 }416}Recommendation:
We advise it to be omitted so by replacing the deleted = true statement with a break one instead.
Alleviation:
The break statement has been properly introduced optimizing the code.