Quantum Audit Logo
Launch App

On-chain security analysis — is it a scam or legit?

Is Randy Safe?

RANDYBNB Chain
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 →
Last checked Sep 4, 2026 · 1 audit on record
SummaryAI Copilot

The FlapTaxTokenV3 contract implements an upgradeable ERC20 token with dynamic tax mechanisms and a multi-state pool system.

Read the full analysis
What raised the score
  • Proxy contract
  • Non-standard proxy storage
  • 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 = 100.0%
  • LP top3 unlocked holders = 100.0%
  • Token age < 30 days
  • 2 High finding(s) from audit
  • 2 Medium finding(s) from audit
Exact factors
  • Proxy contract (upgradeable — admin can replace logic)
  • Non-standard proxy storage (Etherscan-confirmed)
  • Top-10 concentration > 20% (40.2% total → 26.0% effective; 16.6% in EOAs, 23.6% in contracts — mild)
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • Liquidity < $50k ($48,629 across 2 pairs — thin market)
  • LP top1 unlocked holder = 100.0% (independent LP — depth risk)
  • LP top3 unlocked holders = 100.0% (independent LP — depth risk)
  • Token age < 30 days (still settling)
  • 2 High finding(s) from audit
  • 2 Medium 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 45 of 7 checks passed
Contract verifiedVerified
OwnershipRenounced
MintNo mint
Liquidity lockNot locked
UpgradeabilityUpgradeable
HoneypotNone found
Buy / sell tax0% / 0%

Holders

as of audit · Sep 4, 2026
23.6%Contracts16.6%Wallets59.8%Everyone else
23.6%Contracts16.6%Wallets59.8%Everyone else
ContractsWalletsEveryone elseBubble area = share of supply
40.2%of supply sits with the top 10 holders
  • Contractstreasury, vesting, bridge, staking23.6%
  • Walletsanonymous holders, free to sell16.6%
  • Everyone elsethe rest of the supply59.8%
Effective concentrationwhat the score reads26.0%
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$48.6K across 2 pairs

The risk score reads depth across every pair.

LP tokensNot locked

The LP tokens of the analysed pool are not locked or burned, so whoever holds them can withdraw that liquidity.

Analysed pool$48.6KShare of depth100.0%
Top-1 Unlocked Holder100.0%
Top-3 Unlocked100.0%
Unlocked LP held by
0xc502…1e28

No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.

Security Findings

2 High2 Medium1 Info
High

Reentrancy Vulnerability in _liquidateTax

The _liquidateTax function performs an external call to _processTax(taxAmount) on the taxProcessor contract. Before this call, currentPoolState.notLiquidating is set to false, and after the call, it is reset to true. If the taxProcessor contract is malicious or compromised, it could re-enter _liquidateTax or other functions in FlapTaxTokenV3 before notLiquidating is reset. This could lead to unexpected state changes, double-spending of collected taxes, or other malicious actions. This is a classic reentrancy pattern (7.2 Code Security, 7.6 External).H-01

Issue

The _liquidateTax function performs an external call to _processTax(taxAmount) on the taxProcessor contract. Before this call, currentPoolState.notLiquidating is set to false, and after the call, it is reset to true. If the taxProcessor contract is malicious or compromised, it could re-enter _liquidateTax or other functions in FlapTaxTokenV3 before notLiquidating is reset. This could lead to unexpected state changes, double-spending of collected taxes, or other malicious actions. This is a classic reentrancy pattern (7.2 Code Security, 7.6 External).

Fix

