CertiK reviewed Noah (NOAH’ARK) on 24 Mar 2023: 11 findings, 0 critical; none marked fixed.
The original report was removed from its address (seen 19 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 | 0 |
| Medium | 0 | 0 | 0 |
| Low | 10 | 0 | 0 |
All **Noah** tokens are sent to the deployer assigned address `addr` when deploying the contract. This is a potential centralization risk as the deployer can distribute **Noah** tokens without the consensus of the community.
It is expected that invocations of the form `transfer(recipient, amount)` succeed and return `true` if * The address in `recipient` is not the zero address, * `amount` does not exceed the balance of address `msg.sender`, * transferring `amount` to the address `recipient` does not lead to an overflow of the recipient's balance, and * the supplied gas suffices to complete the call. Nevertheless, the `transfer` function of `Token` fails in some of those admissible cases.
It is expected that invocations of the form `transfer(recipient, amount)` where the address in `recipient` equals the address in `msg.sender` (i.e. self-transfers) succeed and return `true` if * The value in `amount` does not exceed the balance of `msg.sender` and * the supplied gas suffices to complete the call. Nevertheless, the `transfer` function of `Token` fails in some of those admissible cases.
It is expected that non-reverting invocations of `transfer(recipient, amount)` that return `true` and where the address in `recipient` equals the address of `msg.sender` (i.e. self-transfers) do not change the balance of address `msg.sender`. However, in `Token.transfer` the balance of address `msg.sender` is changed by executing a self-transfer.
It is expected that invocations of `transferFrom(from, dest, amount)` succeed and return `true` if * the value of `amount` does not exceed the balance of address `from`, * the value of `amount` does not exceed the allowance of `msg.sender` for address `from`, * transferring a value of `amount` to the address in `dest` does not lead to an overflow of the recipient's balance, and * the supplied gas suffices to complete the call. Nevertheless, the `transferFrom` function of `Token` fails in some of those admissible cases.
It is expected that invocations of `transferFrom(from, dest, amount)` where the address in `dest` equals the address in `from` (i.e. self-transfers) succeed and return `true` if: * The value of `amount` does not exceed the balance of address `from`, * the value of `amount` does not exceed the allowance of `msg.sender` for address `from`, and * the supplied gas suffices to complete the call. Nevertheless, the `transferFrom` function of `Token` fails for some self-transfers in these admissible cases.
It is expected that non-reverting invocations of `transferFrom(from, dest, amount)` that return `true` and where the address in `from` equals the address in `dest` (i.e. self-transfers) do not change the balance entry of the address in `from` (which equals `dest`). However, in `Token.transferFrom`, at least one balance entry of the addresses provided in the `from` or `dest` input parameters is changed when executing a self-transfer.
It is expected that all invocations of `transferFrom(from, dest, amount)` that succeed (i.e. that do not revert) and that return `true` subtract the value in `amount` from the balance entry for the address in `from` and add the same value to the balance entry for the address in `dest`. However, the amount that the `transferFrom` function in `Token` deducts from the balance of address `from` is not always equal to the amount that it credits to the balance of the recipient's address in `dest`.
Addresses should be checked before assignment or external call to make sure they are not zero addresses. ```solidity=599 _marketAddress = marketAddress_; ``` - `marketAddress_` is not zero-checked before being used. --- ```solidity=660 _marketAddress = marketAddress; ``` - `marketAddress` is not zero-checked before being used.
State variables that never change should be declared as `constant` to save gas. ```solidity=584 uint16 public _marketRatio = 2; ``` - `_marketRatio` should be declared `constant`.
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=126 library SafeMath { ``` - An implementation of `SafeMath` library is found. --- ```solidity=572 using SafeMath for uint256; ``` - `SafeMath` library is used for `uint256` type in `Token` contract.
| Address | Chain | Source code |
|---|---|---|
| 0x494a…078f0x494aed889b52baa32bec68460ab9786a3e41078f | Chain: BNB Chain | Source code: Verified source |
| 0xcf96…bba30xcf968cec61c8883c1b52f3bc8a87c3101734bba3 | 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