CertiK reviewed T23 on 30 Dec 2022: 6 findings, 0 critical; 1 acknowledged, 5 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 | 1 | 0 |
| Medium | 0 | 0 | 0 |
| Low | 5 | 0 | 0 |
The aforementioned Function `balanceOf(address owner)` can be restricted to `view`.
The [EIP20 (Ethereum Improvement Proposals)](https://eips.ethereum.org/EIPS/eip-20) is a standard interface that allows any tokens on Ethereum to be re-used by other applications. According to the standard, "Transfers _value amount of tokens to address _to, and MUST fire the Transfer event." However, when minting the initial T23 tokens during the deployment, the project does not emit a `Transfer` event as specified in the EIP20. ```solidity=14 constructor() { balances[msg.sender] = totalSupply; } ```
The `Token` 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.
State variables that never change should be declared as `constant` to save gas. ```solidity=6 uint public totalSupply = 1000000000000000 * 10 ** 18; ``` - `totalSupply` should be declared `constant`. --- ```solidity=7 string public name = "2023"; ``` - `name` should be declared `constant`. --- ```solidity=8 string public symbol = "T23"; ``` - `symbol` should be declared `constant`. --- ```solidity=9 uint public decimals = 18; ``` - `decimals` should be declared `constant`.
The contracts cited have an unlocked compiler version. An unlocked compiler version in the source code of the contract permits the user to compile it at or above a particular version. This, in turn, leads to differences in the generated bytecode between compilations due to differing compiler version numbers. This can lead to ambiguity when debugging, as compiler-specific bugs may occur in the codebase that would be hard to identify over a span of multiple compiler versions rather than a specific one.
| Address | Chain | Source code |
|---|---|---|
| 0x897f…e6530x897f2be515373cf1f899d864b5be2bd5efd4e653 | 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