Quantum Audit Logo
Launch App

On-chain security analysis — is it a scam or legit?

Is Metronome Synth USD Safe?

MSUSDEthereum
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 →
Last checked Sep 4, 2026 · 1 audit on record
SummaryAI Copilot

The SyntheticToken contract serves as an upgradeable ERC-20 token implementation, designed to interact within a broader DeFi ecosystem involving PoolRegistry, Pools, DebtTokens, and a ProxyOFT.

Read the full analysis
What raised the score
  • Ownership status UNKNOWN
  • 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 = 100.0%
  • LP top3 unlocked holders = 100.0%
  • 2 High finding(s) from audit
  • 2 Medium finding(s) from audit
  • 1 Low finding(s) from audit
Exact factors
  • Ownership status UNKNOWN (owner could not be resolved)
  • Mintable supply — no cap found, dilution unbounded
  • Proxy contract (upgradeable — admin can replace logic)
  • Top-10 concentration > 30% (98.1% total → 43.8% effective; 7.5% in EOAs, 90.6% in contracts — moderate)
  • 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 = 89% of DEX liquidity)
  • LP top3 unlocked holders = 100.0% (independent LP — depth risk, pool = 89% of DEX liquidity)
  • 2 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 43 of 7 checks passed
Contract verifiedVerified
OwnershipUnknown
MintMintable
Liquidity lockNot locked
UpgradeabilityUpgradeable
HoneypotNone found
Buy / sell tax0% / 0%

Holders

as of audit · Sep 4, 2026
90.6%Contracts7.5%Wallets1.9%
90.6%Contracts7.5%
ContractsWalletsEveryone elseBubble area = share of supply
98.1%of supply sits with the top 10 holders
  • Contractstreasury, vesting, bridge, staking90.6%
  • Walletsanonymous holders, free to sell7.5%
  • Everyone elsethe rest of the supply1.9%
Effective concentrationwhat the score reads43.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$4.36M across 4 pairs
LP tokensNot locked

The LP tokens of the analysed pool are not locked or burned, so whoever holds them can withdraw that liquidity.

Analysed pool$3.86MShare of depth88.6%
Top-1 Unlocked Holder100.0%
Top-3 Unlocked100.0%
Unlocked LP held by
0x8d38…a01d

No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.

Security Findings

2 High2 Medium1 Low1 Info
High

Centralized Control by Governor

The _poolRegistry.governor() address, as defined by the onlyGovernor modifier, holds extensive control over critical parameters and the operational status of the SyntheticToken. This includes the ability to update maxAmoSupply, maxTotalSupply, maxBridgedInSupply, maxBridgedOutSupply, proxyOFT, amo, and isActive. Such centralized control (7.3 Access Control, 7.5 Governance) represents a single point of failure; a compromise of the governor's private key or its controlling entity could lead to severe economic damage, unauthorized minting/burning, or freezing of token operations.H-01

Issue

The _poolRegistry.governor() address, as defined by the onlyGovernor modifier, holds extensive control over critical parameters and the operational status of the SyntheticToken. This includes the ability to update maxAmoSupply, maxTotalSupply, maxBridgedInSupply, maxBridgedOutSupply, proxyOFT, amo, and isActive. Such centralized control (7.3 Access Control, 7.5 Governance) represents a single point of failure; a compromise of the governor's private key or its controlling entity could lead to severe economic damage, unauthorized minting/burning, or freezing of token operations.

Fix

Ensure the _poolRegistry.governor() is controlled by a robust, multi-signature wallet with a high threshold for execution. Implement strict operational procedures and access controls for the multisig signers. Consider time-locks for critical parameter changes to allow for community review and reaction time.

Status

Unresolved

High

Complex External Access Control Logic

The access control modifiers onlyIfCanBurn, onlyIfCanMint, and onlyIfCanSeize rely on complex internal functions (_isMsgSenderDebtToken, _isMsgSenderPool) that involve multiple external calls to _poolRegistry, IManageable, IPool, and IDebtToken interfaces (7.3 Access Control, 7.6 External). This intricate dependency chain increases the attack surface and introduces significant risk. A misconfiguration, bug, or malicious behavior in any of these external contracts could lead to unauthorized minting, burning, or seizing of tokens, bypassing the intended access controls. For example, if IManageable(sender_).pool() returns an unexpected address or if `_pool.doesDebtTokenExis…H-02

Issue

The access control modifiers onlyIfCanBurn, onlyIfCanMint, and onlyIfCanSeize rely on complex internal functions (_isMsgSenderDebtToken, _isMsgSenderPool) that involve multiple external calls to _poolRegistry, IManageable, IPool, and IDebtToken interfaces (7.3 Access Control, 7.6 External). This intricate dependency chain increases the attack surface and introduces significant risk. A misconfiguration, bug, or malicious behavior in any of these external contracts could lead to unauthorized minting, burning, or seizing of tokens, bypassing the intended access controls. For example, if IManageable(sender_).pool() returns an unexpected address or if `_pool.doesDebtTokenExis…

