CertiK reviewed EDUM (EDUM - Audit) on 17 Mar 2023: 13 findings, 0 critical; 2 marked fixed, 11 open.
Report hosted on skynet.certik.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 0 |
| Medium | 0 | 0 | 1 |
| Low | 11 | 0 | 1 |
If the contract should not accept Ether, then the contract does not need to have a `receive()` function.
Inside the function `getLockedBalance()` the following condition will never be executed: ```solidity=231 if (lockStates[_addr].minReleaseTime == 0) { releaseTime += listingDate; } ``` This will never execute this if block due to `minReleaseTime` being set inside of `_releaseLockInfo()`, `_refactoringPreTimelock()`, or `_transferTimelock()`.
In the function `setControllers()`, the controllers are reset each call which can be inefficient if its not intended. It is inefficient due to having to remove all controllers one by one. For example: The protocol has 1 controller but wants to add a new one. When `setControllers()` is called again, the original controller has to be added in with the new one again otherwise the original controller will be removed.
One or more parameters with `memory` data location are never modified in their functions and those functions are never called internally within the contract. Thus, their data location can be changed to `calldata` to avoid the gas consumption copying from calldata to memory. ```solidity=108 function setControllers(address[] memory controllerList) public onlyOwner { ``` `setControllers` has memory location parameters: `controllerList`.
As some users will not have a timelock, it may be beneficial to check inside of `_releaseLockInfo()` if the length of `lockInfo` equals zero to avoid users using more gas than necessary.
The following functions have potentially confusing names: - `transferTimelock()` - `transferPreTimelock()` By calling these functions, it appears as the timeLock is already created.
In the contract `EDUM`, the following functions do not emit events: - `setControllers()`
The variable `listingDate`, `lockCount`, `totalLocked`, `totalAmount`, and `amountLength` are initialized with the value 0 . In Solidity, all un-initialized variables have a default value which for the uint256 variable is 0, hence the initialization part is redundant and can be removed.
The internal function `_transferTimelock()` does not need the `onlyController` modifier as the only functions that call it have the modifier as well.
Literals with many digits are difficult to read and review. The following variable should be revised: - `TOTAL_SUPPLY`
The following functions are equivalent to the compiler-generated getter functions for the respective variables: - `getTokenlockStates()` - `getListingDate()`
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (1)
1,044 projects reviewed · 1,375 reports · latest May 2025
See CertiK’s auditsSomething wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.
Tell us