CertiK reviewed ZAH Cards (Zahnymous LTD) on 6 Oct 2022: 13 findings, 0 critical; 9 marked fixed, 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 | 2 | 0 | 0 |
| Medium | 0 | 0 | 1 |
| Low | 2 | 0 | 8 |
The fees tracked by `tokensForLiquidity`, `tokensForDev`, and `tokensForMarketing` may not match the fees that have been paid to the contract due to the truncation that may happen during division. In other words, it is not necessarily the case that the total amount added to `tokensForLiquidity`, `tokensForDev`, and `tokensForMarketing` here may not match `fees`.
`tokensForLiquidity` is always set to `0` before this event is emitted. This is likely not the value that is intended to be emitted in that event.
One or more state changes do not emit events to pass the changes out of chain. ```solidity=1054 swapTokensAtAmount = newAmount; ``` --- ```solidity=1064 buyMarketingFee = _marketingFee; ``` ```solidity=1065 buyLiquidityFee = _liquidityFee; ``` ```solidity=1066 buyDevFee = _devFee; ``` *Note: Only a sample of 3 state variable assignments (out of 4) are shown above.* --- ```solidity=1072 sellMarketingFee = _marketingFee; ``` ```solidity=1073 sellLiquidityFee = _liquidityFee; ``` ```solidity=1074 sellDevFee = _devFee; ``` *Note: Only a sample of 3 state variable assignments (out of 4) are shown above.*
The **require** can be used to check for conditions and throw an exception if the condition is not met. It is better to provide a string message containing details about the error that will be passed back to the caller.
Addresses should be checked before assignment or external call to make sure they are not zero addresses. ```solidity=1098 marketingWallet = newMarketingWallet; ``` - `newMarketingWallet` is not zero-checked before being used. --- ```solidity=1103 devWallet = newWallet; ``` - `newWallet` is not zero-checked before being used.
The owner is exempt from fees and transaction limits by upon contract deployment. Yet when ownership is reset through `renounceOwnership()` or `transferOwnership()`, the exemptions are not granted to the new owner nor are they revoked from the previous owner.
The `SafeMath` library is used unnecessarily. With Solidity compiler versions 0.8.0 or newer, arithmetic operations will automatically revert in case of integer overflow or underflow. ```solidity=270 using SafeMath for uint256; ``` - `SafeMath` library is used for `uint256` type in `ERC20` contract. ```solidity=392 _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); ``` - `SafeMath.sub` is called in `transferFrom` function of `ERC20` contract. *Note: Only a sample of 2 `SafeMath` library usage in this contract (out of 11) are shown above.* --- ```solidity=547 library SafeMath { ``` - An implementation of `SafeMath` library is found. --- ```solidity=270 using SafeMath for uint256; ``` - `SafeMath` library is used for `uint256` type in `ERC20` contract. ```solidity=1155 fees = amount.mul(sellTotalFees).div(100); ``` - `SafeMath.mul` is called in `_transfer` function of `ZAH` contract. *Note: Only a sample of 2 `SafeMath` library usage in this contract (out of 12) are shown above.*
```solidity=744 library SafeMathInt { ``` - The library `SafeMathInt` is declared but never used. --- ```solidity=804 library SafeMathUint { ``` - The library `SafeMathUint` is declared but never used.
`address(0xdead)` itself is used instead of the constant `deadAddress` in scope whose value is that same address.
| Address | Chain | Source code |
|---|---|---|
| 0xa78c…9cfb0xa78cc657877406b17f6ff9c7a3f10401d1a89cfb | 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