Implement a reentrancy guard (e.g., OpenZeppelin's ReentrancyGuard) on the _liquidateTax function or ensure that all state changes related to notLiquidating are completed *before* any external calls are made. Alternatively, consider a 'checks-effects-interactions' pattern.

Status

Unresolved

High

Incorrect taxExpirationTime Calculation in finalizeMigration

In the finalizeMigration function, the taxExpirationTime is updated with currentPoolState.taxExpirationTime + block.timestamp. The currentPoolState.taxExpirationTime is initialized with params.taxDuration in initialize. Adding block.timestamp to an already set duration (which is likely intended to be a future timestamp) will result in an incorrect and potentially extremely long or unintended expiration time. This logic error could lead to taxes being enforced for a much longer period than intended, impacting the token's economic model (7.4 Economic, 7.2 Code Security).H-02

Issue

In the finalizeMigration function, the taxExpirationTime is updated with currentPoolState.taxExpirationTime + block.timestamp. The currentPoolState.taxExpirationTime is initialized with params.taxDuration in initialize. Adding block.timestamp to an already set duration (which is likely intended to be a future timestamp) will result in an incorrect and potentially extremely long or unintended expiration time. This logic error could lead to taxes being enforced for a much longer period than intended, impacting the token's economic model (7.4 Economic, 7.2 Code Security).

Fix

The taxExpirationTime should be set to block.timestamp + params.taxDuration (or a similar calculation based on the intended duration from the current time) in finalizeMigration, not currentPoolState.taxExpirationTime + block.timestamp. Review the intended behavior for taxExpirationTime and correct the calculation accordingly.

Status

Unresolved

Medium

Significant Centralized Control by Owner

The owner role has extensive control over critical contract functions, including startMigration and finalizeMigration, which dictate the transition between different PoolStates. The owner also controls the taxProcessor and dividendContract addresses through initialization parameters. While this may be intended for initial setup and operational flexibility, it introduces a single point of failure and trust. A compromised owner key could lead to unauthorized state changes or manipulation of the token's economic model (7.3 Access Control, 7.5 Governance).M-01

Issue

The owner role has extensive control over critical contract functions, including startMigration and finalizeMigration, which dictate the transition between different PoolStates. The owner also controls the taxProcessor and dividendContract addresses through initialization parameters. While this may be intended for initial setup and operational flexibility, it introduces a single point of failure and trust. A compromised owner key could lead to unauthorized state changes or manipulation of the token's economic model (7.3 Access Control, 7.5 Governance).

Fix

Consider implementing a multi-signature wallet for the owner role to reduce the risk associated with a single point of compromise. As the protocol matures, explore decentralizing control through a governance mechanism or time-locked operations for critical functions.

Status

Unresolved

Medium

Potential Integer Overflow in uint48/uint64 Expiration Times

The taxExpirationTime (uint64) and antiFarmerExpirationTime (uint48) variables store timestamps. Calculations like block.timestamp + antiFarmerDuration (where antiFarmerDuration is uint256) could potentially result in values exceeding the maximum capacity of uint48 or uint64 if the durations are extremely long. While block.timestamp itself is typically within uint48 range for many years, adding a very large antiFarmerDuration could cause an overflow, leading to incorrect expiration times (7.2 Code Security, 7.4 Economic).M-02

Issue

The taxExpirationTime (uint64) and antiFarmerExpirationTime (uint48) variables store timestamps. Calculations like block.timestamp + antiFarmerDuration (where antiFarmerDuration is uint256) could potentially result in values exceeding the maximum capacity of uint48 or uint64 if the durations are extremely long. While block.timestamp itself is typically within uint48 range for many years, adding a very large antiFarmerDuration could cause an overflow, leading to incorrect expiration times (7.2 Code Security, 7.4 Economic).

Fix

Ensure that antiFarmerDuration and taxDuration parameters are constrained to values that, when added to block.timestamp, will not exceed the maximum values of uint48 or uint64. Alternatively, consider using uint256 for all timestamp-related variables if extremely long durations (beyond ~136 years for uint48 or ~584 billion years for uint64) are a design requirement, or implement explicit overflow checks.

Status

Unresolved

Info

High Complexity in _liquidateTax and Pool State Machine

The _liquidateTax function is invoked on every transfer to mainPool and is responsible for multiple state transitions, tax processing, and liquidation logic. The overall PoolState machine, with its five distinct states and various transition conditions, adds significant complexity to the contract. Complex logic increases the surface area for potential bugs and makes auditing and reasoning about the contract's behavior more challenging (7.1 Architecture, 7.2 Code Security).I-01

Issue

The _liquidateTax function is invoked on every transfer to mainPool and is responsible for multiple state transitions, tax processing, and liquidation logic. The overall PoolState machine, with its five distinct states and various transition conditions, adds significant complexity to the contract. Complex logic increases the surface area for potential bugs and makes auditing and reasoning about the contract's behavior more challenging (7.1 Architecture, 7.2 Code Security).

Fix

Consider refactoring _liquidateTax into smaller, more focused functions to improve readability and maintainability. Thoroughly document the state machine transitions and their conditions to ensure clarity and prevent unintended behavior. Implement comprehensive unit tests for all state transitions and tax calculation scenarios.

Status

Unresolved

Analysis

AI Copilotas of audit · Sep 4
Executive SummaryWhat the contract is and what the review found

The FlapTaxTokenV3 contract implements an upgradeable ERC20 token with dynamic tax mechanisms and a multi-state pool system. The audit identified a critical reentrancy vulnerability in the tax liquidation process and a significant logical error in the calculation of tax expiration times during state transitions. These issues pose substantial risks to the contract's integrity and economic model.

Technical6/10Medium risk

The contract utilizes OpenZeppelin's upgradeable standards for ERC20 and access control, demonstrating a commitment to established patterns (7.1 Architecture). The tax calculation logic is generally sound, and packed storage is used for efficiency (7.2 Code Security). However, a significant reentrancy vulnerability exists in the _liquidateTax function due to an external call to _processTax without a reentrancy guard, potentially allowing malicious re-entry before state updates are complete. Additionally, the calculation of taxExpirationTime in finalizeMigration is incorrect, leading to an unintended and potentially exploitable duration (7.2 Code Security).

Governance4/10Medium risk

The contract implements a multi-state system for tax enforcement and migration, with onlyOwner functions controlling key state transitions (startMigration, finalizeMigration) (7.5 Governance). This provides centralized control over the token's operational phases. The economic model involves dynamic buy/sell taxes and a liquidation mechanism for collected taxes (7.4 Economic). A potential issue exists where uint48/uint64 expiration times could overflow if antiFarmerDuration or taxExpirationTime are set to extremely large values, although this is less likely with typical durations (7.4 Economic).

Upgrades4/10Medium risk

The contract is designed as an upgradeable proxy using OpenZeppelin's Initializable pattern (7.7 Upgrades). The constructor correctly calls _disableInitializers(), and the initialize function sets up the contract state appropriately. This adherence to established upgradeability patterns minimizes common upgrade-related risks.

Final RecommendationWhat to do about this score

Address the reentrancy vulnerability in _liquidateTax by implementing a reentrancy guard before the external call to _processTax.

Correct the taxExpirationTime calculation in finalizeMigration to ensure accurate duration setting. Review the potential for integer overflow in time-related variables and consider using uint256 for durations if extremely long periods are intended.

Contract & Record

1 audit on record
TypeFlapTaxTokenV3
NetworkBNB Chain
Token age7d
Contract0x4154…7777
Deployer0x7eaf…4837
Proxy Upgrade Controls
Proxy TypeEtherscan Detected Custom
ImplementationVerified source
Badge for your website
Randy security record badge

Free for any token on the record. It links to this page and always shows the current score and the date it was checked.

Audit History
  1. Sep 4, 202666High
  2. Sep 2, 202647Medium

Score changes are recorded as dated snapshots — history is append-only and cannot be edited.

Frequently Asked Questions

What is the RANDY contract address?

The Randy contract on BNB Chain is 0x4154b19017a63d054ad1888bbde1e188253a7777. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.

Is Randy a scam?

Quantum Audit's risk score for Randy is 66/100 (High 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: Not locked; Upgradeability: Upgradeable; 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 RANDY liquidity locked?

Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $48.6K.

Who holds RANDY?

As of Sep 4, 2026, the 10 largest holders own 40.2% of the supply. The Holders section on this page shows who they are by holder type.

Would You Like a More Detailed Audit of Randy?

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