The DERC20 contract implements an ERC20 token with voting, permit, and Ownable functionalities. It features a vesting mechanism, an inflation minting system, and a pool locking capability. The contract leverages well-audited OpenZeppelin libraries. Key findings include significant centralized control by the owner, potential precision loss in inflation calculations, and the contract holding a substantial amount of vested tokens. The contract is not upgradeable, which eliminates upgrade-related risks but also limits future flexibility.
On-chain security analysis — is it a scam or legit?
Is Venice Deity 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 DERC20 contract implements an ERC20 token with voting, permit, and Ownable functionalities.
Read the full analysis- Ownership not renounced — owner is a contract
- Top-10 concentration > 20%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 63.0%
- LP top3 unlocked holders = 95.6%
- 1 High finding(s) from audit
- 2 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Ownership NOT renounced — owner is a contract (governance/executor, not an EOA)
- Top-10 concentration > 20% (55.8% total → 23.2% effective; 1.5% in EOAs, 54.3% in contracts — mild)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 63.0% (independent LP — depth risk)
- LP top3 unlocked holders = 95.6% (independent LP — depth risk)
- 1 High finding(s) from audit
- 2 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, staking54.3%
- Walletsanonymous holders, free to sell1.5%
- Everyone elsethe rest of the supply44.2%
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- Uniswap v4WETHAnalysed$105.7K99.9%
- Uniswap v3USDC$830.1%
- Uniswap v4USDC$20.0%
- Uniswap v4ETH$20.0%
- Uniswap v4USDC$20.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.
0x112b…42b90x0dad…d24e0x8ee4…485a0x47b2…e4d50x3934…82e10xcbbb…58350x170f…7cec0x4bfa…49efNo privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
HighCentralized Control by Owner
The owner of the DERC20 contract possesses significant control over critical functionalities and economic parameters. The owner can call mintInflation() (which mints to itself), updateMintRate(), burn() tokens, lockPool(), and unlockPool(). This centralized power allows the owner to unilaterally influence the token's supply, inflation schedule, and transfer restrictions, posing a substantial trust assumption for users and potential for misuse if the owner's keys are compromised or acts maliciously. While the owner is a multisig, the inherent centralization of control remains.H-01
Issue
The owner of the DERC20 contract possesses significant control over critical functionalities and economic parameters. The owner can call mintInflation() (which mints to itself), updateMintRate(), burn() tokens, lockPool(), and unlockPool(). This centralized power allows the owner to unilaterally influence the token's supply, inflation schedule, and transfer restrictions, posing a substantial trust assumption for users and potential for misuse if the owner's keys are compromised or acts maliciously. While the owner is a multisig, the inherent centralization of control remains.
Fix
Clearly communicate the extent of owner control to all users and stakeholders. Consider implementing time-locks or multi-signature requirements for highly sensitive functions (e.g., updateMintRate, burn) beyond the existing Ownable pattern, or explore a transition to a community-governed model if decentralization is a long-term objective. Ensure the multisig setup is robust and its key management practices are secure.
Status
Unresolved
MediumPotential Precision Loss in Inflation Calculation
The mintInflation() function calculates yearMint and partialYearMint using integer arithmetic: (supply * yearlyMintRate_ * timeLeftInCurrentYear) / (1 ether * 365 days). If the numerator (supply * yearlyMintRate_ * timeLeftInCurrentYear) is smaller than the denominator (1 ether * 365 days), the result of the integer division will be zero, leading to a loss of precision. This could result in smaller-than-expected inflation amounts being minted, especially if the supply or yearlyMintRate_ is low, or the time period is very short. While require(mintableAmount > 0) prevents minting zero, it doesn't recover lost precision.M-01
Issue
The mintInflation() function calculates yearMint and partialYearMint using integer arithmetic: (supply * yearlyMintRate_ * timeLeftInCurrentYear) / (1 ether * 365 days). If the numerator (supply * yearlyMintRate_ * timeLeftInCurrentYear) is smaller than the denominator (1 ether * 365 days), the result of the integer division will be zero, leading to a loss of precision. This could result in smaller-than-expected inflation amounts being minted, especially if the supply or yearlyMintRate_ is low, or the time period is very short. While require(mintableAmount > 0) prevents minting zero, it doesn't recover lost precision.
Fix
To mitigate precision loss, consider reordering operations to perform division last where possible, or use a well-tested fixed-point math library (e.g., DSMath, PRBMath) for sensitive calculations. Alternatively, ensure that the minimum expected mintable amount is sufficiently large to avoid truncation to zero, or adjust the yearlyMintRate to account for this behavior.
Status
Unresolved
MediumVested Tokens Held by Contract
In the constructor, vestedTokens are minted directly to address(this). These tokens are then released to recipients via the release() function, which transfers them from the contract's balance. This design means the DERC20 contract itself holds a significant portion of the total supply (the vestedTotalAmount) until it is fully released. While the _transfer mechanism is standard OpenZeppelin, centralizing these funds within the contract increases the impact if the contract were to be compromised or if an unforeseen vulnerability allowed unauthorized draining of its balance.M-02
Issue
In the constructor, vestedTokens are minted directly to address(this). These tokens are then released to recipients via the release() function, which transfers them from the contract's balance. This design means the DERC20 contract itself holds a significant portion of the total supply (the vestedTotalAmount) until it is fully released. While the _transfer mechanism is standard OpenZeppelin, centralizing these funds within the contract increases the impact if the contract were to be compromised or if an unforeseen vulnerability allowed unauthorized draining of its balance.
Fix
While the current implementation is functional, for enhanced security and decentralization, consider alternative vesting patterns. This could involve using a separate, minimal vesting contract that holds the tokens, or directly minting vested tokens to individual vesting contracts for each recipient. If keeping the current design, ensure the contract's overall security posture is extremely robust, and consider additional safeguards for the contract's balance.
Status
Unresolved
LowFixed 365 days for Yearly Calculations
The mintInflation() function uses a fixed constant 365 days for yearly calculations. This approach does not account for leap years, which occur approximately every four years. Consequently, the inflation schedule will be slightly inaccurate, leading to minor discrepancies in the amount of tokens minted over extended periods compared to a precise calendar year calculation.L-01
365 days for Yearly CalculationsIssue
The mintInflation() function uses a fixed constant 365 days for yearly calculations. This approach does not account for leap years, which occur approximately every four years. Consequently, the inflation schedule will be slightly inaccurate, leading to minor discrepancies in the amount of tokens minted over extended periods compared to a precise calendar year calculation.
Fix
For most DeFi applications, this level of inaccuracy is acceptable and common. If higher precision is required, consider implementing a more sophisticated time calculation that accounts for leap years, or explicitly state this simplification in the protocol's documentation. Given the context, this is likely an acceptable trade-off for gas efficiency and simplicity.
Status
Unresolved
InfoPERMIT_2 Infinite Allowance Reporting
The allowance() function is overridden to return type(uint256).max when the spender address is PERMIT_2 (0x0000…8BA3). This is a common pattern to facilitate interactions with universal routers like Permit2, allowing them to spend tokens without requiring explicit approve calls for every transaction. While a design choice, users interacting with PERMIT_2 should be aware that this mechanism effectively grants infinite allowance to PERMIT_2 for their tokens, even if they haven't explicitly approved it through a standard ERC20 approve call.I-01
PERMIT_2 Infinite Allowance ReportingIssue
The allowance() function is overridden to return type(uint256).max when the spender address is PERMIT_2 (). This is a common pattern to facilitate interactions with universal routers like Permit2, allowing them to spend tokens without requiring explicit approve calls for every transaction. While a design choice, users interacting with PERMIT_2 should be aware that this mechanism effectively grants infinite allowance to PERMIT_2 for their tokens, even if they haven't explicitly approved it through a standard ERC20 approve call.
Fix
Ensure that users are fully aware of the implications of interacting with PERMIT_2 and how this allowance override functions. Provide clear documentation explaining that PERMIT_2 will be perceived as having infinite allowance for their tokens, and advise caution when interacting with any third-party protocols that utilize PERMIT_2.
Status
Unresolved
InfoLack of Event Emission for Critical Actions
Several critical state-changing functions, such as lockPool(), unlockPool(), updateMintRate(), and updateTokenURI(), do not emit corresponding events. Events are crucial for off-chain monitoring, indexing, and providing transparency into the contract's operations. Without events, it is difficult for external systems, users, or auditors to track when these significant parameters or states are changed.I-02
Issue
Several critical state-changing functions, such as lockPool(), unlockPool(), updateMintRate(), and updateTokenURI(), do not emit corresponding events. Events are crucial for off-chain monitoring, indexing, and providing transparency into the contract's operations. Without events, it is difficult for external systems, users, or auditors to track when these significant parameters or states are changed.
Fix
It is recommended to emit events for all critical state changes. For example, event PoolLocked(address indexed pool, bool isLocked);, event MintRateUpdated(uint256 oldRate, uint256 newRate);, and event TokenURIUpdated(string newTokenURI);. This enhances transparency, auditability, and allows for easier integration with off-chain services.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The DERC20 contract is built upon robust OpenZeppelin standards (ERC20, ERC20Votes, ERC20Permit, Ownable), contributing to a solid architectural foundation (7.1 Architecture). The code generally demonstrates good security practices (7.2 Code Security), with no apparent reentrancy vulnerabilities. However, the inflation calculation in mintInflation() may suffer from precision loss due to integer division, potentially leading to minor discrepancies in minted amounts. Additionally, the contract holds all vested tokens, which, while using standard _transfer logic, centralizes a significant asset pool within the contract itself.
The contract exhibits a high degree of centralized control (7.3 Access Control, 7.5 Governance). The owner (a 3/6 multisig) has extensive power, including the ability to mint inflation tokens to itself, update the yearly mint rate, burn tokens, and lock/unlock the designated pool address. This level of control introduces significant economic risk (7.4 Economic) as the owner can directly influence token supply and transfer restrictions. While the use of a multisig mitigates single-point-of-failure risks for the owner, the inherent centralization remains a key governance consideration.
The DERC20 contract is not designed with any upgradeability mechanism (7.7 Upgrades). Once deployed, its logic is immutable. This eliminates all risks associated with proxy upgrades, such as storage collisions, logic errors in upgrade implementations, or malicious upgrades. However, it also means that any future bug fixes or feature enhancements would require a new contract deployment and token migration.
It is recommended to thoroughly review the implications of the owner's extensive control over token supply and pool locking, ensuring these powers align with the project's long-term vision and risk tolerance.
Consider implementing more granular access control or time-locks for highly sensitive owner functions if decentralization is a future goal. Additionally, evaluate the precision of the inflation calculation to ensure it meets desired accuracy standards, potentially by using a fixed-point math library or adjusting the order of operations.
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.
- Aug 16, 202641Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the VVVEITY contract address?
The Venice Deity (VVVEITY) contract on Base is 0x85635006d808030e97f3174c8ea1b4aa1f1feba3. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Venice Deity a scam?
Quantum Audit's risk score for Venice Deity is 41/100 (Medium risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Ownership: Retained; Mint: No mint; 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 VVVEITY liquidity locked?
Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $105.8K.
Who holds VVVEITY?
As of Sep 4, 2026, the 10 largest holders own 55.8% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of Venice Deity?
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