CertiK reviewed Optix Protocol (Optix) on 14 Nov 2022: 13 findings, 0 critical; 8 marked fixed, 1 acknowledged, 4 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 | 1 | 0 |
| Medium | 0 | 0 | 1 |
| Low | 4 | 0 | 7 |
When transferring standard ERC20 deflationary tokens, the input amount may not be equal to the received amount due to the charged transaction fee. For example, if a user stakes 100 deflationary tokens (with a 10% transaction fee) in a vault, only 90 tokens actually arrived in the contract. However, the user can still withdraw 100 tokens from the contract, which causes the contract to lose 10 tokens in such a transaction. The vault takes the pool token balance (the `collateralReserves`) into account when calculating the users' reward. An attacker can repeat the process of deposit and withdraw to increase the token balance (`collateralReserves`) in a deflationary token pool and cause the contract to lower the reward amount. Reference: https://thoreum-finance.medium.com/what-exploit-happened-today-for-gocerberus-and-garuda-also-for-lokum-ybear-piggy-caramelswap-3943ee23a39f
The contract is serving as the underlying entity to interact with third party token and oracle protocols. The scope of the audit treats 3rd party entities as black boxes and assume their functional correctness. However, in the real world, 3rd parties can be compromised and this may lead to lost or stolen assets. In addition, upgrades of 3rd parties can possibly create severe impacts, such as increasing fees of 3rd parties, migrating to new LP pools, etc.
The return value of an external call is not stored in a local or state variable. ```solidity=78 factory.vaults(vaultId).isOptionValid(holder,oracle,optionSize); ``` --- ```solidity=151 factory.vaults(vaultId).collateralToken().approve(address(this), remain); ``` --- ```solidity=154 factory.vaults(vaultId).provideAndMint(address(this), remain, false, true); ``` --- ```solidity=181 collateralToken.approve(address(this),collateralOut); ```
The linked variables could be declared as `constant` since these state variables are never modified.
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (7)
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