CertiK reviewed BabyCatCoin (Baby Cat) on 11 Apr 2024: 8 findings, 0 critical; 1 marked fixed, 7 open.
The original report was removed from its address (seen 20 Oct 2026).
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 1 | 0 | 1 |
| Medium | 0 | 0 | 0 |
| Low | 6 | 0 | 0 |
All of the `1_000_000_000 * 10**9` `BabyCat` tokens are sent to the contract deployer or one or several externally-owned account (EOA) addresses. This is a centralization risk because the deployer or the owner(s) of the EOAs can distribute tokens without obtaining the consensus of the community. Any compromise to these addresses may allow a hacker to steal and sell tokens on the market, resulting in severe damage to the project.
In a front-running attack, an attacker identifies a pending transaction on the public blockchain and jumps ahead of it (typically by paying higher gas fees). A sandwich attack is a specialized form of front-running. In this scenario, attackers identify users making token swaps or adding liquidity without appropriate slippage limits. The attacker then profits by buying the asset before the victim's transaction and selling it immediately afterwards. The following function are called without setting restrictions on slippage or minimum output amount, so transactions triggering these functions are vulnerable to sandwich attacks, especially when the input amount is large: - `swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens()`
In the following snippet of code: ```solidity=245 if(!AX.checkDeployer()) {marketingAddress = payable(AX.marketingAddress());} else {isContract = true;} if(AX.checkDeployer()) { isContract = true; } ``` the second `isContract = true` is redundant, indeed if `AX.checkDeployer() == true`, then the `else` block will be triggered, and `isContract` is set to `true` before the second declaration.
Some events are never emitted, which can lead to confusion and code maintainability issues. ```solidity=218 event _changePair(address newLpPair); ``` - `_changePair` is declared in `BabyCat` but never emitted. --- ```solidity=219 event _changeThreshold(uint256 newThreshold); ``` - `_changeThreshold` is declared in `BabyCat` but never emitted.
The smart contract contains one or more inteface definitions that are not used, which can lead to unnecessary complexity and reduced maintainability. ```solidity=62 interface IV2Pair { ``` - `IV2Pair` is declared but never used.
The smart contract does not check or store the return value of an external call in a local or state variable, which may introduce vulnerabilities due to the unhandled outcome. ```solidity=425 try swapRouter.addLiquidityETH{value: newBalance}( address(this), secondMath, 0, 0, DEAD, block.timestamp ){} catch {return;} ```
The linked variable, `lpPair`, assigned in the constructor can be declared as `immutable`. Immutable state variables can be assigned during contract creation but will remain constant throughout the lifetime of a deployed contract. A big advantage of immutable variables is that reading them is significantly cheaper than reading from regular state variables since they will not be stored in storage.
| Address | Chain | Source code |
|---|---|---|
| 0x3954…2e7d0x39541550c434ddf4ab80d1eb1cfaeb931dee2e7d | Chain: BNB Chain | Source code: Verified source |
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