The StablecoinV2 contract, an upgradeable ERC20 token, introduces EIP-7598 authorization features. The audit identified a critical upgradeability flaw in the base contract, Stablecoin, due to a missing __gap variable. High centralization of control over core token functions and potential front-running risks for authorization cancellations were also noted. The contract leverages OpenZeppelin's upgradeable patterns and includes features like autoMint and frozen accounts, managed by distinct roles.

On-chain security analysis — is it a scam or legit?
Is United Stables 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 StablecoinV2 contract, an upgradeable ERC20 token, introduces EIP-7598 authorization features.
Read the full analysis- Ownership not renounced — Multisig
- Mintable supply — no cap found, dilution unbounded
- Proxy contract
- Top-10 concentration > 70%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 100.0%
- LP top3 unlocked holders = 100.0%
- 1 Critical finding(s) from audit
- 1 High finding(s) from audit
- 2 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Ownership NOT renounced — Multisig (2-of-4)
- Mintable supply — no cap found, dilution unbounded
- Proxy contract (upgradeable — admin can replace logic)
- Top-10 concentration > 70% (96.6% total → 93.0% effective; 90.5% in EOAs, 6.0% in contracts — extreme)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- LP top1 unlocked holder = 100.0% (independent LP — depth risk, pool = 84% of DEX liquidity)
- LP top3 unlocked holders = 100.0% (independent LP — depth risk, pool = 84% of DEX liquidity)
- 1 Critical finding(s) from audit
- 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, staking6.0%
- Walletsanonymous holders, free to sell90.5%
- Everyone elsethe rest of the supply3.4%
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- Pancakeswap v3USDTAnalysed$21.01M84.3%
- Pancakeswap v3WBNB$3.71M14.9%
- Pancakeswap v2WBNB$166.7K0.7%
- Pancakeswap v3USDC$27.3K0.1%
- Pancakeswap v2USDT$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.
0x556b…d59e0xd84e…617b0x1a8d…d6ff0x0700…e297No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalMissing __gap in Base Contract for Upgradeability
The Stablecoin base contract, which StablecoinV2 inherits from, does not include a __gap storage variable. This is crucial for upgradeable contracts to prevent storage collisions if new state variables are added to the base contract in future upgrades, or if StablecoinV2 adds new state variables that conflict with future Stablecoin state variables. While StablecoinV2 itself has a __gap, the base contract's omission creates a significant risk for the overall upgradeability pattern (7.7 Architecture).C-01
__gap in Base Contract for UpgradeabilityIssue
The Stablecoin base contract, which StablecoinV2 inherits from, does not include a __gap storage variable. This is crucial for upgradeable contracts to prevent storage collisions if new state variables are added to the base contract in future upgrades, or if StablecoinV2 adds new state variables that conflict with future Stablecoin state variables. While StablecoinV2 itself has a __gap, the base contract's omission creates a significant risk for the overall upgradeability pattern (7.7 Architecture).
Fix
Add uint256[50] private __gap; (or an appropriately sized array) to the Stablecoin contract to ensure future storage compatibility and prevent potential storage collisions.
Status
Unresolved
HighCentralized Control of Core Token Functions
The contract exhibits significant centralization (7.3 Access Control, 7.5 Governance), with the owner (a 2/4 multisig) having control over critical functions such as mint, pause, freeze accounts, setAutoMintMaxLimit, and enabling/disabling EIP-7598 features. Additionally, an autoOwner role can autoMint up to a specified limit. While a multisig mitigates some risk, a compromise of the multisig or malicious actions by its members could lead to severe consequences, including arbitrary token minting, freezing user funds, or halting operations.H-01
Issue
The contract exhibits significant centralization (7.3 Access Control, 7.5 Governance), with the owner (a 2/4 multisig) having control over critical functions such as mint, pause, freeze accounts, setAutoMintMaxLimit, and enabling/disabling EIP-7598 features. Additionally, an autoOwner role can autoMint up to a specified limit. While a multisig mitigates some risk, a compromise of the multisig or malicious actions by its members could lead to severe consequences, including arbitrary token minting, freezing user funds, or halting operations.
Fix
Evaluate if any of these highly centralized functions can be decentralized or made subject to a more robust governance mechanism (e.g., time-locks, community voting) if the protocol's roadmap allows. Clearly communicate the extent of centralized control to users.
Status
Unresolved
MediumFront-running Risk for cancelAuthorization
The cancelAuthorization function allows an authorizer to invalidate a previously issued authorization by marking its nonce as used. However, if an attacker observes a pending cancelAuthorization transaction, they could front-run it by submitting a transferWithAuthorization or receiveWithAuthorization transaction using the same nonce before the cancellation is processed. This could lead to an unauthorized transfer of funds despite the authorizer's intent to cancel (7.2 Code Security).M-01
cancelAuthorizationIssue
The cancelAuthorization function allows an authorizer to invalidate a previously issued authorization by marking its nonce as used. However, if an attacker observes a pending cancelAuthorization transaction, they could front-run it by submitting a transferWithAuthorization or receiveWithAuthorization transaction using the same nonce before the cancellation is processed. This could lead to an unauthorized transfer of funds despite the authorizer's intent to cancel (7.2 Code Security).
Fix
While inherent to signature-based systems, users should be aware of this risk. Consider implementing a mechanism where cancelAuthorization can be submitted with a higher gas price to increase its chances of being included first, or advise users to ensure their cancellation transactions are prioritized.
Status
Unresolved
MediumPotential for autoMintMaxLimit to be Set to Zero
The setAutoMintMaxLimit function allows the owner to set the autoMintMaxLimit to any uint256 value, including zero. If the limit is set to zero, the autoMint function would become unusable, as require(autoMintMaxLimit >= amount, ...) would fail for any amount > 0. While this might be an intentional 'kill switch' for autoMint, it could also be set accidentally, disrupting operations (7.4 Economic).M-02
autoMintMaxLimit to be Set to ZeroIssue
The setAutoMintMaxLimit function allows the owner to set the autoMintMaxLimit to any uint256 value, including zero. If the limit is set to zero, the autoMint function would become unusable, as require(autoMintMaxLimit >= amount, ...) would fail for any amount > 0. While this might be an intentional 'kill switch' for autoMint, it could also be set accidentally, disrupting operations (7.4 Economic).
Fix
Consider adding a require(limit > 0 || limit == 0) if setting to zero is intended as a disable, or require(limit > 0) if autoMint should always be available. Document the intended behavior of setting autoMintMaxLimit to zero.
Status
Unresolved
Lowblock.timestamp Reliance for validAfter/validBefore
The _transferOrReceiveWithAuthorization function relies on block.timestamp for checking validAfter and validBefore. While generally acceptable, block.timestamp can be manipulated by miners within a certain range (up to 900 seconds on Ethereum, similar on BSC). This could slightly extend or shorten the validity window of an authorization, potentially allowing a transaction to be included just outside the intended window (7.2 Code Security).L-01
block.timestamp Reliance for validAfter/validBeforeIssue
The _transferOrReceiveWithAuthorization function relies on block.timestamp for checking validAfter and validBefore. While generally acceptable, block.timestamp can be manipulated by miners within a certain range (up to 900 seconds on Ethereum, similar on BSC). This could slightly extend or shorten the validity window of an authorization, potentially allowing a transaction to be included just outside the intended window (7.2 Code Security).
Fix
Acknowledge this inherent EVM characteristic. For most applications, the precision of block.timestamp is sufficient. If extreme precision is required, consider alternative time sources or adjust validity windows to account for potential miner manipulation.
Status
Unresolved
InfoUnused _msgSender() in mint event
In the mint(uint256 amount) function, the Mint event is emitted with _msgSender() as both caller and to. However, the _mint function itself mints to _msgSender(). The to parameter in the event is redundant in this specific overload, as it will always be the same as caller (7.2 Code Security).I-01
_msgSender() in mint eventIssue
In the mint(uint256 amount) function, the Mint event is emitted with _msgSender() as both caller and to. However, the _mint function itself mints to _msgSender(). The to parameter in the event is redundant in this specific overload, as it will always be the same as caller (7.2 Code Security).
Fix
Consider removing the to parameter from the Mint event in this specific overload, or ensure consistency if _msgSender() is always the recipient. This is a minor stylistic point.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The technical architecture (7.1) leverages OpenZeppelin's upgradeable contracts and EIP-7598 for signature-based transfers, enhancing functionality. Code security (7.2) is generally good, using Solidity 0.8.x and OpenZeppelin libraries, which mitigate common issues like integer overflows. The EIP-7598 implementation correctly uses nonces and time windows to prevent replay attacks. However, a critical upgradeability issue (C-01) exists where the Stablecoin base contract lacks a __gap variable, posing a significant risk of storage collisions in future upgrades.
The contract's economic model (7.4) and governance (7.5) are highly centralized, with an owner (multisig) controlling minting, pausing, freezing accounts, and setting autoMintMaxLimit (H-01). An autoOwner role can autoMint up to this limit. While a multisig enhances security over a single EOA, this centralization presents a single point of failure. The autoMintMaxLimit can also be set to zero (M-02), effectively disabling autoMint without explicit checks.
The contract utilizes OpenZeppelin's TransparentUpgradeableProxy pattern (7.7) and correctly implements initializer and reinitializer functions for Stablecoin and StablecoinV2 respectively. StablecoinV2 includes a __gap variable for future upgrades. However, the Stablecoin base contract critically lacks a __gap variable (C-01), which could lead to storage collisions if Stablecoin itself is upgraded or if StablecoinV2 adds new state variables that conflict with future Stablecoin state variables. This oversight compromises the robustness of the upgradeability pattern.
Address the critical upgradeability issue by adding a __gap variable to the Stablecoin base contract to ensure storage compatibility for future upgrades.
Review the extent of centralized control, particularly for minting and freezing functions, and consider implementing additional safeguards or decentralization measures if feasible for the protocol's long-term vision. Users should be made aware of the front-running risk associated with cancelAuthorization and advised on best practices for transaction submission.
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, 202682High
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the U contract address?
The United Stables (U) contract on BNB Chain is 0xce24439f2d9c6a2289f741120fe202248b666666. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is United Stables a scam?
Quantum Audit's risk score for United Stables is 82/100 (High 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 U liquidity locked?
Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $24.92M.
Who holds U?
As of Sep 4, 2026, the 10 largest holders own 96.6% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of United Stables?
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