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.

On-chain security analysis — is it a scam or legit?
Is Holoworld AI 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 HoloToken contract, an ERC20 token utilizing OpenZeppelin's AccessControl, was audited for security vulnerabilities.
Read the full analysis- Ownership status UNKNOWN
- Mintable supply — no cap found, dilution unbounded
- Top-10 concentration > 30%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 100.0%
- LP top3 unlocked holders = 100.0%
- 1 High finding(s) from audit
- 1 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- 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
Security Checklist
as of audit · Sep 4Holders
as of audit · Sep 4, 2026- Contractstreasury, vesting, bridge, staking91.1%
- Walletsanonymous holders, free to sell4.8%
- Everyone elsethe rest of the supply4.1%
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$509.2K99.2%
- Pancakeswap v3WBNB$4.2K0.8%
- Pancakeswap v2TUT$20.0%
- Pancakeswap v2WBNB$00.0%
The 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.
0x9a92…b7840x6f9d…abd50x371f…2a35No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
HighPAUSER_ROLE Self-Management Allows Privilege Escalation
The _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).H-01
Issue
The _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).
Fix
Change 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.
Status
Unresolved
MediumHigh Centralization of Control
The 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).M-01
Issue
The 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).
Fix
For 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.
Status
Unresolved
LowInitial Role Assignments to EOAs
The 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).L-01
Issue
The 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).
Fix
While 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.
Status
Unresolved
InfoRedundant require in setTransfersEnabled
The 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).I-01
require in setTransfersEnabledIssue
The 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).
Fix
Consider 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').
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The 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.
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).
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.
It is strongly recommended to address the identified access control misconfiguration for the PAUSER_ROLE to prevent potential privilege escalation.
Review the role hierarchy and ensure that critical role management is overseen by higher-level administrative roles, ideally secured by multi-signature wallets or robust governance mechanisms. Furthermore, consider assigning critical administrative roles to multi-signature wallets or governance contracts instead of single externally owned accounts (EOAs) to mitigate centralization risks and enhance operational security. Implement comprehensive testing, especially for access control logic, to validate the intended permissions and prevent unintended behaviors.
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, 202667High
- Aug 12, 202647Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
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 Is this your token? Publish your own audit on this page