Fix

Thoroughly audit all external contracts (IPoolRegistry, IPool, IDebtToken, IProxyOFT) that interact with SyntheticToken's access control logic. Implement robust validation and sanity checks on return values from external calls. Consider simplifying the access control logic if possible, or clearly document the expected behavior and security assumptions of each external dependency.

Status

Unresolved

Medium

Missing _transfer Function Implementation

The provided source code snippet for the SyntheticToken contract is truncated, specifically omitting the implementation of the crucial _transfer function. This function is called by transfer, transferFrom, and seize, making it central to all token movements (7.2 Code Security). Without its full implementation, a complete security assessment of token balance updates, reentrancy risks, and other potential vulnerabilities related to token transfers cannot be performed. This represents a significant gap in the audit coverage.M-01

Issue

The provided source code snippet for the SyntheticToken contract is truncated, specifically omitting the implementation of the crucial _transfer function. This function is called by transfer, transferFrom, and seize, making it central to all token movements (7.2 Code Security). Without its full implementation, a complete security assessment of token balance updates, reentrancy risks, and other potential vulnerabilities related to token transfers cannot be performed. This represents a significant gap in the audit coverage.

Fix

Provide the complete source code for the _transfer function and any other omitted parts of the contract. A full audit of these critical components is necessary to ensure the integrity of token transfers and overall contract security.

Status

Unresolved

Medium

maxTotalSupply Default to type(uint256).max

In the initialize function, the maxTotalSupply variable is set to type(uint256).max. While this effectively means an uncapped total supply, it could be a misconfiguration if a specific total supply limit is intended for the token's economic model (7.4 Economic). If a cap is desired later, it would require a governor action to update, and the implications of an uncapped supply should be fully understood and documented to prevent unexpected economic behavior or potential hyperinflation if minting mechanisms are not tightly controlled.M-02

Issue

In the initialize function, the maxTotalSupply variable is set to type(uint256).max. While this effectively means an uncapped total supply, it could be a misconfiguration if a specific total supply limit is intended for the token's economic model (7.4 Economic). If a cap is desired later, it would require a governor action to update, and the implications of an uncapped supply should be fully understood and documented to prevent unexpected economic behavior or potential hyperinflation if minting mechanisms are not tightly controlled.

Fix

Clarify the intended economic model for the SyntheticToken's total supply. If a specific cap is desired, set maxTotalSupply to that value during initialization or ensure the governor has a clear mandate and process to set it. If an uncapped supply is intentional, document this decision and its implications for the token's long-term stability.

Status

Unresolved

Low

Cumulative Bridged Supply Variables

The totalBridgedIn and totalBridgedOut variables are cumulative sums, which can grow indefinitely. While bridgedInSupply() and bridgedOutSupply() correctly return the net difference, the cumulative variables themselves could reach very large numbers over time. Although uint256 provides ample capacity, it's important to ensure that any off-chain or monitoring systems correctly interpret these cumulative values versus the net supply (7.4 Economic). The current checks against maxBridgedOutSupply correctly use the net bridgedOutSupply(), mitigating direct overflow risks for the limits.L-01

Issue

The totalBridgedIn and totalBridgedOut variables are cumulative sums, which can grow indefinitely. While bridgedInSupply() and bridgedOutSupply() correctly return the net difference, the cumulative variables themselves could reach very large numbers over time. Although uint256 provides ample capacity, it's important to ensure that any off-chain or monitoring systems correctly interpret these cumulative values versus the net supply (7.4 Economic). The current checks against maxBridgedOutSupply correctly use the net bridgedOutSupply(), mitigating direct overflow risks for the limits.

Fix

Ensure that all external systems and integrations interacting with totalBridgedIn and totalBridgedOut are aware of their cumulative nature and differentiate them from the net bridgedInSupply() and bridgedOutSupply() values. No direct code change is required if the current logic is fully understood and intended.

Status

Unresolved

Info

Correct _msgSender() Usage in Proxy Context

