The UFragments (AMPL) contract implements a rebaseable ERC-20 token. It utilizes SafeMath for arithmetic safety and includes EIP-2612 permit functionality. The contract is upgradeable via an AdminUpgradeabilityProxy. A significant finding is the highly centralized control over the token's supply through the monetaryPolicy address, which can arbitrarily adjust _totalSupply via the rebase function. Additionally, unused state variables pose a minor risk for future upgrades.

On-chain security analysis — is it a scam or legit?
Is Ampleforth 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 UFragments (AMPL) contract implements a rebaseable ERC-20 token.
Read the full analysis- Ownership not renounced — owner is a contract
- Proxy contract
- Admin is unclassified contract
- Top-10 concentration > 70%
- Liquidity not locked
- 1 High finding(s) from audit
- 1 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)
- Proxy contract (upgradeable — admin can replace logic)
- Admin is unclassified contract
- Top-10 concentration > 70% (496.8% total → 458.7% effective; 433.2% in EOAs, 63.6% in contracts — extreme)
- Liquidity NOT locked (owner can withdraw — rug-pull risk)
- 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, 2026How the supply is spread across holders could not be read — the indexer's holder list does not add up to the supply. Check the largest holders on a block explorer, which reads current balances.
Liquidity
as of audit · Sep 4- Uniswap v2WETHAnalysed$582.2K85.8%
- SushiswapWETH$61.0K9.0%
- Uniswap v4USDC$25.4K3.7%
- Uniswap v4ETH$9.7K1.4%
- Uniswap v3USDC$1020.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.
0x2235…39a90xe062…497c0xb46c…c00a0x1522…3cca0x7e18…40450xb740…033a0xd135…5cb20xebec…5b8b0xe295…3f770xce12…c034A privileged address — the deployer, the owner, or the token contract itself — is among these holders, so that party can withdraw liquidity.
Security Findings
HighCentralized Control over Token Supply
The owner address has the ability to set the monetaryPolicy address. The monetaryPolicy address then has exclusive control over the rebase function, which can arbitrarily increase or decrease the token's _totalSupply. This grants a single external entity significant power to manipulate the token's supply, posing a high economic risk to token holders. (7.3 Access Control, 7.4 Economic, 7.5 Governance)H-01
Issue
The owner address has the ability to set the monetaryPolicy address. The monetaryPolicy address then has exclusive control over the rebase function, which can arbitrarily increase or decrease the token's _totalSupply. This grants a single external entity significant power to manipulate the token's supply, posing a high economic risk to token holders. (7.3 Access Control, 7.4 Economic, 7.5 Governance)
Fix
Consider implementing a multi-signature wallet for the owner and monetaryPolicy roles to distribute control. Explore a time-locked mechanism or a decentralized governance process for critical supply adjustments to reduce single-point-of-failure risk.
Status
Unresolved
MediumUnused State Variables and Upgradeability Risk
The contract declares two private state variables, rebasePausedDeprecated and tokenPausedDeprecated, which are never used in the contract logic. While private, these variables still occupy storage slots. In an upgradeable contract using AdminUpgradeabilityProxy, changes to storage layout (e.g., removing these variables or changing their order/type in a future implementation) without careful slot management could lead to storage collisions, data corruption, or unexpected behavior in subsequent upgrades. (7.2 Code Security, 7.7 Upgrades)M-01
Issue
The contract declares two private state variables, rebasePausedDeprecated and tokenPausedDeprecated, which are never used in the contract logic. While private, these variables still occupy storage slots. In an upgradeable contract using AdminUpgradeabilityProxy, changes to storage layout (e.g., removing these variables or changing their order/type in a future implementation) without careful slot management could lead to storage collisions, data corruption, or unexpected behavior in subsequent upgrades. (7.2 Code Security, 7.7 Upgrades)
Fix
Remove unused state variables to reduce contract complexity and potential for storage collisions during upgrades. If they are intended for future use, ensure their purpose is documented and their storage slots are explicitly managed across upgrades.
Status
Unresolved
LowtransferAll and transferAllFrom use delete
The transferAll and transferAllFrom functions use delete _gonBalances[msg.sender] and delete _gonBalances[from] respectively to clear the sender's balance. While functionally correct and gas-efficient for transferring the entire balance, using delete explicitly clears the storage slot. This behavior, though not a direct vulnerability, might be unexpected for users accustomed to balances simply becoming zero through subtraction. (7.2 Code Security)L-01
transferAll and transferAllFrom use deleteIssue
The transferAll and transferAllFrom functions use delete _gonBalances[msg.sender] and delete _gonBalances[from] respectively to clear the sender's balance. While functionally correct and gas-efficient for transferring the entire balance, using delete explicitly clears the storage slot. This behavior, though not a direct vulnerability, might be unexpected for users accustomed to balances simply becoming zero through subtraction. (7.2 Code Security)
Fix
Document this behavior clearly for users. Alternatively, consider using _gonBalances[sender] = 0; for consistency with typical ERC-20 balance management, although delete is more gas-efficient for clearing a non-zero slot.
Status
Unresolved
InfoMAX_SUPPLY Hard Cap
The _totalSupply of the token is capped at type(uint128).max (approximately 3.4 * 10^38) by the MAX_SUPPLY constant. This hard cap is enforced within the rebase function. While a very large number, it represents a fixed upper limit on the token's total supply. (7.4 Economic)I-01
MAX_SUPPLY Hard CapIssue
The _totalSupply of the token is capped at type(uint128).max (approximately 3.4 * 10^38) by the MAX_SUPPLY constant. This hard cap is enforced within the rebase function. While a very large number, it represents a fixed upper limit on the token's total supply. (7.4 Economic)
Fix
Ensure that all stakeholders and users are aware of this hard cap and its implications for the token's long-term economic model. This is a design decision rather than a vulnerability, but transparency is key.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract demonstrates good technical practices, including the use of SafeMath for robust arithmetic operations and adherence to the ERC-20 standard, along with EIP-712 for permit functionality. The validRecipient modifier prevents transfers to zero address or the contract itself. However, the presence of unused state variables (rebasePausedDeprecated, tokenPausedDeprecated) introduces minor code clutter and potential for storage collision risks in future upgrades (7.2 Code Security).
The economic model centers around a rebase mechanism, allowing the monetaryPolicy address to adjust the token's total supply. This mechanism is a core design feature of Ampleforth. However, the control over the monetaryPolicy address, which dictates supply changes, is highly centralized, initially set by the owner (7.3 Access Control, 7.4 Economic, 7.5 Governance). This centralization presents a significant economic risk, as a single entity can arbitrarily influence token supply and value.
The contract is designed for upgradeability using the Initializable pattern and is deployed behind an AdminUpgradeabilityProxy. The ERC20Detailed base contract includes a ______gap variable, which is good practice for storage slot management during upgrades. However, the unused rebasePausedDeprecated and tokenPausedDeprecated variables, while private, occupy storage slots and could lead to storage collisions or unexpected behavior if not carefully managed in future upgrades (7.7 Upgrades).
To enhance the security and decentralization of the Ampleforth protocol, it is strongly recommended to implement a multi-signature wallet for the owner and monetaryPolicy roles.
This would distribute control over critical functions like setting the monetary policy and executing rebases, mitigating the risk associated with a single point of failure. Additionally, consider removing unused state variables to streamline the contract and reduce potential storage collision risks during future upgrades.
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 4, 202669High
- Aug 31, 202660Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Would You Like a More Detailed Audit of Ampleforth?
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