CertiK reviewed 1 Exchange (1ex Audit) on 29 Dec 2023: 15 findings, 0 critical; 4 marked fixed, 5 acknowledged, 6 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 | 4 | 0 |
| Medium | 0 | 1 | 0 |
| Low | 6 | 0 | 4 |
Users may query the claimable amount via the function `claimableAmount` with `OneExVestingFactory`. However, each vesting plan may refer to a different asset, the return value of the `claimableAmount` will refer to the sum of different assets, for example a mix of USDC, WETH, etc. As a result, the return value may cause confusion.
According to the comment, `startTime` is the timestamp for when this vesting should have started. But this field is never used to check whether the vesting has been started. We would like to discuss this finding with the team to make sure this design is intended.
For each vesting schedule, there are two ways to claim: - via `claim` function - via `receive` function by sending zero amount of native token. However, the `claim` function is subjected to the `onlyOwner` modifier, but the `receive` function is not limited by the owner role.
The `revoke()` function permits the `ADMIN` to cancel a vesting schedule. Upon invocation, it resets the attributes within the `schedule` struct and removes the corresponding vesting schedule from the `_revokableVestings` list. However, it does not modify the user's individual vesting schedule in `accountVestings[msg.sender].vestings`. Once a vesting schedule is revoked, it cannot be reused, yet it persists in the user's vesting list. If all of a user's vesting schedules are revoked, these outdated schedules remain stored within the contract, leading to storage and computational overhead.
In the `OneExVestingFactory` contract, the user may claim all reward with `claimAll()` and query the information about claimable amount via `claimableAmount`. However, since the vesting list for specific user will keep increasing during the time, which may cause the DoS issue on aforementioned functions.
The linked function `calcDistribution()`function is designed to compute the quantity of tokens to be distributed over time. In Solidity, the division operation inherently rounds down to the nearest integer. ```solidity return (schedule.totalAmount * (time - schedule.cliffTime)) / (schedule.endTime - schedule.cliffTime); ``` This behavior may lead to a potential loss of precision during the initial distribution rounds for the specified recipient at `schedule.address`.
The report names a repository or files. Open the report to see its scope.
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