CertiK reviewed Jager Hunter (Jager Hunter 2) on 28 Apr 2025: 7 findings, 0 critical; 4 marked fixed, 1 acknowledged, 2 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 | 1 |
| Medium | 0 | 1 | 1 |
| Low | 2 | 0 | 2 |
When using the **Pancake Router** to remove liquidity, there may be impermanent loss. This occurs because price fluctuations can cause the value of a liquidity provider's assets to decrease compared to simply holding the assets. As you provide liquidity, changes in asset prices can alter the asset ratio in the pool, affecting the final amount of assets you retrieve. Impermanent loss typically occurs during significant price volatility. When users deposit LP and withdraw their principal after 14 days, the LP contract automatically removes liquidity and transfers the two tokens to the user without their consent, which may result in impermanent loss. We would like to confirm with the client the purpose of this design. ```solidity function withdraw(uint256 amount) external nonReentrant { require(amount > 0, "ZERO"); UserInfo storage user = userInfo[msg.sender]; require(user.lockEndedTimestamp < block.timestamp, "STILL LOCKED"); require(user.amount >= amount, "INVALID AMOUNT"); updatePool(); queueRewards(msg.sender); user.amount -= amount; user.rewardDebt = (user.amount * poolInfo.accLPPerShare) / 1e12; poolInfo.totalAmount -= amount; claimAccountReward(msg.sender); //TransferHelper.safeTransfer(address(LPToken), msg.sender, amount); TransferHelper.safeApprove(address(LPToken), address(jagerToken), amount); bool success = false; uint amountToken; uint amountETH; try jagerToken.removeLiquidity(amount) returns (uint _amountToken, uint _amountETH) { amountToken = _amountToken; amountETH = _amountETH; success = true; } catch { } require(success == true, "REMOVE FAILED"); TransferHelper.safeTransferETH(msg.sender, amountETH); TransferHelper.safeTransfer(address(jagerToken), msg.sender, amountToken); } ```
In the `JagerHunterAirdrop` contract, the `startAirdrop()` function lacks proper access control, which allows any user to initiate the airdrop by transferring a small or even zero amount of tokens. This vulnerability could enable a malicious actor to front-run the transaction, potentially disrupting the normal operations of the project. ```solidity function startAirdrop(uint256 amount) external { require(endTime == 0, "STARTED"); TransferHelper.safeTransferFrom(jagerToken, msg.sender, address(this), amount); endTime = block.timestamp + 5 days; totalAmount = amount; yieldNumber = amount * 250 / 10000; emit StartAirdrop(totalAmount, endTime,yieldNumber); } ```
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (3)
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