The Erc20 token contract implements a standard ERC-20 interface with an Ownable access control pattern. It includes a unique 'launched' state mechanism that restricts transfers to/from contracts before launch, providing a controlled distribution phase. The contract utilizes Solidity 0.8.24, benefiting from built-in overflow/underflow protections. Identified issues primarily relate to the implications of the pre-launch transfer restrictions and a non-standard self-transfer prohibition.
On-chain security analysis — is it a scam or legit?
Is Mr. Miggles 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 Erc20 token contract implements a standard ERC-20 interface with an Ownable access control pattern.
Read the full analysis- 1 High finding(s) from audit
- 1 Medium finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- 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, staking9.7%
- Walletsanonymous holders, free to sell13.2%
- Everyone elsethe rest of the supply77.1%
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- Uniswap v2WETHAnalysed$528.0K90.3%
- Uniswap v3WETH$18.8K3.2%
- Uniswap v4USDC$15.2K2.6%
- Uniswap v4USDC$14.4K2.5%
- AerodromeWETH$3.7K0.6%
- Uniswap v3USDC$1.5K0.3%
Show 4 more pairs
The 6 remaining pairs hold $374 between them and are not listed. The risk score reads depth across every pair.
The LP tokens of the analysed pool are locked or burned.
0xd505…797a0x9c4c…29dd0x2036…8d000x6ba3…d9ec0x9872…b4330x4423…9d3f0x65b0…e4650x26b7…597e0xab51…4e13No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
HighCentralized Control and Pre-Launch Transfer Restrictions
The Erc20 contract implements a launched state, controlled by the onlyOwner function launch(). Before launched is true, the _transferAllowed function prevents transfers to or from any contract address (from.isContract() || to.isContract()). This mechanism, while potentially intended to prevent sniping or control initial distribution, significantly centralizes control in the owner's hands and can block legitimate interactions with DEXes, aggregators, multisigs, or other DeFi protocols until the owner calls launch(). The transferFrom function also includes a special path allowing the owner to move tokens from an approved address to themselves before launch, further highlight…H-01
Issue
The Erc20 contract implements a launched state, controlled by the onlyOwner function launch(). Before launched is true, the _transferAllowed function prevents transfers to or from any contract address (from.isContract() || to.isContract()). This mechanism, while potentially intended to prevent sniping or control initial distribution, significantly centralizes control in the owner's hands and can block legitimate interactions with DEXes, aggregators, multisigs, or other DeFi protocols until the owner calls launch(). The transferFrom function also includes a special path allowing the owner to move tokens from an approved address to themselves before launch, further highlight…
Fix
Ensure comprehensive documentation clearly outlines the pre-launch phase, its implications for token holders, and how it affects interactions with other smart contracts. Consider if the isContract() check is overly restrictive; if specific contract types (e.g., known DEX routers) are intended to be allowed, a whitelist mechanism could be explored. Communicate the owner's role and the timing of the launch() function transparently.
Status
Unresolved
MediumNon-Standard Self-Transfer Restriction
The _transfer function includes a require(from != to, "you cannot transfer to yourself"); check. While seemingly a minor restriction, standard ERC-20 implementations typically allow transfers from an address to itself. Some protocols, dApps, or internal accounting systems might expect or rely on the ability to perform self-transfers for various reasons, such as gas optimization or re-triggering hooks. This deviation from the ERC-20 standard could lead to unexpected reverts or integration issues.M-01
Issue
The _transfer function includes a require(from != to, "you cannot transfer to yourself"); check. While seemingly a minor restriction, standard ERC-20 implementations typically allow transfers from an address to itself. Some protocols, dApps, or internal accounting systems might expect or rely on the ability to perform self-transfers for various reasons, such as gas optimization or re-triggering hooks. This deviation from the ERC-20 standard could lead to unexpected reverts or integration issues.
Fix
Consider removing the require(from != to, "you cannot transfer to yourself"); check to align with standard ERC-20 behavior and improve compatibility with existing infrastructure. If this restriction is intentional, thoroughly document its purpose and potential implications for users and integrators.
Status
Unresolved
LowMissing Event for launch() Function
The launch() function, which transitions the token from a restricted pre-launch state to a fully transferable state, does not emit an event upon successful execution. This makes it challenging for off-chain systems, such as block explorers, dApps, and analytics tools, to programmatically monitor the token's launch status and react accordingly without constantly polling the launched state variable.L-01
launch() FunctionIssue
The launch() function, which transitions the token from a restricted pre-launch state to a fully transferable state, does not emit an event upon successful execution. This makes it challenging for off-chain systems, such as block explorers, dApps, and analytics tools, to programmatically monitor the token's launch status and react accordingly without constantly polling the launched state variable.
Fix
Emit an event (e.g., event Launched(address indexed caller, uint256 timestamp);) when the launch() function is successfully called. This provides a clear, auditable, and easily monitorable signal for off-chain services.
Status
Unresolved
InfoAssembly Usage in _revert Function
The _revert function within the Address library uses inline assembly to handle reverts with custom error data. While this approach is functional and can be efficient for forwarding raw revert data, direct assembly usage can sometimes reduce code readability and increase the potential for subtle errors compared to higher-level Solidity constructs. In Solidity 0.8.x, abi.decode and revert can often achieve similar results for string error messages.I-01
_revert FunctionIssue
The _revert function within the Address library uses inline assembly to handle reverts with custom error data. While this approach is functional and can be efficient for forwarding raw revert data, direct assembly usage can sometimes reduce code readability and increase the potential for subtle errors compared to higher-level Solidity constructs. In Solidity 0.8.x, abi.decode and revert can often achieve similar results for string error messages.
Fix
Review if the assembly usage in _revert is strictly necessary for its intended purpose. If a more idiomatic Solidity approach can achieve the same functionality with improved readability and maintainability, consider refactoring. However, for a utility library function designed for precise error forwarding, the current implementation may be acceptable.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract is written in Solidity 0.8.24, which includes built-in overflow/underflow checks, enhancing code security (7.2 Code Security). It uses the Address library for safe low-level calls. A key architectural feature is the 'launched' state, which restricts transfers to/from contracts before activation, potentially causing integration issues for dApps or DEXes (7.1 Architecture). Additionally, the contract explicitly disallows self-transfers, deviating from standard ERC-20 behavior (7.2 Code Security).
The contract employs the Ownable pattern, granting the deployer significant control, particularly over the 'launch' function (7.3 Access Control). Before the token is 'launched', transfers to or from any contract address are prohibited, which is an economic control mechanism to manage initial distribution (7.4 Economic). The owner also has a special transferFrom privilege before launch. This centralized control over the launch phase introduces a medium governance risk, as the owner's action dictates the token's full functionality (7.5 Governance).
The contract is not designed to be upgradeable; it does not implement any proxy patterns (7.7 Upgrades). This eliminates risks associated with upgrade mechanisms, such as proxy misconfigurations or logic errors during upgrades. The use of immutable for totalSupply and decimals confirms its non-upgradeable nature.
It is recommended to thoroughly document the pre-launch transfer restrictions and the self-transfer prohibition to ensure all users and integrating protocols are aware of these non-standard behaviors.
Consider emitting an event when the launch() function is called to provide better off-chain monitoring capabilities. Review the necessity of disallowing self-transfers to maintain broader ERC-20 compatibility.
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 17, 20260Low
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the MIGGLES contract address?
The Mr. Miggles (MIGGLES) contract on Base is 0xb1a03eda10342529bbf8eb700a06c60441fef25d. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Mr. Miggles a scam?
Quantum Audit's risk score for Mr. Miggles is 0/100 (Low risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Ownership: Renounced; Mint: No mint; Liquidity lock: Locked; Upgradeability: Fixed code. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Is MIGGLES liquidity locked?
Liquidity lock: Locked (as of Sep 4, 2026). Total DEX liquidity: $584.8K.
Who holds MIGGLES?
As of Sep 4, 2026, the 10 largest holders own 22.9% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of Mr. Miggles?
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