Quantum Audit Logo
Launch App

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

Is Bluzelle Token Safe?

BLZEthereum
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 5, 2026 · 1 audit on record
Critical RiskHow is this score calculated?
SummaryAI Copilot

The Bluzelle Token contract implements a standard ERC-20 token with additional access control mechanisms and a finalization state.

Read the full analysis
What raised the score
  • Ownership not renounced — owner is an EOA
  • Top-10 concentration > 50%
  • LP top1 unlocked holder = 90.5%
  • LP top3 unlocked holders = 99.1%
  • LP claimed locked but only 0.0% actually locked
  • 2 High finding(s) from audit
  • 3 Medium finding(s) from audit
  • 2 Low finding(s) from audit
Exact factors
  • Ownership NOT renounced — owner is an EOA (single private key)
  • Top-10 concentration > 50% (75.0% total → 69.9% effective; 66.5% in EOAs, 8.4% in contracts — heavy)
  • LP top1 unlocked holder = 90.5% (independent LP — depth risk, pool = 50% of DEX liquidity)
  • LP top3 unlocked holders = 99.1% (independent LP — depth risk, pool = 50% of DEX liquidity)
  • LP claimed locked but only 0.0% actually locked
  • 2 High finding(s) from audit
  • 3 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 56 of 7 checks passed
Contract verifiedVerified
OwnershipRetained
MintNo mint
Liquidity lockLocked
UpgradeabilityFixed code
HoneypotNone found
Buy / sell tax0% / 0%

Holders

as of audit · Sep 5, 2026
8.4%Contracts66.5%Wallets25.0%Everyone else
8.4%66.5%Wallets25.0%Everyone else
ContractsWalletsEveryone elseBubble area = share of supply
75.0%of supply sits with the top 10 holders
  • Contractstreasury, vesting, bridge, staking8.4%
  • Walletsanonymous holders, free to sell66.5%
  • Everyone elsethe rest of the supply25.0%
Effective concentrationwhat the score reads69.9%
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 5, 2026

Liquidity

as of audit · Sep 5$415.0K across 5 pairs
LP tokensLocked

The LP tokens of the analysed pool are locked or burned.

Analysed pool$208.0KShare of depth50.1%
Top-1 Unlocked Holder90.5%
Top-3 Unlocked99.1%
Unlocked LP held by
0xe963…239f0xa0fd…abb30x3ca5…2c0e0xd9c5…b49a0xf7c9…809f0x7637…c02d

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

Security Findings

2 High3 Medium2 Low1 Info
High

Outdated Solidity Compiler Version

The contract uses Solidity ^0.4.18, which is an extremely old version. Newer compiler versions (e.g., 0.8.x) include critical bug fixes, security enhancements (like default overflow/underflow checks), and gas optimizations that are absent in older versions. Using an outdated compiler increases the risk of undiscovered vulnerabilities and makes the code harder to maintain and integrate with modern tooling.H-01

Issue

The contract uses Solidity ^0.4.18, which is an extremely old version. Newer compiler versions (e.g., 0.8.x) include critical bug fixes, security enhancements (like default overflow/underflow checks), and gas optimizations that are absent in older versions. Using an outdated compiler increases the risk of undiscovered vulnerabilities and makes the code harder to maintain and integrate with modern tooling.

Fix

Upgrade the Solidity compiler version to a recent stable release (e.g., 0.8.x). This will require careful testing and potentially minor code adjustments to ensure compatibility and leverage new features. A full re-audit should be performed after the upgrade.

Status

Unresolved

High

Centralized Control Over Transfers Before Finalization

The validateTransfer function, active before the finalize() function is called, restricts all token transfers such that only the owner or opsAddress can initiate transfers, unless the recipient is the owner. This grants significant centralized control over token movement, posing a high risk if the owner's or ops address's private key is compromised or if the owner acts maliciously. This central point of control could lead to a denial of service for token holders or unauthorized censorship of transfers.H-02

Issue

