CertiK reviewed OSIS on 5 Dec 2022: 18 findings, 1 critical; 10 marked fixed, 2 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 | 1 |
| High | 1 | 0 | 0 |
| Medium | 0 | 2 | 2 |
| Low | 5 | 0 | 7 |
This functionality is very dangerous not only can it destroy the protocol. It can easily one side the pool if this is on any DEX. For Example: Token A is worth 1000 of token B The pool has 1,000 (token A) and 100,0000 (token B) respectively. The token price can be instantly changed if this function is called to burn either side.
When a user sees `maxSupply()` they might think they supply cannot grow larger. However, the token can be minted past the `MAXIMUMSUPPLY` because there is no check on the mint. This is misleading and the design of the system should be rethought to ensure this is intended or not. This is also misleading because in the constructor the `MAXIMUMSUPPLY` is minted, but a team wallet can mint more than this. Moreover, even if this is fixed this can be used in conjunction with the burn function to burn another users tokens to mint more and sell.
The `withdraw()` function does not have a fallback function to accept funds, so it cannot accept any native token balances. We understand this is to retrieve lost funds, but it is not possible to deposit native assets. For example: Bob tries to send ether to this address. It will fail because it does not have any functionality to receive it.
We do not expect contract names and file names to be the same or do we want this to happen. We are pointing this out for consistency because the file name is `MGBTokenV1.sol`, and the contract is `MGBTokenV2`.
The `require()` statements should provide a description of the condition not met.
This needs the `Ownable` import from OpenZeppelin to compile properly.
If this comment is dictating that all `onlyOwner` functions are below, then the `mint()` function should be included in this section for clarity.
The linked statement redundantly divides by 100. This could be avoided by setting rewards to single digits.
The following variables are doing the same thing and one can be used instead. ```Solidity uint256 public maxSupply = 10000; uint256 public maxMintAmount = 10000; ```
The variable `paused` is already set to false by default in Solidity.
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (4)
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