This audit covers the IlluviumERC20 token contract. The contract implements a standard ERC-20 token with custom access control, feature flags, and voting power delegation. Key functionalities include minting, burning, transfers, and allowance management. A significant limitation of this audit is the absence of the AccessControl.sol base contract and truncated critical functions (__moveVotingPower, getVotingPowerAt), which prevents a complete security assessment of the access control and voting delegation mechanisms.

On-chain security analysis — is it a scam or legit?
Is Illuvium 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 →This audit covers the IlluviumERC20 token contract. The contract implements a standard ERC-20 token with custom access control, feature flags, and voting power delegation.
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
- 2 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% (58.7% total → 39.1% effective; 26.0% in EOAs, 32.7% in contracts — moderate)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- 2 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, staking32.7%
- Walletsanonymous holders, free to sell26.0%
- Everyone elsethe rest of the supply41.3%
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.
0x8b4d…3f720xe984…1cc20xb9a3…19b70xa3b0…bf750x59b2…c3390x5f24…b3460x90f6…0bce0x8582…b7bb0x3e8c…250e0x460a…2919No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
HighIncomplete Access Control Implementation Details
The IlluviumERC20 contract imports AccessControl.sol, but the source code for this critical base contract was not provided. This prevents a full audit of how roles (e.g., ROLE_TOKEN_CREATOR, ROLE_TOKEN_DESTROYER) are assigned, revoked, and how features (e.g., FEATURE_TRANSFERS) are enabled or disabled. The security of core functions like mint and burn heavily relies on the correct and secure implementation of this access control system.H-01
Issue
The IlluviumERC20 contract imports AccessControl.sol, but the source code for this critical base contract was not provided. This prevents a full audit of how roles (e.g., ROLE_TOKEN_CREATOR, ROLE_TOKEN_DESTROYER) are assigned, revoked, and how features (e.g., FEATURE_TRANSFERS) are enabled or disabled. The security of core functions like mint and burn heavily relies on the correct and secure implementation of this access control system.
Fix
Provide the complete source code for the AccessControl.sol contract to allow for a comprehensive security review of the access control mechanisms. Ensure that role management functions are adequately protected and follow best practices for privilege separation.
Status
Unresolved
HighTruncated Critical Logic for Voting Power
The functions __moveVotingPower (an internal function central to voting power updates) and getVotingPowerAt (a public view function) are truncated in the provided source code. This prevents a thorough security analysis of the voting power delegation mechanism, which is a significant feature of this token. Without the full implementation, potential vulnerabilities such as incorrect voting power calculations, manipulation, or denial-of-service attacks cannot be identified.H-02
Issue
The functions __moveVotingPower (an internal function central to voting power updates) and getVotingPowerAt (a public view function) are truncated in the provided source code. This prevents a thorough security analysis of the voting power delegation mechanism, which is a significant feature of this token. Without the full implementation, potential vulnerabilities such as incorrect voting power calculations, manipulation, or denial-of-service attacks cannot be identified.
Fix
Provide the complete source code for __moveVotingPower and getVotingPowerAt to enable a full audit of the voting power delegation logic. Ensure that all calculations are correct, history is properly maintained, and potential edge cases are handled securely.
Status
Unresolved
MediumInconsistent Total Supply Limit
The mint function includes a `require(totalSupply + _value <= type(uint192).max, "total supply overflow (uint192)"); check. While totalSupply is declared as uint256, its maximum value is explicitly limited to type(uint192).max. Individual tokenBalances are also uint256`. This inconsistency in type declaration versus actual limit could lead to confusion or unexpected behavior if not clearly documented, potentially causing mint operations to fail prematurely even if uint256 could accommodate larger values.M-01
Issue
The mint function includes a `require(totalSupply + _value <= type(uint192).max, "total supply overflow (uint192)"); check. While totalSupply is declared as uint256, its maximum value is explicitly limited to type(uint192).max. Individual tokenBalances are also uint256`. This inconsistency in type declaration versus actual limit could lead to confusion or unexpected behavior if not clearly documented, potentially causing mint operations to fail prematurely even if uint256 could accommodate larger values.
Fix
Clarify the design choice behind limiting totalSupply to uint192.max while using uint256 for the variable itself and for tokenBalances. Consider if totalSupply should be uint192 if this is the intended maximum, or if the limit should be removed if uint256 capacity is desired. Ensure this design decision is well-documented.
Status
Unresolved
LowStandard ERC-20 approve Race Condition
The approve function is susceptible to a known front-running attack. If a user approves an allowance of X and then, before the first transaction is mined, sends another transaction to approve Y, a malicious actor could front-run the second transaction. This allows the attacker to spend X tokens, and then the second approve transaction for Y is mined, allowing the attacker to spend Y tokens, effectively spending X + Y instead of just Y.L-01
approve Race ConditionIssue
The approve function is susceptible to a known front-running attack. If a user approves an allowance of X and then, before the first transaction is mined, sends another transaction to approve Y, a malicious actor could front-run the second transaction. This allows the attacker to spend X tokens, and then the second approve transaction for Y is mined, allowing the attacker to spend Y tokens, effectively spending X + Y instead of just Y.
Fix
While increaseAllowance and decreaseAllowance functions are provided to mitigate this, users should be educated to use these functions instead of directly calling approve when modifying an existing allowance. If approve must be used, the best practice is to first set the allowance to zero and wait for that transaction to confirm before setting a new allowance.
Status
Unresolved
InfoCentralized Control over Token Supply and Features
The contract design grants significant centralized control to addresses holding specific roles, such as ROLE_TOKEN_CREATOR (for minting tokens) and ROLE_TOKEN_DESTROYER (for burning tokens). Additionally, administrators can enable or disable core token features (e.g., transfers, burns) via feature flags. This level of centralization, while offering flexibility in managing the token, introduces a single point of failure and relies heavily on the trustworthiness and security practices of the entities controlling these roles.I-01
Issue
The contract design grants significant centralized control to addresses holding specific roles, such as ROLE_TOKEN_CREATOR (for minting tokens) and ROLE_TOKEN_DESTROYER (for burning tokens). Additionally, administrators can enable or disable core token features (e.g., transfers, burns) via feature flags. This level of centralization, while offering flexibility in managing the token, introduces a single point of failure and relies heavily on the trustworthiness and security practices of the entities controlling these roles.
Fix
Clearly document the roles, their associated privileges, and the process for assigning/revoking these roles. Consider implementing a multi-signature wallet or a decentralized governance mechanism for critical roles and feature management to reduce centralization risks over time.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The IlluviumERC20 contract demonstrates good adherence to the ERC-20 standard, including proper event emissions and robust checks for common arithmetic overflows/underflows in increaseAllowance and decreaseAllowance. The implementation of safeTransferFrom with an onERC20Received callback enhances compatibility with contract recipients (7.2 Code Security). However, the audit is significantly hampered by the absence of the AccessControl.sol base contract, making it impossible to fully evaluate the security of role management and feature toggles (7.3 Access Control). Additionally, critical functions related to voting power delegation, such as __moveVotingPower and getVotingPowerAt, are truncated, preventing a comprehensive review of this core functionality (7.1 Architecture, 7.2 Code Security).
The contract design incorporates a custom access control system with distinct roles such as ROLE_TOKEN_CREATOR and ROLE_TOKEN_DESTROYER, granting significant power over the token supply to specific addresses (7.5 Governance). Feature flags allow administrators to enable or disable core functionalities like transfers and burns, introducing a centralized point of control over the token's operational parameters (7.5 Governance). While this offers flexibility, it also concentrates power, which could pose a risk if these roles are compromised or misused (7.4 Economic). The voting power delegation mechanism, though partially obscured by truncated code, aims to decentralize governance influence (7.5 Governance).
The IlluviumERC20 contract is implemented as a standard, non-upgradeable token contract (7.7 Upgrades). It does not utilize any proxy patterns (e.g., UUPS, Transparent) or other upgrade mechanisms. Consequently, any future modifications or bug fixes would necessitate the deployment of an entirely new contract and a migration of token holders, which is a standard approach for non-upgradeable contracts and carries no inherent upgrade-specific risks.
To ensure the highest level of security and transparency, it is crucial to provide the complete source code for all imported and truncated contracts, especially AccessControl.sol and the full implementations of __moveVotingPower and getVotingPowerAt.
A thorough review of these components is essential to verify the integrity of access control and voting delegation. Additionally, consider documenting the rationale behind the uint192.max totalSupply limit and educate users about the safer increaseAllowance/decreaseAllowance functions to mitigate known ERC-20 approve race conditions.
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, 202657Medium
- Aug 17, 202662Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the ILV contract address?
The Illuvium (ILV) contract on Ethereum is 0x767fe9edc9e0df98e07454847909b5e959d7ca0e. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Illuvium a scam?
Quantum Audit's risk score for Illuvium is 57/100 (Medium risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: Mintable; Liquidity lock: Not locked; Upgradeability: Fixed code. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Is ILV liquidity locked?
Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $1.97M.
Who holds ILV?
As of Sep 4, 2026, the 10 largest holders own 58.7% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of Illuvium?
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