The OdysToken contract implements a standard ERC-20-like token with custom transfer restrictions based on wallet and transaction limits. The contract exhibits good adherence to ERC-20 standards and includes immutable parameters for core tokenomics, enhancing predictability. However, a high-severity integer overflow vulnerability exists in the calculation of transfer limits under extreme totalSupply values. Centralized control by the factory address for critical setup functions and the lack of upgradeability or emergency pause mechanisms are also noted.
On-chain security analysis — is it a scam or legit?
Is Nola 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 OdysToken contract implements a standard ERC-20-like token with custom transfer restrictions based on wallet and transaction limits.
Read the full analysis- Ownership status UNKNOWN
- Top-10 concentration > 20%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- Liquidity < $50k
- LP top1 unlocked holder = 93.7%
- LP top3 unlocked holders = 100.0%
- Token age < 30 days
- 1 High finding(s) from audit
- 2 Medium finding(s) from audit
- 2 Low finding(s) from audit
Exact factors
- Ownership status UNKNOWN (owner could not be resolved)
- Top-10 concentration > 20% (37.6% total → 25.0% effective; 16.6% in EOAs, 21.0% in contracts — mild)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- Liquidity < $50k ($44,597 across 1 pairs — thin market)
- LP top1 unlocked holder = 93.7% (independent LP — depth risk)
- LP top3 unlocked holders = 100.0% (independent LP — depth risk)
- Token age < 30 days (still settling)
- 1 High finding(s) from audit
- 2 Medium finding(s) from audit
- 2 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, staking21.0%
- Walletsanonymous holders, free to sell16.6%
- Everyone elsethe rest of the supply62.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 4The risk score reads depth across every pair.
The LP tokens of the analysed pool are not locked or burned, so whoever holds them can withdraw that liquidity.
0x4aca…9f1a0x1bac…d8070x6951…648d0xed21…f0330x3d38…0973No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
HighInteger Overflow in maxWallet and maxTx Calculations
The calculations for maxWallet() and maxTx() involve multiplication operations: (totalSupply * maxWalletBps) and (w * 110). If totalSupply or w (the result of maxWallet()) are sufficiently large, these multiplications can exceed type(uint256).max, leading to an integer overflow. This would result in incorrect (smaller than intended) maxWallet or maxTx values, potentially allowing transfers that should be restricted or causing unexpected behavior in the token's economic model (7.2 Code Security).H-01
maxWallet and maxTx CalculationsIssue
The calculations for maxWallet() and maxTx() involve multiplication operations: (totalSupply * maxWalletBps) and (w * 110). If totalSupply or w (the result of maxWallet()) are sufficiently large, these multiplications can exceed type(uint256).max, leading to an integer overflow. This would result in incorrect (smaller than intended) maxWallet or maxTx values, potentially allowing transfers that should be restricted or causing unexpected behavior in the token's economic model (7.2 Code Security).
Fix
Implement safe arithmetic for all multiplication operations, especially those involving large uint256 values. Consider using OpenZeppelin's SafeMath library or explicitly checking for overflow before multiplication, for example, `require(totalSupply <= type(uint256).max / maxWalletBps, 'Overflow');`.
Status
Unresolved
MediumCentralized Control by factory Address
The factory address, set during contract deployment, holds exclusive control over critical functions such as setPool() and setInitialBuyRecipient() (7.3 Access Control). If the private key associated with this factory address is compromised, an attacker could maliciously set the liquidityPool or initialBuyRecipient to an arbitrary address, potentially disrupting liquidity or diverting funds. This represents a single point of failure for initial contract setup.M-01
factory AddressIssue
The factory address, set during contract deployment, holds exclusive control over critical functions such as setPool() and setInitialBuyRecipient() (7.3 Access Control). If the private key associated with this factory address is compromised, an attacker could maliciously set the liquidityPool or initialBuyRecipient to an arbitrary address, potentially disrupting liquidity or diverting funds. This represents a single point of failure for initial contract setup.
Fix
To mitigate the risk of a single point of failure, consider using a multi-signature wallet (e.g., Gnosis Safe) for the factory address. For highly critical operations, implementing a time-lock mechanism could provide a window for intervention if a malicious transaction is initiated.
Status
Unresolved
MediumImmutability of Key Parameters Limits Flexibility
The maxWalletBps and restrictionSeconds parameters are set as immutable in the constructor (7.4 Economic). While this provides predictability and reduces governance complexity, it also means these critical tokenomic parameters cannot be adjusted after deployment. This lack of flexibility could become a significant issue if unforeseen market conditions, community feedback, or protocol evolution necessitate changes to the token's transfer restrictions.M-02
Issue
The maxWalletBps and restrictionSeconds parameters are set as immutable in the constructor (7.4 Economic). While this provides predictability and reduces governance complexity, it also means these critical tokenomic parameters cannot be adjusted after deployment. This lack of flexibility could become a significant issue if unforeseen market conditions, community feedback, or protocol evolution necessitate changes to the token's transfer restrictions.
Fix
Evaluate whether future flexibility for these parameters is desirable. If so, consider making them configurable by a trusted entity (e.g., the factory address or a governance mechanism) with appropriate safeguards like time-locks or multi-signature approvals. If immutability is the intended design, ensure this decision is well-documented and understood by stakeholders.
Status
Unresolved
LowMissing metaURI Setter or Immutability Declaration
The metaURI state variable is declared as string public and initialized in the constructor. However, there is no setter function provided to update its value after deployment. If the intention was for metaURI to be mutable, this is an oversight. If it was intended to be immutable, it should be declared as immutable to clearly communicate its fixed nature and potentially save gas (7.1 Architecture).L-01
metaURI Setter or Immutability DeclarationIssue
The metaURI state variable is declared as string public and initialized in the constructor. However, there is no setter function provided to update its value after deployment. If the intention was for metaURI to be mutable, this is an oversight. If it was intended to be immutable, it should be declared as immutable to clearly communicate its fixed nature and potentially save gas (7.1 Architecture).
Fix
Clarify the intended mutability of metaURI. If it should be immutable, declare it as string public immutable metaURI;. If it should be mutable, add a restricted setter function (e.g., callable only by the factory address) to allow updates.
Status
Unresolved
LowNo Mechanism for Recovering Accidentally Sent Tokens
The contract lacks a function to recover accidentally sent ERC-20 tokens (other than its own OdysToken) or native currency (ETH/MATIC/BNB) that might be mistakenly sent to the contract address (7.8 Operations). Any such assets would become permanently locked within the contract, leading to irrecoverable loss.L-02
Issue
The contract lacks a function to recover accidentally sent ERC-20 tokens (other than its own OdysToken) or native currency (ETH/MATIC/BNB) that might be mistakenly sent to the contract address (7.8 Operations). Any such assets would become permanently locked within the contract, leading to irrecoverable loss.
Fix
Implement a restricted recoverERC20(address tokenAddress, uint256 amount) function and a withdrawEther(uint256 amount) function, callable only by the factory address. This would allow the recovery of assets sent to the contract by mistake.
Status
Unresolved
Infounchecked Block for balanceOf[to] += value
The operation balanceOf[to] += value; is placed within an unchecked block. While balanceOf[from] -= value; is outside, ensuring value does not exceed balanceOf[from], and totalSupply is fixed, it's important to confirm that balanceOf[to] can never exceed type(uint256).max under any valid scenario. Given the current design, where value is bounded by balanceOf[from] and totalSupply is fixed, an overflow of balanceOf[to] is highly unlikely, but explicit documentation of this invariant would be beneficial (7.2 Code Security).I-01
unchecked Block for balanceOf[to] += valueIssue
The operation balanceOf[to] += value; is placed within an unchecked block. While balanceOf[from] -= value; is outside, ensuring value does not exceed balanceOf[from], and totalSupply is fixed, it's important to confirm that balanceOf[to] can never exceed type(uint256).max under any valid scenario. Given the current design, where value is bounded by balanceOf[from] and totalSupply is fixed, an overflow of balanceOf[to] is highly unlikely, but explicit documentation of this invariant would be beneficial (7.2 Code Security).
Fix
Document the reasoning behind using unchecked for this specific operation, explicitly stating the invariants that prevent an overflow (e.g., balanceOf[to] cannot exceed totalSupply, and totalSupply is less than type(uint256).max).
Status
Unresolved
InfoLack of Emergency Pause Functionality
The contract does not include a mechanism to pause transfers or other critical operations in case of an emergency, such as a discovered vulnerability, a major exploit in an integrated protocol, or severe market manipulation (7.8 Operations). Without a pause function, the protocol would be unable to react quickly to mitigate ongoing damage.I-02
Issue
The contract does not include a mechanism to pause transfers or other critical operations in case of an emergency, such as a discovered vulnerability, a major exploit in an integrated protocol, or severe market manipulation (7.8 Operations). Without a pause function, the protocol would be unable to react quickly to mitigate ongoing damage.
Fix
Consider adding a pause mechanism, controlled by the factory address (preferably a multi-signature wallet), that can temporarily halt transfers. This would provide a crucial safety switch during unforeseen events.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The OdysToken contract provides a basic ERC-20 implementation with additional transfer restrictions for wallet and transaction sizes (7.1 Architecture). It correctly implements standard ERC-20 functions and events. A significant technical risk (7.2 Code Security) is the potential for integer overflow in the maxWallet and maxTx calculations if the totalSupply is set to an extremely large value, which could lead to incorrect enforcement of transfer limits. The use of unchecked for balanceOf[to] is noted but deemed safe under current design constraints.
The factory address holds centralized control for setting the liquidityPool and initialBuyRecipient addresses (7.3 Access Control), posing a single point of failure if compromised. Key tokenomic parameters such as maxWalletBps and restrictionSeconds are immutable (7.4 Economic), which provides predictability but limits the protocol's adaptability to unforeseen market conditions or community feedback. There is no on-chain governance mechanism (7.5 Governance) for parameter adjustments or protocol upgrades.
The OdysToken contract is not designed to be upgradeable (7.7 Upgrades), meaning its logic cannot be modified after deployment. This eliminates risks associated with proxy patterns, upgradeability bugs, or malicious upgrades. However, it also means that any discovered bugs cannot be patched, and new features cannot be added without a full redeployment and migration.
It is strongly recommended to address the high-severity integer overflow vulnerability in the maxWallet and maxTx calculations to ensure the integrity of transfer restrictions.
For enhanced security and operational robustness, consider implementing a multi-signature wallet for the factory address and adding functions for emergency pausing and recovery of accidentally sent tokens. Review the immutability of key tokenomic parameters to confirm alignment with long-term project goals regarding flexibility versus predictability.
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, 202660Medium
- Sep 1, 202646Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the NOLA contract address?
The Nola contract on Arbitrum is 0x768d4b20869771a93946b5101a6a2e886f020c4e. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Nola a scam?
Quantum Audit's risk score for Nola is 60/100 (Medium risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: No mint; Liquidity lock: Not 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 NOLA liquidity locked?
Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $44.6K.
Who holds NOLA?
As of Sep 4, 2026, the 10 largest holders own 37.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 Nola?
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