The validateTransfer function, active before the finalize() function is called, restricts all token transfers such that only the owner or opsAddress can initiate transfers, unless the recipient is the owner. This grants significant centralized control over token movement, posing a high risk if the owner's or ops address's private key is compromised or if the owner acts maliciously. This central point of control could lead to a denial of service for token holders or unauthorized censorship of transfers.

Fix

Clearly document this centralized control phase and its implications for token holders. Consider implementing a multi-signature wallet for the owner and opsAddress to distribute control and reduce the risk of a single point of failure. Ensure a robust process for the finalize() call to transition to a decentralized transfer state.

Status

Unresolved

Medium

ERC-20 approve() Race Condition Vulnerability

The standard ERC-20 approve() function is susceptible to a known front-running attack. If a user increases an allowance for a spender, an attacker can front-run the transaction, spend the original allowance, and then the user's new allowance transaction will grant the attacker an additional allowance, effectively doubling the intended allowance. This can lead to unintended token loss if not handled carefully by users.M-01

Issue

The standard ERC-20 approve() function is susceptible to a known front-running attack. If a user increases an allowance for a spender, an attacker can front-run the transaction, spend the original allowance, and then the user's new allowance transaction will grant the attacker an additional allowance, effectively doubling the intended allowance. This can lead to unintended token loss if not handled carefully by users.

Fix

Advise users to always set an allowance to zero before increasing it. Alternatively, implement increaseAllowance() and decreaseAllowance() functions, which are safer alternatives to directly setting allowances and mitigate this race condition.

Status

Unresolved

Medium

Missing Zero-Address Check in approve()

The approve function allows setting an allowance for address(0). While not directly exploitable for token theft, approving the zero address could lead to tokens being permanently inaccessible by the intended spender if this address is used by mistake, as address(0) cannot execute transactions. This could result in a loss of functionality or perceived token loss.M-02

Issue

The approve function allows setting an allowance for address(0). While not directly exploitable for token theft, approving the zero address could lead to tokens being permanently inaccessible by the intended spender if this address is used by mistake, as address(0) cannot execute transactions. This could result in a loss of functionality or perceived token loss.

Fix

Add a require(_spender != address(0)) check within the approve function to prevent accidental approval of the zero address.

Status

Unresolved

Medium

Unprotected Division in Math.div()

