Quantum Audit Logo

Is Holoworld AI Safe?

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

Is this your token? Publish your own audit on this page →

Holoworld AI HOLO
0x1a5d…9497
BNB Chain Not verifiedLast checked 3d ago 1 audit on record
Executive SummaryAI Copilot

The HoloToken contract, an ERC20 token utilizing OpenZeppelin's AccessControl, was audited for security vulnerabilities. The contract implements custom roles for administration, pausing, and minting, along with a maximum supply and transfer control mechanisms. Key findings include a high-severity access control misconfiguration allowing PAUSER_ROLE self-management, and medium-severity centralization risks due to powerful privileged roles. The contract demonstrates good use of established libraries and clear logic, but the identified access control and centralization issues warrant immediate attention to enhance the protocol's security posture.

1 High1 Medium1 Low1 Informational
Volume 24h
$86.9K
Liquidity
$509.2K
Price
$0.06307
Token Age
11mo
Top 10 Holders
95.9%

Security Findings

High

PAUSER_ROLE Self-Management Allows Privilege Escalation

H-01The `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)` configuration in the constructor allows any account holding the `PAUSER_ROLE` to grant or revoke `PAUSER_ROLE` to/from other addresses. This bypasses the oversight of the `DEFAULT_ADMIN_ROLE` and `ADMIN_ROLE` for managing pausers. A compromised PAUSER could add more malicious PAUSERs or remove legitimate ones, effectively taking full control of the pausing mechanism without higher administrative approval (7.3 Access Control).
IssueThe `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)` configuration in the constructor allows any account holding the `PAUSER_ROLE` to grant or revoke `PAUSER_ROLE` to/from other addresses. This bypasses the oversight of the `DEFAULT_ADMIN_ROLE` and `ADMIN_ROLE` for managing pausers. A compromised PAUSER could add more malicious PAUSERs or remove legitimate ones, effectively taking full control of the pausing mechanism without higher administrative approval (7.3 Access Control).
FixChange the admin role for `PAUSER_ROLE` to a higher-level administrative role, such as `DEFAULT_ADMIN_ROLE` or `ADMIN_ROLE`. For example, `_setRoleAdmin(PAUSER_ROLE, ADMIN_ROLE);` would ensure that only accounts with `ADMIN_ROLE` can manage the `PAUSER_ROLE`.
StatusUnresolved
Medium

High Centralization of Control

M-01The contract design relies heavily on privileged roles (`DEFAULT_ADMIN_ROLE`, `ADMIN_ROLE`, `PAUSER_ROLE`, `MINTER_ROLE`). These roles have significant power, including managing other roles, minting tokens up to the maximum supply, and controlling all token transfers (pausing/unpausing, whitelisting). If the private keys associated with these roles (especially if they are EOAs) are compromised, it could lead to severe consequences such as arbitrary minting, denial of service for transfers, or loss of funds (7.5 Governance, 7.8 Operations).
IssueThe contract design relies heavily on privileged roles (`DEFAULT_ADMIN_ROLE`, `ADMIN_ROLE`, `PAUSER_ROLE`, `MINTER_ROLE`). These roles have significant power, including managing other roles, minting tokens up to the maximum supply, and controlling all token transfers (pausing/unpausing, whitelisting). If the private keys associated with these roles (especially if they are EOAs) are compromised, it could lead to severe consequences such as arbitrary minting, denial of service for transfers, or loss of funds (7.5 Governance, 7.8 Operations).
FixFor critical roles, consider assigning them to multi-signature wallets or robust governance contracts instead of single externally owned accounts (EOAs). This distributes control and requires multiple approvals for sensitive operations, significantly reducing the risk of a single point of failure.
StatusUnresolved
Low

Initial Role Assignments to EOAs

L-01The constructor assigns `DEFAULT_ADMIN_ROLE` to `msg.sender` and `ADMIN_ROLE`/`PAUSER_ROLE` to `initialAdmin`/`initialPauser` addresses. If these are externally owned accounts (EOAs), they represent single points of failure. A compromise of any of these EOAs could lead to unauthorized control over critical contract functions (7.8 Operations).
IssueThe constructor assigns `DEFAULT_ADMIN_ROLE` to `msg.sender` and `ADMIN_ROLE`/`PAUSER_ROLE` to `initialAdmin`/`initialPauser` addresses. If these are externally owned accounts (EOAs), they represent single points of failure. A compromise of any of these EOAs could lead to unauthorized control over critical contract functions (7.8 Operations).
FixWhile common for initial deployment, it is best practice to transfer ownership of critical roles (especially `DEFAULT_ADMIN_ROLE`) to a multi-signature wallet or a well-tested governance contract immediately after deployment. This enhances security by requiring multiple approvals for sensitive actions.
StatusUnresolved
Info

