The USDG contract implements an upgradeable ERC-20 token with a claimable rewards system. It leverages OpenZeppelin's UUPS proxy pattern and AccessControl for robust role management. A critical finding is the use of uint64 for token balances, which introduces a hard limit on total supply and individual balances, posing a significant risk of overflow and fund loss if not meticulously managed. Additionally, deprecated storage variables and centralized control mechanisms warrant attention.

On-chain security analysis — is it a scam or legit?
Is Global Dollar 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 USDG contract implements an upgradeable ERC-20 token with a claimable rewards system.
Read the full analysis- Ownership not renounced — Timelock 24h delay
- Mintable supply — no cap found, dilution unbounded
- Proxy contract
- Top-10 concentration > 50%
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- 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 > 50% (73.2% total → 66.0% effective; 61.1% in EOAs, 12.1% in contracts — heavy)
- Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
- 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, staking12.1%
- Walletsanonymous holders, free to sell61.1%
- Everyone elsethe rest of the supply26.8%
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- Curve stblUSDCAnalysed$20.03M80.9%
- Uniswap v4USDC$1.52M6.1%
- Uniswap v4USDC$1.33M5.4%
- Uniswap v4USDC$1.03M4.1%
- Uniswap v4USDT$665.4K2.7%
- Uniswap v4USDC$126.1K0.5%
Show 4 more pairs
One more pair holds $43 and is not listed. 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.
0x84db…2fb50xa055…99bb0x91ae…5aff0x7774…12880xfaa8…0f5b0x1b69…97c10xc984…d9140x3d41…b5790xfa68…abbc0xafa0…7effNo privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalPotential for uint64 Balance Overflow/Truncation
The contract uses uint64 for balance and shares within TokenAccountData and PayoutGroupData. This is highly unusual for an ERC-20 token, which typically uses uint256. A uint64 variable can only hold values up to 2^64 - 1 (approximately 1.8 * 10^19). Given the token has 6 decimals, this implies a maximum total supply or individual balance of approximately 1.8 * 10^13 USDG. If the total supply or any account's balance exceeds this limit, an overflow could occur. The behavior of StorageLib.toUint64Balance and StorageLib.toUint64Shares is critical here; if they truncate values rather than reverting on overflow, it could lead to silent loss of funds or incorrect accounting.C-01
uint64 Balance Overflow/TruncationIssue
The contract uses uint64 for balance and shares within TokenAccountData and PayoutGroupData. This is highly unusual for an ERC-20 token, which typically uses uint256. A uint64 variable can only hold values up to 2^64 - 1 (approximately 1.8 * 10^19). Given the token has 6 decimals, this implies a maximum total supply or individual balance of approximately 1.8 * 10^13 USDG. If the total supply or any account's balance exceeds this limit, an overflow could occur. The behavior of StorageLib.toUint64Balance and StorageLib.toUint64Shares is critical here; if they truncate values rather than reverting on overflow, it could lead to silent loss of funds or incorrect accounting.
Fix
Re-evaluate the decision to use uint64 for balances. If uint64 is strictly necessary for gas optimization or other reasons, ensure that StorageLib.toUint64Balance and StorageLib.toUint64Shares explicitly revert on overflow. Implement robust checks before any operation that could push a uint64 balance beyond its maximum value. Consider migrating to uint256 for balances if the potential scale of the token could exceed uint64 limits.
Status
Unresolved
HighUnused/Deprecated Storage Variables
The BaseStorageV3 contract contains multiple explicitly named deprecated storage variables (e.g., assetProtectionRoleDeprecated, supplyControllerDeprecated, proposedOwnerDeprecated, betaDelegateWhitelisterDeprecated, nextSeqsDeprecated, EIP712_DOMAIN_HASH_DEPRECATED, DOMAIN_SEPARATOR_DEPRECATED). While __gap variables are used for future compatibility, the presence of these named deprecated variables can lead to confusion, potential misuse if not properly documented and guarded, or storage collisions if not carefully managed during future upgrades. This increases the risk of errors during maintenance or upgrades.H-01
Issue
The BaseStorageV3 contract contains multiple explicitly named deprecated storage variables (e.g., assetProtectionRoleDeprecated, supplyControllerDeprecated, proposedOwnerDeprecated, betaDelegateWhitelisterDeprecated, nextSeqsDeprecated, EIP712_DOMAIN_HASH_DEPRECATED, DOMAIN_SEPARATOR_DEPRECATED). While __gap variables are used for future compatibility, the presence of these named deprecated variables can lead to confusion, potential misuse if not properly documented and guarded, or storage collisions if not carefully managed during future upgrades. This increases the risk of errors during maintenance or upgrades.
Fix
Clearly document the status and purpose of all deprecated variables. Ideally, remove truly unused deprecated variables from the storage layout in a controlled upgrade, ensuring no storage collisions. If they must remain for historical reasons, ensure they are explicitly marked as immutable and cannot be written to or read in a misleading way by new logic. Consider using a dedicated DeprecatedStorage contract or library to isolate such variables.
Status
Unresolved
MediumCentralized Control Over Token Operations
The contract implements pausing functionality (_isPaused) and address freezing (_isAddrFrozen, _setFrozen), controlled by privileged roles (e.g., DEFAULT_ADMIN_ROLE). While common for stablecoins to enable emergency responses to security incidents or regulatory requirements, this introduces significant centralization risk. Privileged roles have the ability to halt all transfers or freeze specific user funds, which could be exploited or misused.M-01
Issue
The contract implements pausing functionality (_isPaused) and address freezing (_isAddrFrozen, _setFrozen), controlled by privileged roles (e.g., DEFAULT_ADMIN_ROLE). While common for stablecoins to enable emergency responses to security incidents or regulatory requirements, this introduces significant centralization risk. Privileged roles have the ability to halt all transfers or freeze specific user funds, which could be exploited or misused.
Fix
Ensure that the roles controlling these centralized functions are secured by multi-signature wallets and/or Timelocks with appropriate delays. Clearly document the conditions under which these functions would be invoked and the process for their activation and deactivation. Consider implementing a community-driven governance mechanism for critical actions if feasible for the project's roadmap.
Status
Unresolved
LowComplexity of Multiplier and Payout Logic
The ClaimableRewardsBase contract includes functions such as _getMultiplierAtTime and _updatePayoutGroupBals, which rely on MultiplierGrowthLib and involve complex arithmetic for time-dependent calculations and payout adjustments. While the full implementation of MultiplierGrowthLib.projectMultiplier is not provided, complex financial logic is inherently prone to subtle errors, especially when dealing with multiple parameters, time, and rates.L-01
Issue
The ClaimableRewardsBase contract includes functions such as _getMultiplierAtTime and _updatePayoutGroupBals, which rely on MultiplierGrowthLib and involve complex arithmetic for time-dependent calculations and payout adjustments. While the full implementation of MultiplierGrowthLib.projectMultiplier is not provided, complex financial logic is inherently prone to subtle errors, especially when dealing with multiple parameters, time, and rates.
Fix
Conduct extensive unit and integration testing for all multiplier and payout calculation logic, covering edge cases, boundary conditions, and various time scenarios. Consider formal verification or a mathematical proof of correctness for the core MultiplierGrowthLib functions to ensure their integrity and accuracy under all conditions.
Status
Unresolved
InfoExtensive Inheritance Hierarchy
The USDG contract inherits from a large number of parent contracts: PaxosTokenClaimableRewards, UUPSUpgradeable, ClaimableRewardsBase, BaseStorageV3, AccessControlDefaultAdminRulesUpgradeable, ClaimableRewardsStorageV3, ClaimableRewardsEvents, and TokenAdminEvents. While modularity is beneficial, such a deep and broad inheritance hierarchy can increase code complexity, make it harder to trace logic and state changes, and potentially introduce unexpected interactions or subtle bugs between parent contracts.I-01
Issue
The USDG contract inherits from a large number of parent contracts: PaxosTokenClaimableRewards, UUPSUpgradeable, ClaimableRewardsBase, BaseStorageV3, AccessControlDefaultAdminRulesUpgradeable, ClaimableRewardsStorageV3, ClaimableRewardsEvents, and TokenAdminEvents. While modularity is beneficial, such a deep and broad inheritance hierarchy can increase code complexity, make it harder to trace logic and state changes, and potentially introduce unexpected interactions or subtle bugs between parent contracts.
Fix
Ensure comprehensive documentation and clear architectural diagrams are maintained to explain the contract's structure, inheritance flow, and state variable ownership. Conduct thorough reviews to ensure there are no unintended method overrides or storage collisions due to the complex inheritance. Consider refactoring to reduce the depth or breadth of inheritance if it becomes a significant maintenance burden.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract utilizes a modular architecture with clear separation of storage and logic, inheriting from OpenZeppelin's AccessControlDefaultAdminRulesUpgradeable for robust role management (7.1, 7.3). However, a significant technical risk is the use of uint64 for token balances and shares, which could lead to overflows and fund loss if balances exceed ~1.8e13 USDG (7.2). Additionally, the presence of numerous deprecated storage variables in BaseStorageV3 creates potential for storage collisions or confusion during future upgrades (7.7).
The protocol benefits from a strong governance setup, with the DEFAULT_ADMIN_ROLE controlled by a Timelock, enhancing operational security and decentralization of critical actions (7.5, 7.8). However, the contract retains centralized control mechanisms such as pausing transfers and freezing individual addresses, which, while common for stablecoins, introduces a single point of control over user funds (7.4). The economic model includes a complex multiplier and payout system, which requires thorough validation to prevent calculation errors (7.4).
The contract employs the UUPS upgradeable proxy pattern, with upgrade authorization strictly limited to the DEFAULT_ADMIN_ROLE, ensuring controlled and secure upgrades (7.7). The use of __gap variables in storage contracts demonstrates an awareness of upgrade safety. However, the presence of explicitly named deprecated storage variables in BaseStorageV3 could complicate future storage layout management and potentially lead to storage collisions if not handled with extreme care during subsequent upgrades (7.7).
Prioritize a thorough review of the uint64 balance implementation, especially the StorageLib.toUint64Balance function, to ensure it handles potential overflows by reverting rather than truncating.
Evaluate the maximum expected total supply and individual balances to confirm uint64 is sufficient for the project's long-term scale. Address all deprecated storage variables by either removing them entirely if unused (ensuring no storage collisions) or clearly documenting their status and ensuring they cannot be accidentally re-used in future upgrades. Strengthen documentation around the centralized control mechanisms and the complex multiplier logic.
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 2, 202681High
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Would You Like a More Detailed Audit of Global Dollar?
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