The Math library's div function does not include a check to prevent division by zero. Although this specific div function is not directly called in the token's core logic in a way that would immediately cause a critical issue (it's used in mul for a check), it represents an incomplete safe math implementation and could lead to runtime errors if used elsewhere or if the mul check logic changes.M-03

Issue

The Math library's div function does not include a check to prevent division by zero. Although this specific div function is not directly called in the token's core logic in a way that would immediately cause a critical issue (it's used in mul for a check), it represents an incomplete safe math implementation and could lead to runtime errors if used elsewhere or if the mul check logic changes.

Fix

Add a require(b != 0) check at the beginning of the div function in the Math library to ensure robust safe math operations.

Status

Unresolved

Low

Lack of increaseAllowance() and decreaseAllowance()

The contract implements the basic approve() function but lacks the safer increaseAllowance() and decreaseAllowance() functions. These functions are considered best practice in modern ERC-20 implementations as they allow atomic adjustments to allowances, reducing the risk associated with the approve() race condition.L-01

Issue

The contract implements the basic approve() function but lacks the safer increaseAllowance() and decreaseAllowance() functions. These functions are considered best practice in modern ERC-20 implementations as they allow atomic adjustments to allowances, reducing the risk associated with the approve() race condition.

Fix

Consider adding increaseAllowance() and decreaseAllowance() functions to provide a safer and more user-friendly way to manage token allowances.

Status

Unresolved

Low

Owner Can Reclaim All Contract-Held Tokens

The reclaimTokens() function allows the contract owner to transfer all tokens held by the BluzelleToken contract itself to the owner's address. While potentially intended for recovery or specific operational needs, this function could be misused if the contract is ever intended to hold tokens for other purposes (e.g., as part of a liquidity pool or escrow), leading to a loss of funds for those purposes.L-02

Issue

The reclaimTokens() function allows the contract owner to transfer all tokens held by the BluzelleToken contract itself to the owner's address. While potentially intended for recovery or specific operational needs, this function could be misused if the contract is ever intended to hold tokens for other purposes (e.g., as part of a liquidity pool or escrow), leading to a loss of funds for those purposes.

Fix

Ensure that the purpose and implications of the reclaimTokens function are clearly documented. If the contract is intended to hold tokens for specific functionalities, consider removing or restricting this function, or implementing a more granular withdrawal mechanism.

Status

Unresolved

Info

Redundant Check in cancelOwnershipTransfer()

The cancelOwnershipTransfer() function includes an if (proposedOwner == address(0)) check before setting proposedOwner = address(0). This check is redundant as the variable is set to address(0) regardless, adding unnecessary complexity without functional benefit.I-01

Issue

The cancelOwnershipTransfer() function includes an if (proposedOwner == address(0)) check before setting proposedOwner = address(0). This check is redundant as the variable is set to address(0) regardless, adding unnecessary complexity without functional benefit.

Fix

Remove the if (proposedOwner == address(0)) condition, as proposedOwner = address(0) can be executed unconditionally.

Status

Unresolved

Analysis

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

The Bluzelle Token contract implements a standard ERC-20 token with additional access control mechanisms and a finalization state. Key features include a two-step ownership transfer, an operational address, and a pre-finalization phase where token transfers are restricted to owner/ops. The contract utilizes a custom SafeMath library for arithmetic operations. While the core ERC-20 functionality is present, the audit identified several areas for improvement, including the use of an outdated Solidity compiler, significant centralization risk before finalization, and standard ERC-20 vulnerabilities like the approve() race condition. The contract's design provides robust access control post-finalization but introduces high centralization risk during its initial phase.

Technical4/10Medium risk

The technical implementation (7.2 Code Security) benefits from a custom Math library to prevent integer overflows/underflows, which is a strong security practice for arithmetic operations. The contract also includes a well-defined two-step ownership transfer mechanism in Owned.sol. However, the use of Solidity ^0.4.18 (7.1 Architecture) is a significant technical debt, as this version lacks modern security features and optimizations. Additionally, the Math.div function (7.2 Code Security) does not include a zero-divisor check, which is an oversight in the safe math implementation.

Governance1/10High risk

The contract exhibits a high degree of centralization (7.3 Access Control, 7.4 Economic) during its initial, non-finalized phase. Before finalize() is called, only the owner or ops address can initiate token transfers, unless the recipient is the owner, giving significant control to a single entity. This poses a substantial risk if the controlling keys are compromised. The reclaimTokens function (7.4 Economic) also allows the owner to unilaterally withdraw all tokens held by the contract, which could be problematic if the contract is intended to hold tokens for other purposes. Post-finalization, the token operates as a standard ERC-20, decentralizing transfer control.

Upgrades4/10Medium risk

This contract is not designed as an upgradeable proxy (7.7 Upgrades), so traditional upgrade safety concerns do not apply. However, the finalized state acts as a one-way, irreversible state transition, altering the token's transfer mechanics from restricted to unrestricted. This mechanism is clearly defined and controlled by the owner, providing a predictable lifecycle for the token's operational phase.

Final RecommendationWhat to do about this score

It is strongly recommended to migrate the contract to a modern Solidity compiler version (e.g., 0.8.x) to benefit from enhanced security features, gas optimizations, and bug fixes.

This migration should be accompanied by a thorough re-audit. Address the centralization risk during the pre-finalization phase by clearly communicating this operational model to users and considering multi-signature wallets for owner/ops addresses. Implement increaseAllowance() and decreaseAllowance() functions to mitigate the approve() race condition and enhance user safety.

Contract & Record

1 audit on record
TypeBluzelleToken
NetworkEthereum
Token age5y
Contract0x5732…d668
Deployer0x004a…18ff
Badge for your website
Bluzelle Token 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 5, 202690Critical

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

Would You Like a More Detailed Audit of Bluzelle Token?

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