The ZKC token contract implements an upgradeable ERC-20 token with a custom epoch-based emission schedule and role-based access control. The audit identified several high and medium severity issues primarily related to tokenomics design, centralization of control, and potential for misinterpretation of core functions. Key concerns include a non-standard totalSupply() implementation, significant centralization risks in initial token distribution and critical parameter initialization, and reliance on an unaudited external library for core emission logic.

On-chain security analysis — is it a scam or legit?
Is ZK Coin 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 ZKC token contract implements an upgradeable ERC-20 token with a custom epoch-based emission schedule and role-based access control.
Read the full analysis- Ownership status UNKNOWN
- Proxy contract
- Top-10 concentration > 70%
- LP lock status UNKNOWN — the pool's LP could not be read
- 2 High finding(s) from audit
- 3 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Ownership status UNKNOWN (owner could not be resolved)
- Proxy contract (upgradeable — admin can replace logic)
- Top-10 concentration > 70% (100.0% total → 100.0% effective; 100.0% in EOAs, 0.0% in contracts — extreme)
- LP lock status UNKNOWN — the pool's LP could not be read
- 2 High finding(s) from audit
- 3 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- Walletsanonymous holders, free to sell100.0%
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.
Whether the LP tokens are locked could not be determined.
Security Findings
HighMisleading totalSupply() Implementation
The totalSupply() function overrides the standard ERC-20 behavior by returning a *projected* supply based on the current epoch's calculated emissions (getSupplyAtEpochStart(getCurrentEpoch())), rather than the actual number of tokens minted and in circulation (super.totalSupply()). This deviation from the ERC-20 standard can lead to significant confusion for users, incorrect calculations by external protocols, and misrepresentation of the token's true circulating supply. The actual minted supply is available via claimedTotalSupply(), but this requires specific knowledge of the contract's non-standard implementation.H-01
totalSupply() ImplementationIssue
The totalSupply() function overrides the standard ERC-20 behavior by returning a *projected* supply based on the current epoch's calculated emissions (getSupplyAtEpochStart(getCurrentEpoch())), rather than the actual number of tokens minted and in circulation (super.totalSupply()). This deviation from the ERC-20 standard can lead to significant confusion for users, incorrect calculations by external protocols, and misrepresentation of the token's true circulating supply. The actual minted supply is available via claimedTotalSupply(), but this requires specific knowledge of the contract's non-standard implementation.
Fix
It is highly recommended to align totalSupply() with the ERC-20 standard by returning the actual minted supply (super.totalSupply()). If a projected supply is necessary for specific use cases, it should be provided through a clearly named, separate function (e.g., getProjectedSupply()) to avoid ambiguity and maintain ERC-20 compliance.
Status
Unresolved
HighCentralization Risk of Initial Minting
The initialMint function allows initialMinter1 or initialMinter2 to mint the entire INITIAL_SUPPLY to any specified recipients. If either of these initial minter addresses is compromised or acts maliciously, they could mint the entire initial supply to themselves or other unauthorized addresses, leading to a complete loss of control over the initial token distribution.H-02
Issue
The initialMint function allows initialMinter1 or initialMinter2 to mint the entire INITIAL_SUPPLY to any specified recipients. If either of these initial minter addresses is compromised or acts maliciously, they could mint the entire initial supply to themselves or other unauthorized addresses, leading to a complete loss of control over the initial token distribution.
Fix
Implement multi-signature control for the initialMinter1 and initialMinter2 roles to distribute trust and prevent single points of failure. Alternatively, consider a more decentralized initial distribution mechanism or a time-locked release schedule for the initial supply.
Status
Unresolved
MediumCritical epoch0StartTime Initialization
The epoch0StartTime variable, which dictates the entire token emission schedule, is set only once via the initializeV3() reinitializer. This function is restricted to the ADMIN_ROLE. The precise timing of this initialization is critical; an accidental delay or premature call could significantly alter the intended tokenomics and emission curve. This represents a single point of operational risk.M-01
epoch0StartTime InitializationIssue
The epoch0StartTime variable, which dictates the entire token emission schedule, is set only once via the initializeV3() reinitializer. This function is restricted to the ADMIN_ROLE. The precise timing of this initialization is critical; an accidental delay or premature call could significantly alter the intended tokenomics and emission curve. This represents a single point of operational risk.
Fix
Establish clear, documented operational procedures for the initializeV3() call, including a specific window for execution. Consider adding a time-lock or a multi-signature requirement for this critical function to ensure careful deliberation before execution. Implement monitoring to detect any unintended delays or premature calls.
Status
Unresolved
MediumReliance on Unaudited Supply Library for Core Tokenomics
The contract's core tokenomics, including the calculation of total supply at each epoch (getSupplyAtEpochStart) and epoch-specific emissions (getEmissionsForEpoch), are delegated to an external Supply library. The source code for this library was not provided for audit. Without a thorough review of the Supply library, the accuracy, security, and economic soundness of the token's emission schedule cannot be fully verified. Any vulnerabilities or incorrect logic within this library would directly impact the ZKC token.M-02
Supply Library for Core TokenomicsIssue
The contract's core tokenomics, including the calculation of total supply at each epoch (getSupplyAtEpochStart) and epoch-specific emissions (getEmissionsForEpoch), are delegated to an external Supply library. The source code for this library was not provided for audit. Without a thorough review of the Supply library, the accuracy, security, and economic soundness of the token's emission schedule cannot be fully verified. Any vulnerabilities or incorrect logic within this library would directly impact the ZKC token.
Fix
Provide the complete source code for the Supply library for a comprehensive security and economic audit. Ensure the library's logic is thoroughly tested, especially for edge cases in epoch calculations and emission rates.
Status
Unresolved
MediumCentralized Control over Key Roles and Upgrades
The ADMIN_ROLE holds extensive power, including the ability to grant POVW_MINTER_ROLE and STAKING_MINTER_ROLE, set the critical epoch0StartTime, and authorize contract upgrades via _authorizeUpgrade. This high degree of centralization means that a compromise of the ADMIN_ROLE address could lead to significant security breaches, including unauthorized minting, alteration of tokenomics, or malicious contract upgrades.M-03
Issue
The ADMIN_ROLE holds extensive power, including the ability to grant POVW_MINTER_ROLE and STAKING_MINTER_ROLE, set the critical epoch0StartTime, and authorize contract upgrades via _authorizeUpgrade. This high degree of centralization means that a compromise of the ADMIN_ROLE address could lead to significant security breaches, including unauthorized minting, alteration of tokenomics, or malicious contract upgrades.
Fix
Implement multi-signature control for the ADMIN_ROLE to distribute trust and reduce the risk associated with a single point of failure. Consider separating critical responsibilities into distinct roles with different access policies, if feasible, to further decentralize control.
Status
Unresolved
LowPotential for Reward Claiming Logic Misinterpretation
The functions getTotalPoVWEmissionsAtEpochStart and getTotalStakingEmissionsAtEpochStart calculate the *cumulative* total emissions available up to a given epoch. These are then used to check against poVWClaimed and stakingClaimed, which are also *cumulative* totals of claimed rewards. While this logic appears consistent for cumulative tracking, the function names might be misinterpreted by developers or auditors as representing *epoch-specific* emissions, potentially leading to confusion or incorrect assumptions about the reward distribution mechanism.L-01
Issue
The functions getTotalPoVWEmissionsAtEpochStart and getTotalStakingEmissionsAtEpochStart calculate the *cumulative* total emissions available up to a given epoch. These are then used to check against poVWClaimed and stakingClaimed, which are also *cumulative* totals of claimed rewards. While this logic appears consistent for cumulative tracking, the function names might be misinterpreted by developers or auditors as representing *epoch-specific* emissions, potentially leading to confusion or incorrect assumptions about the reward distribution mechanism.
Fix
Enhance clarity by either renaming the functions to explicitly indicate cumulative totals (e.g., getOverallPoVWEmissionsUpToEpoch) or by adding comprehensive NatSpec documentation to explain that these functions return cumulative values, not epoch-specific ones.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract leverages battle-tested OpenZeppelin upgradeable libraries for ERC-20, access control, and UUPS proxy patterns, contributing to a robust technical foundation (7.1 Architecture, 7.2 Code Security). Solidity 0.8.26 mitigates common integer overflow/underflow risks. However, a critical design choice for totalSupply() deviates from the ERC-20 standard, returning a projected value instead of the actual minted supply, which can cause integration issues (7.1 Architecture, 7.2 Code Security). The reliance on an unaudited Supply library for core emission calculations introduces an unverified dependency (7.6 External).
The tokenomics design includes an epoch-based emission schedule with distinct roles for PoVW and Staking minters (7.4 Economic). Initial token distribution is managed by two designated minters, which presents a high centralization risk if these addresses are compromised (7.3 Access Control). The ADMIN_ROLE holds significant power, controlling critical parameters like epoch0StartTime and all minter roles, creating a single point of failure (7.3 Access Control, 7.5 Governance). While the reward claiming logic appears cumulatively consistent, its naming could lead to misinterpretation regarding epoch-specific allocations (7.4 Economic).
The contract utilizes the UUPS upgradeable proxy pattern, allowing for future logic updates (7.7 Upgrades). Upgrade authorization is appropriately restricted to the ADMIN_ROLE via _authorizeUpgrade, ensuring controlled evolution of the contract (7.3 Access Control, 7.7 Upgrades). The use of OpenZeppelin's Initializable and reinitializer patterns helps manage state transitions across upgrades. However, the centralized control of the ADMIN_ROLE for upgrades means that a compromise of this role could lead to unauthorized and potentially malicious contract changes (7.7 Upgrades).
It is strongly recommended to address the high-severity issues, particularly the non-standard totalSupply() implementation and the centralization risks associated with initial minters.
A thorough audit of the Supply library is crucial to validate the core tokenomics. Consider implementing multi-signature control for critical roles like ADMIN_ROLE and initial minters to mitigate centralization risks. Enhance documentation for the totalSupply() function and reward claiming logic to prevent misinterpretation by integrators and users. Ensure robust operational procedures are in place for the epoch0StartTime initialization.
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, 202683High
- Aug 31, 202684High
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the ZKC contract address?
The ZK Coin (ZKC) contract on Ethereum is 0x000006c2a22ff4a44ff1f5d0f2ed65f781f55555. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is ZK Coin a scam?
Quantum Audit's risk score for ZK Coin is 83/100 (High risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: No mint; Upgradeability: Upgradeable; Honeypot: None found; Buy / sell tax: 0% / 0%. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Who holds ZKC?
As of Sep 4, 2026, the 10 largest holders own 100.0% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of ZK Coin?
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