CertiK reviewed Genius AI™ (Genius - Audit #2) on 19 Dec 2022: 22 findings, 0 critical; 9 marked fixed, 4 acknowledged, 9 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 | 2 |
| Medium | 0 | 4 | 0 |
| Low | 9 | 0 | 7 |
The function `proofOfExodus()` executes an external call `IGeneral(callbackContract).exodus(msg.sender, balance, miners)`, where the address `callbackContract` is controlled by the caller and there is no input validation in place. A user can deploy a malicious `callbackContract` and perform arbitrary actions in the function `IGeneral.exodus()`.
In functions `_summarize10Days()`, `_summarize100Days()`, the variables `newInflation` and `redistribution` are accumulated. However, in `_summarize1000Days()`, the variables are reset for each loop iteration. ```solidity newInflation = 0; redistribution = 0; ```
In `_manageCollateralMinerPayouts()`, the mint value is `netPrincipalPayout + netRewardsPayout`. `netRewardsPayout` is decreased from `calendar.burnedSupply` afterward. Our understanding is that the reason for the decrease is that `netRewardsPayout` is minted. On the other hand, as the other value minted, `netPrincipalPayout` is not deducted from anywhere.
When a user outbids the highest bidder in the auction, as implemented in `_handleAuctionOutBid`, the highest bidder will get 99.99% of the amount instead of the entire amount returned.
When transferring deflationary ERC20 tokens, the input amount may not be equal to the received amount due to the charged transaction fee. For example, if a user sends 100 deflationary tokens (with a 10% transaction fee), only 90 tokens actually arrived to the contract. However, a failure to discount such fees may allow the same user to withdraw 100 tokens from the contract, which causes the contract to lose 10 tokens in such a transaction.
1. `decreaseBurnedSupply()`: the `auctionAddress` has access in the implementation but not mentioned in the comments. 2. `increaseBurnedSupply()`: the `hexodusAddress` has access in the implementation but not mentioned in the comments. 3. `incDailyPenalties()`: the `auctionAddress` has access in the implementation but not mentioned in the comments.
It is now well understood that the difficulty or timestamp is not a source of randomness. They can be manipulated if the attacker is also a miner. For EVM compatible blockchains such as Binance smart chain and Polygon, the `block.difficulty` can be the same value across multiple blocks, making the situation even worse.
For the first bid, the actual amount burned in `_geniusContract` is `auction.firstBid` but not the input `bid`.
The linked functions are equivalent to the compiler-generated getter functions for the respective variables.
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (8)
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