The contract correctly utilizes _msgSender() (likely inherited from OpenZeppelin's ContextUpgradeable via SynthContext) to retrieve the original caller in an upgradeable proxy environment (7.1 Architecture, 7.2 Code Security). This is a best practice for upgradeable contracts deployed behind proxies, ensuring that access control and other sender-dependent logic correctly identify the external account initiating the transaction, rather than the proxy contract itself.I-01

Issue

The contract correctly utilizes _msgSender() (likely inherited from OpenZeppelin's ContextUpgradeable via SynthContext) to retrieve the original caller in an upgradeable proxy environment (7.1 Architecture, 7.2 Code Security). This is a best practice for upgradeable contracts deployed behind proxies, ensuring that access control and other sender-dependent logic correctly identify the external account initiating the transaction, rather than the proxy contract itself.

Fix

Maintain this pattern for all sender-dependent logic within the contract and any future upgrades.

Status

Resolved

Analysis

AI Copilotas of audit · Sep 4
Executive SummaryWhat the contract is and what the review found

The SyntheticToken contract serves as an upgradeable ERC-20 token implementation, designed to interact within a broader DeFi ecosystem involving PoolRegistry, Pools, DebtTokens, and a ProxyOFT. The contract demonstrates good practices such as using OpenZeppelin's Initializable for upgradeability, custom error handling, and correct _msgSender() usage in a proxy context. However, the audit identified areas of concern, including significant centralized control by the governor, complex access control logic relying on external contracts, and a default uncapped total supply. A critical part of the token's logic, the _transfer function, was not provided in the audit scope, limiting a full assessment of token movement security.

Technical5/10Medium risk

The technical architecture of the SyntheticToken contract (7.1 Architecture) is based on an upgradeable ERC-20 standard, utilizing OpenZeppelin's Initializable and SyntheticTokenStorageV2 for robust upgrade management. Code security (7.2 Code Security) benefits from custom error handling and safe unchecked arithmetic where appropriate, such as in decreaseAllowance. Access control (7.3 Access Control) is implemented through custom modifiers like onlyGovernor, onlyIfCanBurn, onlyIfCanMint, and onlyIfCanSeize, which correctly use _msgSender() in the proxy context. However, the complex logic within _isMsgSenderDebtToken and _isMsgSenderPool relies heavily on external contract interactions, increasing the attack surface and potential for misconfiguration. The absence of the _transfer function in the provided code snippet prevents a complete technical security assessment of token movement.

Governance1/10High risk

The economic model (7.4 Economic) of the SyntheticToken includes mechanisms for tracking bridged-in/out supply and an AMO supply, with configurable maximum limits. However, the maxTotalSupply is initialized to type(uint256).max, effectively uncapping the total supply by default, which could be a misconfiguration if a specific cap is desired. Governance (7.5 Governance) is highly centralized, with the _poolRegistry.governor() possessing extensive control over critical parameters such as maxAmoSupply, maxTotalSupply, proxyOFT, amo, and the token's active status. While common in managed DeFi protocols, this central authority represents a significant single point of failure. External dependencies (7.6 External) are significant due to interactions with IPoolRegistry, IPool, IDebtToken, and IProxyOFT for core functionality and access control.

Upgrades1/10High risk

The contract is designed as an upgradeable proxy implementation (7.7 Upgrades), inheriting Initializable from OpenZeppelin and using SyntheticTokenStorageV2, indicating a structured approach to storage management across upgrades. The initialize function ensures proper setup for the first deployment. The use of a TransparentUpgradeableProxy with a multisig admin (as per prefill) provides a secure mechanism for future upgrades. This setup generally mitigates common upgrade-related risks, provided storage layout compatibility is strictly maintained in subsequent versions.

Final RecommendationWhat to do about this score

It is recommended to conduct a comprehensive review of the _transfer function and any other omitted code to ensure full security coverage, particularly regarding reentrancy and balance integrity.

Strengthen the access control mechanisms by thoroughly auditing all external contracts (IPoolRegistry, IPool, IDebtToken, IProxyOFT) that interact with SyntheticToken's critical functions, ensuring their security and expected behavior. Consider implementing a specific maxTotalSupply if an uncapped supply is not the long-term economic goal, or clearly document the implications of an uncapped supply. Ensure the _poolRegistry.governor() is controlled by a robust, multi-signature mechanism to mitigate the risks associated with centralized control.

Contract & Record

1 audit on record
TypeTransparentUpgradeableProxy
NetworkEthereum
Token age10mo
Contract0xab5e…befa
Deployer0x421a…7dbe
Proxy Upgrade Controls
Proxy TypeEip1967 Transparent
AdminOZ ProxyAdmin → Multisig 3-of-5
ImplementationVerified source
Upgrades (30d)0 · stable
Badge for your website
Metronome Synth USD security record badge

Free for any token on the record. It links to this page and always shows the current score and the date it was checked.

Audit History
  1. Sep 1, 202673High

Score changes are recorded as dated snapshots — history is append-only and cannot be edited.

Frequently Asked Questions

What is the MSUSD contract address?

The Metronome Synth USD (MSUSD) contract on Ethereum is 0xab5eb14c09d416f0ac63661e57edb7aecdb9befa. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.

Is Metronome Synth USD a scam?

Quantum Audit's risk score for Metronome Synth USD is 73/100 (High risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: Mintable; Liquidity lock: Not locked; 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.

Is MSUSD liquidity locked?

Liquidity lock: Not locked (as of Sep 4, 2026). Total DEX liquidity: $4.36M.

Who holds MSUSD?

As of Sep 4, 2026, the 10 largest holders own 98.1% of the supply. The Holders section on this page shows who they are by holder type.

Would You Like a More Detailed Audit of Metronome Synth USD?

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