The XERC20 contract, an upgradeable ERC-20 token, was audited for security vulnerabilities. A critical vulnerability was identified where the mint function is publicly accessible, allowing any caller to create new tokens, leading to uncontrolled supply inflation. Other findings include potential rate limit bypasses, immutability concerns for a critical operational address, and minor issues related to naming conventions and hardcoded values.
On-chain security analysis — is it a scam or legit?
Is OpenUSDT 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 XERC20 contract, an upgradeable ERC-20 token, was audited for security vulnerabilities.
Read the full analysis- Ownership not renounced — Timelock 24h delay
- Mintable supply — no cap found, dilution unbounded
- Proxy contract
- Top-10 concentration > 30%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 52.7%
- LP top3 unlocked holders = 98.8%
- 1 Critical finding(s) from audit
- 1 High finding(s) from audit
- 1 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Ownership NOT renounced — Timelock 24h delay
- Mintable supply — no cap found, dilution unbounded
- Proxy contract (upgradeable — admin can replace logic)
- Top-10 concentration > 30% (92.4% total → 38.9% effective; 3.3% in EOAs, 89.0% in contracts — moderate)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 52.7% (independent LP — depth risk, pool = 46% of DEX liquidity)
- LP top3 unlocked holders = 98.8% (independent LP — depth risk, pool = 46% of DEX liquidity)
- 1 Critical finding(s) from audit
- 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, staking89.0%
- Walletsanonymous holders, free to sell3.3%
- Everyone elsethe rest of the supply7.6%
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- AerodromeUSDCAnalysed$119.4K45.6%
- AerodromecbBTC$77.5K29.6%
- AerodromeWETH$42.4K16.2%
- PancakeswapUSDC$17.6K6.7%
- Uniswap v3USDC$5.0K1.9%
- AerodromeUSDC$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.
0x84cd…984e0xf883…4aa50x5457…f5fa0x120d…33b50x5a01…a692No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalPublic mint function allows arbitrary token creation
The mint(address _user, uint256 _amount) function is declared public, allowing any external caller to mint new tokens to any specified address. This bypasses typical access control mechanisms for token creation, leading to uncontrolled inflation and potential devaluation of the token. While the _mintWithCaller function applies a rate limit based on msg.sender, this only limits the rate of minting per individual caller, not the overall ability to inflate the supply.C-01
mint function allows arbitrary token creationIssue
The mint(address _user, uint256 _amount) function is declared public, allowing any external caller to mint new tokens to any specified address. This bypasses typical access control mechanisms for token creation, leading to uncontrolled inflation and potential devaluation of the token. While the _mintWithCaller function applies a rate limit based on msg.sender, this only limits the rate of minting per individual caller, not the overall ability to inflate the supply.
Fix
Restrict the mint function to authorized roles (e.g., onlyOwner or a dedicated minter role) or remove it if minting is only intended via cross-chain mechanisms.
Status
Unresolved
HighRate limit bypass via multiple addresses
The rate limiting mechanism in _depleteBuffer and _replenishBuffer is applied per _caller address. If the mint function remains public, an attacker could use multiple distinct addresses to bypass the individual rate limits, effectively minting a large amount of tokens quickly by distributing the minting operations across many accounts. This undermines the intended purpose of the rate limits for controlling overall token supply.H-01
Issue
The rate limiting mechanism in _depleteBuffer and _replenishBuffer is applied per _caller address. If the mint function remains public, an attacker could use multiple distinct addresses to bypass the individual rate limits, effectively minting a large amount of tokens quickly by distributing the minting operations across many accounts. This undermines the intended purpose of the rate limits for controlling overall token supply.
Fix
If the mint function is intended to be public (which is highly discouraged), consider implementing a global rate limit in addition to or instead of the per-caller rate limit, or restrict the mint function to a single, trusted entity.
Status
Unresolved
MediumImmutability of lockbox address
The lockbox address is declared immutable and set in the constructor. This address is used to bypass rate limits for internal minting/burning operations. If the lockbox address needs to be changed in the future due to compromise, operational changes, or system evolution, it cannot be updated without a full contract upgrade, which is a more complex and risky operation than a simple parameter change.M-01
lockbox addressIssue
The lockbox address is declared immutable and set in the constructor. This address is used to bypass rate limits for internal minting/burning operations. If the lockbox address needs to be changed in the future due to compromise, operational changes, or system evolution, it cannot be updated without a full contract upgrade, which is a more complex and risky operation than a simple parameter change.
Fix
Re-evaluate the necessity of lockbox being immutable. If it represents a critical operational address that might need to change, consider making it a mutable onlyOwner configurable variable.
Status
Unresolved
LowHardcoded decimals value
The decimals() function is hardcoded to return 6. While this is a valid design choice, it means the token will always have 6 decimal places. If there's a future need to change the decimal precision (e.g., for integration with other systems that expect a different standard like 18), it would require a contract upgrade.L-01
decimals valueIssue
The decimals() function is hardcoded to return 6. While this is a valid design choice, it means the token will always have 6 decimal places. If there's a future need to change the decimal precision (e.g., for integration with other systems that expect a different standard like 18), it would require a contract upgrade.
Fix
Document this design choice clearly. If flexibility is desired, consider making decimals an immutable variable set in the constructor or an onlyOwner configurable variable, though changing decimals for an existing token is generally not recommended due to ecosystem impact.
Status
Unresolved
InfoAmbiguous burn function naming
The burn(address _user, uint256 _amount) function is public and allows msg.sender to burn tokens from _user if msg.sender has an allowance from _user. This behavior is typically associated with a burnFrom function in ERC20 standards, while a burn function usually implies burning tokens owned by msg.sender. The current naming might lead to confusion for integrators or users.I-01
burn function namingIssue
The burn(address _user, uint256 _amount) function is public and allows msg.sender to burn tokens from _user if msg.sender has an allowance from _user. This behavior is typically associated with a burnFrom function in ERC20 standards, while a burn function usually implies burning tokens owned by msg.sender. The current naming might lead to confusion for integrators or users.
Fix
Rename the function to burnFrom(address _user, uint256 _amount) to align with common ERC20 naming conventions if it's intended to allow burning on behalf of others. If it's only intended for users to burn their own tokens, then the allowance check should be removed, and _user should be msg.sender.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract leverages OpenZeppelin's upgradeable ERC20 and Ownable patterns, providing a solid foundation for token functionality and access control (7.2 Code Security). It implements a rate limiting mechanism for minting and burning operations, intended to control token flow (7.1 Architecture). However, a critical flaw exists in the mint function's access control, allowing any external caller to mint tokens, which severely compromises the token's integrity (7.3 Access Control). Additionally, the per-caller rate limits could be circumvented by an attacker using multiple addresses (7.2 Code Security).
The contract's ownership is secured by a Timelock with a 24-hour delay, which is a strong governance practice for administrative functions like setting rate limits and adding/removing bridges (7.5 Governance). However, the public mint function introduces a critical economic risk of unlimited token inflation by any actor, rendering any governance control over token supply ineffective (7.4 Economic). This fundamental flaw undermines the economic stability of the token.
The contract utilizes the Transparent Upgradeable Proxy pattern, with the proxy admin owned by a Timelock, ensuring a secure and controlled upgrade path (7.7 Upgrades). The initialize function is correctly implemented to prevent re-initialization. The immutability of the lockbox address, while a design choice, means it cannot be altered without an upgrade, which could be a minor operational constraint (7.8 Operations).
The primary recommendation is to immediately address the critical vulnerability in the mint function by restricting its access to authorized roles only.
This is paramount to prevent uncontrolled token inflation and maintain the token's economic integrity. Additionally, review the rate limiting mechanism to ensure it effectively controls overall token supply, especially if multiple actors can trigger minting. Consider making the lockbox address configurable by the owner to allow for future operational flexibility without requiring a full contract upgrade.
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 13, 202650Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the OUSDT contract address?
The OpenUSDT (OUSDT) contract on Base is 0x1217bfe6c773eec6cc4a38b5dc45b92292b6e189. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is OpenUSDT a scam?
Quantum Audit's risk score for OpenUSDT is 50/100 (Medium risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Ownership: Retained; Mint: Mintable; Liquidity lock: Not locked; Upgradeability: Upgradeable. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Is OUSDT liquidity locked?
Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $261.9K.
Who holds OUSDT?
As of Sep 4, 2026, the 10 largest holders own 92.4% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of OpenUSDT?
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