The audit of the Token contract identified a critical design flaw related to the irreversible loss of transfer control, where the owner cannot re-enable transfer restrictions once the token is set to MODE_NORMAL. Additionally, the contract exhibits a high degree of centralization in transfer control and requires immediate owner action post-deployment to enable transfers. The core ERC20 implementation is robust, leveraging standard OpenZeppelin patterns.

On-chain security analysis — is it a scam or legit?
Is NianNian Safe?
Not verified
This record has not gone through deep verification and is not being monitored. The score is a dated snapshot — the token’s risk can change at any time.Own this token? Put it under verification →The audit of the Token contract identified a critical design flaw related to the irreversible loss of transfer control, where the owner cannot re-enable transfer restrictions once the token is set to MODE_NORMAL.
- Top-10 concentration > 20%
- 1 Critical finding(s) from audit
- 1 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Top-10 concentration > 20% (28.6% total → 24.6% effective; 21.9% in EOAs, 6.7% in contracts — mild)
- 1 Critical finding(s) from audit
- 1 Medium finding(s) from audit
- 1 Low finding(s) from audit
Each factor is an on-chain fact recorded at the time of this analysis. The score is computed from them by a deterministic function, so the same contract returns the same score for anyone who runs the audit. How scores are computed
Security Checklist
as of audit · Sep 4Holders
as of audit · Sep 4, 2026- Contractstreasury, vesting, bridge, staking6.7%
- Walletsanonymous holders, free to sell21.9%
- Everyone elsethe rest of the supply71.4%
How holder types affect the score
Share held by contracts — treasury, vesting, bridge or staking — is discounted against share held by wallets when the score is computed: a contract cannot decide to sell the way an anonymous holder can, though it can still be drained or voted to sell. Effective concentration is the figure the risk score is actually calculated from.
Holder balances as recorded by the audit of Sep 4, 2026
Liquidity
as of audit · Sep 4- Pancakeswap v3WBNBAnalysed$97.9K93.3%
- Pancakeswap v3U$6.5K6.2%
- Pancakeswap v2YXL$5060.5%
- Pancakeswap v3U$270.0%
- Pancakeswap v2TUT$130.0%
- TopazWBNB$70.0%
Show 2 more pairs
The risk score reads depth across every pair.
The LP tokens of the analysed pool are locked or burned.
0xd946…459dNo privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalIrreversible Loss of Transfer Control
The setMode function contains a condition if (_mode != MODE_NORMAL) which prevents the owner from ever re-enabling transfer restrictions once the token's mode has been set to MODE_NORMAL. This means that if the owner transitions the token to MODE_NORMAL (fully unrestricted transfers), they permanently lose the ability to revert to MODE_TRANSFER_RESTRICTED or MODE_TRANSFER_CONTROLLED. This removes a core control mechanism designed into the contract, potentially hindering the project's ability to respond to unforeseen security incidents or market manipulations by re-imposing restrictions.C-01
Issue
The setMode function contains a condition if (_mode != MODE_NORMAL) which prevents the owner from ever re-enabling transfer restrictions once the token's mode has been set to MODE_NORMAL. This means that if the owner transitions the token to MODE_NORMAL (fully unrestricted transfers), they permanently lose the ability to revert to MODE_TRANSFER_RESTRICTED or MODE_TRANSFER_CONTROLLED. This removes a core control mechanism designed into the contract, potentially hindering the project's ability to respond to unforeseen security incidents or market manipulations by re-imposing restrictions.
Fix
Modify the setMode function to allow the owner to transition between all defined modes (MODE_NORMAL, MODE_TRANSFER_RESTRICTED, MODE_TRANSFER_CONTROLLED) without permanent restrictions. For example, remove the if (_mode != MODE_NORMAL) condition to allow _mode to be set to any valid value at any time by the owner.
Status
Unresolved
MediumHighly Centralized Transfer Control
The _mode mechanism, specifically MODE_TRANSFER_CONTROLLED, allows only transfers where either the from or to address is the contract owner. This design choice makes the token highly centralized, as general users cannot freely transfer tokens among themselves. This significantly limits the token's utility, liquidity, and decentralization, concentrating power and control in the hands of the owner.M-01
Issue
The _mode mechanism, specifically MODE_TRANSFER_CONTROLLED, allows only transfers where either the from or to address is the contract owner. This design choice makes the token highly centralized, as general users cannot freely transfer tokens among themselves. This significantly limits the token's utility, liquidity, and decentralization, concentrating power and control in the hands of the owner.
Fix
Evaluate if such a high degree of centralization aligns with the project's long-term vision. If a more decentralized model is desired, consider removing or modifying the MODE_TRANSFER_CONTROLLED state to allow broader transferability. Clearly communicate these transfer restrictions to all potential users and investors.
Status
Unresolved
LowInitial Transfer Restriction Requires Owner Action
The token contract is initialized in MODE_TRANSFER_RESTRICTED in its constructor. This means that immediately after deployment, no token transfers are possible until the contract owner explicitly calls the setMode function to change it to MODE_NORMAL or MODE_TRANSFER_CONTROLLED. This introduces an operational dependency on the owner to perform an additional transaction post-deployment to enable basic token functionality.L-01
Issue
The token contract is initialized in MODE_TRANSFER_RESTRICTED in its constructor. This means that immediately after deployment, no token transfers are possible until the contract owner explicitly calls the setMode function to change it to MODE_NORMAL or MODE_TRANSFER_CONTROLLED. This introduces an operational dependency on the owner to perform an additional transaction post-deployment to enable basic token functionality.
Fix
Ensure that the contract owner is aware of this initial state and is prepared to execute the setMode transaction promptly after deployment if immediate transferability is desired. Alternatively, consider initializing the token in MODE_NORMAL if unrestricted transfers are the default intended behavior.
Status
Unresolved
InfoStandard unchecked Usage for Arithmetic Operations
The contract utilizes unchecked blocks for arithmetic operations such as _balances[from] = fromBalance - amount; and _balances[to] += amount;. These operations are preceded by require statements that ensure conditions like fromBalance >= amount are met, effectively preventing underflow. For additions, overflow is practically not an issue with uint256 for typical token supplies. This is a standard and secure pattern in modern Solidity to optimize gas costs while maintaining safety.I-01
unchecked Usage for Arithmetic OperationsIssue
The contract utilizes unchecked blocks for arithmetic operations such as _balances[from] = fromBalance - amount; and _balances[to] += amount;. These operations are preceded by require statements that ensure conditions like fromBalance >= amount are met, effectively preventing underflow. For additions, overflow is practically not an issue with uint256 for typical token supplies. This is a standard and secure pattern in modern Solidity to optimize gas costs while maintaining safety.
Fix
No action required. This is a secure and gas-efficient practice.
Status
Resolved
Analysis
AI Copilotas of audit · Sep 4The contract implements a standard ERC20 token with custom transfer logic. It correctly uses OpenZeppelin's Ownable pattern for access control and unchecked blocks for arithmetic operations where safety is guaranteed by prior checks (7.2 Code Security). The custom _beforeTokenTransfer hook effectively enforces the defined transfer modes (7.1 Architecture). However, the setMode function contains a critical flaw that prevents re-enabling transfer restrictions once MODE_NORMAL is set, limiting future operational flexibility (7.3 Access Control).
The token's economic model is highly centralized, with the owner having significant control over transferability through the _mode mechanism (7.4 Economic). The MODE_TRANSFER_CONTROLLED state restricts transfers to only involve the owner, severely impacting liquidity and decentralization (7.4 Economic). A critical governance risk exists where the owner permanently loses the ability to re-impose transfer restrictions once MODE_NORMAL is activated, potentially compromising the project's ability to respond to future security or market events (7.5 Governance).
The contract is not designed with an upgradeability pattern (7.7 Upgrades). This means its logic cannot be modified or updated after deployment. Any changes or bug fixes would require a new contract deployment and a migration of assets, which is a significant operational undertaking. This design choice implies immutability post-deployment.
It is strongly recommended to address the critical issue regarding the irreversible loss of transfer control.
The setMode function should be modified to allow the owner to transition between all defined modes as needed, providing necessary operational flexibility. Consider whether the high degree of centralization in transfer control aligns with the project's long-term decentralization goals and communicate these limitations clearly to users. Ensure the owner is prepared to execute the initial setMode transaction promptly after deployment to enable token transfers.
Contract & Record
Free for any token on the record. It links to this page and always shows the current score and the date it was checked.
- Sep 4, 202613Low
- Aug 31, 202614Low
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the NIANNIAN contract address?
The NianNian contract on BNB Chain is 0x9c27c4072738cf4b7b0b7071af0ad5666bddc096. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is NianNian a scam?
Quantum Audit's risk score for NianNian is 13/100 (Low risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Ownership: Renounced; Mint: No mint; Liquidity lock: Locked; Upgradeability: Fixed code; Honeypot: None found; Buy / sell tax: 0% / 0%. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Is NIANNIAN liquidity locked?
Liquidity lock: Locked (as of Sep 4, 2026). Total DEX liquidity: $105.0K.
Who holds NIANNIAN?
As of Sep 4, 2026, the 10 largest holders own 28.6% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of NianNian?
Our AI-powered scanner gives you a deeper, real-time smart contract analysis — free, with every scoring factor shown.
Get Detailed Audit Is this your token? Publish your own audit on this page