The audit covers an ERC-20 token contract, Nillion, implemented as an upgradeable UUPS proxy. The contract utilizes OpenZeppelin's battle-tested libraries for ERC-20, burnable functionality, access control, and upgradeability. Key roles such as DEFAULT_ADMIN_ROLE, MINTER_ROLE, BURNER_ROLE, and UPGRADER_ROLE are initially assigned to the deployer address, creating a highly centralized control structure. While the code itself is well-structured, this centralization introduces significant economic and operational risks, particularly concerning unlimited minting, arbitrary burning, and unchecked upgrade capabilities.

On-chain security analysis — is it a scam or legit?
Is Nillion 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 audit covers an ERC-20 token contract, Nillion, implemented as an upgradeable UUPS proxy.
Read the full analysis- Ownership status UNKNOWN
- Mintable supply — no cap found, dilution unbounded
- Proxy contract
- LP lock status UNKNOWN — the pool's LP could not be read
- 3 High finding(s) from audit
- 1 Medium finding(s) from audit
Exact factors
- Ownership status UNKNOWN (owner could not be resolved)
- Mintable supply — no cap found, dilution unbounded
- Proxy contract (upgradeable — admin can replace logic)
- LP lock status UNKNOWN — the pool's LP could not be read
- 3 High finding(s) from audit
- 1 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 4Holders
as of audit · Sep 4, 2026How the supply is spread across holders could not be read — the indexer's holder list does not add up to the supply. Check the largest holders on a block explorer, which reads current balances.
Liquidity
as of audit · Sep 4The risk score reads depth across every pair.
Whether the LP tokens are locked could not be determined.
Security Findings
HighCentralized Control of Critical Roles (Minter, Burner, Upgrader, Admin)
The DEFAULT_ADMIN_ROLE, MINTER_ROLE, BURNER_ROLE, and UPGRADER_ROLE are all initially granted to the msg.sender (initializer). The DEFAULT_ADMIN_ROLE has the power to grant and revoke all other roles, including itself. This high degree of centralization means that a compromise of this single address would grant an attacker full control over token minting, burning (from any address), and contract upgradeability, posing a critical risk to the protocol's integrity and user funds (7.3 Access Control, 7.5 Governance, 7.8 Operations).H-01
Issue
The DEFAULT_ADMIN_ROLE, MINTER_ROLE, BURNER_ROLE, and UPGRADER_ROLE are all initially granted to the msg.sender (initializer). The DEFAULT_ADMIN_ROLE has the power to grant and revoke all other roles, including itself. This high degree of centralization means that a compromise of this single address would grant an attacker full control over token minting, burning (from any address), and contract upgradeability, posing a critical risk to the protocol's integrity and user funds (7.3 Access Control, 7.5 Governance, 7.8 Operations).
Fix
Implement a robust multi-signature wallet (e.g., Gnosis Safe) for the DEFAULT_ADMIN_ROLE to distribute control and require multiple approvals for critical operations. Consider delegating specific roles (e.g., MINTER_ROLE, BURNER_ROLE) to separate, potentially more restricted, entities or smart contracts if their functionality is required long-term.
Status
Unresolved
HighUnlimited Minting Capability
The MINTER_ROLE allows an authorized address to mint an arbitrary amount of new tokens at any time. This capability can lead to uncontrolled supply inflation, significantly devaluing existing tokens and impacting the project's economy (7.4 Economic, 7.3 Access Control).H-02
Issue
The MINTER_ROLE allows an authorized address to mint an arbitrary amount of new tokens at any time. This capability can lead to uncontrolled supply inflation, significantly devaluing existing tokens and impacting the project's economy (7.4 Economic, 7.3 Access Control).
Fix
Evaluate if continuous minting is truly necessary. If not, consider revoking the MINTER_ROLE after the initial token distribution. If minting is required, implement a controlled minting mechanism (e.g., capped minting, time-locked minting, or a governance-controlled minting process) to prevent arbitrary supply increases.
Status
Unresolved
HighArbitrary Token Burning Capability
The BURNER_ROLE allows an authorized address to burn tokens from *any* specified address (from). This means a malicious or compromised BURNER_ROLE holder could drain tokens from user accounts, leading to direct loss of user funds (7.4 Economic, 7.3 Access Control).H-03
Issue
The BURNER_ROLE allows an authorized address to burn tokens from *any* specified address (from). This means a malicious or compromised BURNER_ROLE holder could drain tokens from user accounts, leading to direct loss of user funds (7.4 Economic, 7.3 Access Control).
Fix
Re-evaluate the necessity of the BURNER_ROLE having the ability to burn from arbitrary addresses. If burning is only intended for specific scenarios (e.g., protocol-owned tokens, specific user opt-in), restrict the burn function to only allow burning from msg.sender or implement a more granular access control mechanism. If the functionality is critical, ensure the BURNER_ROLE is controlled by a highly secure, multi-signature wallet.
Status
Unresolved
MediumUpgradeability Risk with Centralized Control
The contract uses the UUPS upgradeability pattern, allowing the contract logic to be changed. The UPGRADER_ROLE is initially granted to the msg.sender (initializer). While UUPS is a standard pattern, a compromised UPGRADER_ROLE holder could upgrade the contract to malicious code, potentially leading to loss of funds, freezing of assets, or other severe consequences (7.7 Upgrades, 7.3 Access Control).M-01
Issue
The contract uses the UUPS upgradeability pattern, allowing the contract logic to be changed. The UPGRADER_ROLE is initially granted to the msg.sender (initializer). While UUPS is a standard pattern, a compromised UPGRADER_ROLE holder could upgrade the contract to malicious code, potentially leading to loss of funds, freezing of assets, or other severe consequences (7.7 Upgrades, 7.3 Access Control).
Fix
Ensure the UPGRADER_ROLE is controlled by a robust multi-signature wallet with a high threshold. Consider implementing a timelock for upgrades to provide users with a window to react to proposed changes. Thoroughly audit all proposed upgrade implementations before deployment.
Status
Unresolved
InfoConstructor _disableInitializers() in Implementation
The Nillion contract's constructor calls _disableInitializers(). This is a good security practice for upgradeable contracts, preventing the implementation contract from being initialized directly, which could lead to state corruption if it were accidentally called (7.2 Code Security).I-01
_disableInitializers() in ImplementationIssue
The Nillion contract's constructor calls _disableInitializers(). This is a good security practice for upgradeable contracts, preventing the implementation contract from being initialized directly, which could lead to state corruption if it were accidentally called (7.2 Code Security).
Fix
No action required; this is a positive security measure.
Status
Resolved
InfoDecimals Override
The decimals() function is explicitly overridden to return 6 instead of the default 18 for ERC-20 tokens. This is a design choice that impacts how the token amount is displayed and handled by interfaces and integrations (7.1 Architecture).I-02
Issue
The decimals() function is explicitly overridden to return 6 instead of the default 18 for ERC-20 tokens. This is a design choice that impacts how the token amount is displayed and handled by interfaces and integrations (7.1 Architecture).
Fix
Ensure all front-ends, exchanges, and integrations are aware of and correctly handle the 6-decimal precision to prevent display errors or miscalculations.
Status
Resolved
Analysis
AI Copilotas of audit · Sep 4The technical architecture is sound, leveraging OpenZeppelin's upgradeable contracts for ERC-20, burnable tokens, and UUPS proxy patterns (7.1 Architecture). The custom logic for burn and decimals is minimal and correctly implemented, and _disableInitializers() is appropriately used in the implementation contract's constructor (7.2 Code Security). However, the UPGRADER_ROLE holds significant power, allowing for arbitrary contract logic changes, which, if compromised, could lead to severe technical vulnerabilities (7.7 Upgrades).
The contract's economic model features an initial supply of 1 billion tokens with 6 decimals. A primary concern is the highly centralized control over critical economic functions (7.4 Economic). The MINTER_ROLE allows for unlimited token inflation, and the BURNER_ROLE permits burning tokens from any address, posing a direct threat to user funds if misused. All these powerful roles, including the DEFAULT_ADMIN_ROLE, are initially assigned to a single address (7.5 Governance), creating a single point of failure and significant governance risk.
The contract employs the UUPS upgradeability pattern, a standard and robust mechanism for contract evolution (7.7 Upgrades). The _authorizeUpgrade function is correctly restricted by the UPGRADER_ROLE. A positive security measure is the use of _disableInitializers() in the implementation contract's constructor to prevent direct initialization. However, the UPGRADER_ROLE is initially held by a single address, which introduces a high risk: a compromise of this address could lead to unauthorized and potentially malicious upgrades, impacting the entire protocol.
Prioritize decentralizing control over critical administrative and operational roles.
Implement a robust multi-signature wallet for the DEFAULT_ADMIN_ROLE, MINTER_ROLE, BURNER_ROLE, and UPGRADER_ROLE to mitigate single points of failure and enhance security. Carefully evaluate the necessity of continuous unlimited minting and arbitrary burning capabilities; if not essential, consider revoking or restricting these roles. For upgrades, consider adding a timelock mechanism to provide a delay for community review before changes are enacted.
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, 202675High
- Jul 28, 202679High
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the NIL contract address?
The Nillion (NIL) contract on Ethereum is 0x7cf9a80db3b29ee8efe3710aadb7b95270572d47. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Nillion a scam?
Quantum Audit's risk score for Nillion is 75/100 (High risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: Mintable; Upgradeability: Upgradeable. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Would You Like a More Detailed Audit of Nillion?
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