CertiK reviewed ilovesnoopy (I LOVE SNOOPY - Audit) on 31 May 2023: 8 findings, 0 critical; all acknowledged, none fixed.
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 | 1 | 0 |
| Medium | 0 | 0 | 0 |
| Low | 0 | 7 | 0 |
All LOVESNOOPY tokens are sent to the contract deployer when deploying the contract. This is a potential centralization risk as the deployer can distribute LOVESNOOPY tokens without the consensus of the community. As of 05/17/2023, the following addresses holds the majority of the tokens. - 0xb1097131A93342440C568Af9BE28B65b954f1c87 hold around 55% of the tokens - 0x6a1C160b6aA9cABf2d97036FCf427558BC0A2726 hold around 19.4% of the tokens - 0x640a3fAD66e95eB2284f19bf84Ce5897B260E9Ee hold around 10% of the tokens Note: The holder list can be found at website (https://etherscan.io/token/0xf0edac27aa3e85e2d176f689b0025f90c154393a#balances).
There should always be events emitted in the sensitive functions that are controlled by centralization roles.
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 are not validated before assignment or external calls, potentially allowing the use of zero addresses and leading to unexpected behavior or vulnerabilities. For example, transferring tokens to a zero address can result in a permanent loss of those tokens. ```solidity=58 newOwner = _newOwner; ``` - `_newOwner` is not zero-checked before being used.
The `approveAndCall()` function will trigger the callback function of the `receiveApproval()`, thus leading to possible reentrancy situation. Smart contracts who interact with this token should be aware of the possible reentrancy situation.
Current `LOVESNOOPYCoin` implementation is vulnerable to [a known ERC20 race condition issue](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729), which could lead to token theft. When a user calls `approve()` for a second time on a spender that has already been allowed, the spender could call `transferFrom()` to transfer the previous value and still receive the authorization to transfer the new value. Exploit scenario: 1. Alice calls `approve(Bob, 100)` to allow Bob to spend 100 tokens. 2. Alice changes her mind and calls `approve(Bob, 50)`. 3. Bob observes the second `approve(Bob, 50)` function call and calls `transferFrom(Alice, Bob, 100)` before the second `approve(Bob, 50)` call. 4. The above scenario can be achieved by front-running. In this case, Bob can transfer another 50 tokens from Alice and in total, he transferred 150 tokens from Alice.
Solidity frequently releases new compiler versions with improved security features and bug fixes. Using an outdated version prevents access to these enhancements and may leave the smart contract vulnerable to known issues. ```solidity=1 pragma solidity ^0.4.26; ```
The total supply of the LOVESNOOPY token is calculated as the following code snippet: ```solidity function totalSupply() public constant returns (uint256) { return _totalSupply - balances[address(0)]; } ``` However, according to the on chain data, users seems to burn tokens by transferring tokens to the [dead address](https://etherscan.io/token/0xf0edac27aa3e85e2d176f689b0025f90c154393a?a=0x000000000000000000000000000000000000dead) instead of address(0). Therefore, the total supply is not decreasing.
| Address | Chain | Source code |
|---|---|---|
| 0xf0ed…393a0xf0edac27aa3e85e2d176f689b0025f90c154393a | Chain: Ethereum | 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