Redundant `require` in `setTransfersEnabled`

I-01The `setTransfersEnabled` function includes `require(transfersEnabled != status, "HoloToken: status not changed");`. This check prevents setting the `transfersEnabled` state variable to its current value. While not harmful, this check is redundant as setting a state variable to its current value has no effect and consumes gas unnecessarily (7.2 Code Security).
IssueThe `setTransfersEnabled` function includes `require(transfersEnabled != status, "HoloToken: status not changed");`. This check prevents setting the `transfersEnabled` state variable to its current value. While not harmful, this check is redundant as setting a state variable to its current value has no effect and consumes gas unnecessarily (7.2 Code Security).
FixConsider removing this `require` statement, as setting a variable to its existing value is a no-op and does not introduce a vulnerability. Alternatively, if the intent is to provide a more specific error, the message could be improved (e.g., 'Transfers are already enabled' or 'Transfers are already disabled').
StatusUnresolved

Category Ratings

TechnicalMedium6/10

The contract leverages battle-tested OpenZeppelin libraries for ERC20 and AccessControl, enhancing code security and adherence to standards (7.2 Code Security). The `_update` override correctly implements conditional transfer logic based on `transfersEnabled` and `transferWhitelist` (7.1 Architecture). However, a significant access control misconfiguration allows any `PAUSER_ROLE` member to manage other `PAUSER_ROLE` members, bypassing higher administrative oversight (7.3 Access Control). This creates a privilege escalation risk within the pauser group.

GovernanceHigh1/10

The token implements a clear `MAX_SUPPLY` and controlled minting via the `MINTER_ROLE`, providing transparency on token issuance (7.4 Economic). However, the system exhibits high centralization, with critical functions like minting, pausing transfers, and managing roles controlled by specific privileged addresses (7.5 Governance). If these addresses are EOAs and become compromised, it poses a substantial risk to the protocol's integrity and user funds (7.8 Operations).

UpgradesHigh3/10

The contract is not designed with an upgrade mechanism (e.g., proxy pattern). Therefore, there are no upgrade-specific risks (7.7 Upgrades). Any future changes to the contract logic would require a new deployment and migration of assets.

Security Checklist

Contract VerifiedPass
Ownership Renounced?
No Mint FunctionFail
Liquidity LockedFail
Not a ProxyPass

Holder Composition

4.8% in wallets91.1% in contracts
Effective Concentration41.3%

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.

Liquidity Depth

The risk score reads depth across every pair. The volume figure and the volume-to-liquidity ratio elsewhere on this page describe only the pair this audit analysed, so the two are not directly comparable.

LP Distribution

Top-1 Unlocked Holder100.0%
Top-3 Unlocked100.0%

Key Addresses

Deployer
0x335b…c0dc
Unlocked LP Held By
0x9a92…b7840x6f9d…abd50x371f…2a35

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

What Raised This Score

  • Ownership status UNKNOWN (owner could not be resolved)
  • Mintable supply — no cap found, dilution unbounded
  • Top-10 concentration > 30% (95.9% total → 41.3% effective; 4.8% in EOAs, 91.1% in contracts — moderate)
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • LP top1 unlocked holder = 100.0% (independent LP — depth risk, pool = 99% of DEX liquidity)
  • LP top3 unlocked holders = 100.0% (independent LP — depth risk, pool = 99% of DEX liquidity)
  • 1 High 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

Related Audits

Quack AI Token (Q)High RiskPowerHigh RiskXPULSHigh RiskHana Token (HANA)High RiskUpstarty (UPY)High RiskBillions Network Token (BILL)High Risk

Would You Like a More Detailed Audit of Holoworld AI?

Our AI-powered scanner gives you a deeper, real-time smart contract analysis — free, with every scoring factor shown.

Get Detailed Audit