The toby token contract is a custom ERC20 implementation with owner-controlled functionalities. A critical vulnerability was identified in the access control mechanism, utilizing tx.origin instead of msg.sender, which exposes owner-restricted functions to phishing attacks. Additionally, the transferFrom function exhibits incorrect logic, and an unused state variable was found. The contract includes a token recovery mechanism for ERC20 tokens.
On-chain security analysis — is it a scam or legit?
Is toby 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 toby token contract is a custom ERC20 implementation with owner-controlled functionalities.
Read the full analysis- Ownership not renounced — owner is an EOA
- Top-10 concentration > 20%
- 1 Critical finding(s) from audit
- 1 High finding(s) from audit
- 1 Low finding(s) from audit
Exact factors
- Ownership NOT renounced — owner is an EOA (single private key)
- Top-10 concentration > 20% (23.0% total → 21.5% effective; 20.4% in EOAs, 2.6% in contracts — mild)
- 1 Critical finding(s) from audit
- 1 High 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, staking2.6%
- Walletsanonymous holders, free to sell20.4%
- Everyone elsethe rest of the supply77.0%
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- SushiswapWETHAnalysed$209.2K89.1%
- Uniswap v3WETH$22.7K9.7%
- AerodromeWETH$1.5K0.6%
- SushiswapWETH$7900.3%
- AerodromeWETH$1840.1%
- Uniswap v3WETH$1480.1%
The 11 remaining pairs hold $172 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.
0xe7aa…bf760xa266…40cf0x2515…fbc00x538c…4d970x0444…e33a0x12c9…da4a0x5ffc…85b10xc027…64870x34b2…93e6No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
Criticaltx.origin for Access Control
The onlyOwner modifier in the Ownable contract uses tx.origin instead of msg.sender for access control. This is a critical vulnerability as it makes all owner-restricted functions susceptible to phishing attacks. If the legitimate owner interacts with a malicious contract, that contract can then call owner-restricted functions (e.g., transferOwnership, renounceOwnership, recoverERC20) on the toby token contract, as tx.origin would still resolve to the legitimate owner's address.C-01
tx.origin for Access ControlIssue
The onlyOwner modifier in the Ownable contract uses tx.origin instead of msg.sender for access control. This is a critical vulnerability as it makes all owner-restricted functions susceptible to phishing attacks. If the legitimate owner interacts with a malicious contract, that contract can then call owner-restricted functions (e.g., transferOwnership, renounceOwnership, recoverERC20) on the toby token contract, as tx.origin would still resolve to the legitimate owner's address.
Fix
Replace tx.origin with msg.sender in the onlyOwner modifier. The msg.sender variable always refers to the immediate caller of the function, providing a secure and standard way to implement access control.
Status
Unresolved
HighIncorrect transferFrom Logic
The transferFrom function executes the token transfer (_transfer) before checking if the allowance is sufficient and updating it. Specifically, _transfer(sender, recipient, amount) is called first, followed by `require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"). If the allowance is insufficient, the _transfer` operation will still occur (if the sender has enough balance), but the transaction will then revert due to the subsequent require statement. This leads to wasted gas and non-standard ERC20 behavior, potentially causing issues for integrations expecting the allowance check to precede the transfer.H-01
transferFrom LogicIssue
The transferFrom function executes the token transfer (_transfer) before checking if the allowance is sufficient and updating it. Specifically, _transfer(sender, recipient, amount) is called first, followed by `require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"). If the allowance is insufficient, the _transfer` operation will still occur (if the sender has enough balance), but the transaction will then revert due to the subsequent require statement. This leads to wasted gas and non-standard ERC20 behavior, potentially causing issues for integrations expecting the allowance check to precede the transfer.
Fix
Reorder the operations within transferFrom. The allowance check (require(currentAllowance >= amount)) should occur before _transfer(sender, recipient, amount). The correct sequence is: check allowance, perform transfer, then update allowance.
Status
Unresolved
LowUnused State Variable Optimization
The public state variable Optimization is declared and initialized with a large uint256 value but is never read or used within any of the contract's functions. This adds unnecessary storage cost to the contract and can be misleading to developers or auditors regarding its purpose.L-01
OptimizationIssue
The public state variable Optimization is declared and initialized with a large uint256 value but is never read or used within any of the contract's functions. This adds unnecessary storage cost to the contract and can be misleading to developers or auditors regarding its purpose.
Fix
Remove the Optimization variable if it serves no functional purpose. If it is intended for future use, consider adding comments to explain its role or making it internal if it's not meant for external interaction.
Status
Unresolved
InfoCustom ERC20 Implementation
The contract utilizes a custom implementation of the ERC20 standard rather than leveraging battle-tested and widely audited libraries such as OpenZeppelin Contracts. While the current implementation largely adheres to the standard, custom code carries a higher inherent risk of introducing subtle bugs, edge cases, or non-compliance issues that might have been addressed in more mature libraries.I-01
Issue
The contract utilizes a custom implementation of the ERC20 standard rather than leveraging battle-tested and widely audited libraries such as OpenZeppelin Contracts. While the current implementation largely adheres to the standard, custom code carries a higher inherent risk of introducing subtle bugs, edge cases, or non-compliance issues that might have been addressed in more mature libraries.
Fix
Consider migrating to OpenZeppelin's ERC20 implementation for enhanced security, reliability, and maintainability. If a custom implementation is deemed necessary, ensure comprehensive unit testing, formal verification, and thorough security audits are conducted to mitigate potential risks.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract implements a custom ERC20 token with standard functionalities like transfer, approve, mint, and burn (7.2 Code Security). It includes a useful TokenRecover mechanism allowing the owner to retrieve accidentally sent ERC20 tokens (7.8 Operations). However, a critical tx.origin vulnerability in the onlyOwner modifier compromises all owner-restricted functions (7.3 Access Control). The transferFrom function has incorrect logic, performing the transfer before checking allowance, leading to gas waste and non-standard behavior (7.2 Code Security). An unused state variable also adds minor technical debt.
The contract represents a simple ERC20 token with no complex economic models or governance mechanisms (7.4 Economic, 7.5 Governance). The initial supply is minted to a specified token owner during deployment. The owner has control over token recovery and ownership transfer, which is standard for a basic token contract. No fees are imposed on token transfers.
The contract is not designed to be upgradeable (7.7 Upgrades). It does not implement any proxy patterns, meaning its logic is immutable once deployed. This simplifies the architecture but requires careful initial deployment.
It is critical to address the tx.origin vulnerability by replacing it with msg.sender in the onlyOwner modifier to prevent phishing attacks and unauthorized access to owner-controlled functions.
The transferFrom function's logic should be corrected to ensure the allowance check precedes the token transfer, aligning with ERC20 standards and preventing gas waste. Consider using battle-tested OpenZeppelin contracts for ERC20 and Ownable implementations to leverage audited and secure code, reducing the risk of subtle bugs inherent in custom implementations.
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, 202630Low
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the TOBY contract address?
The toby contract on Base is 0xb8d98a102b0079b69ffbc760c8d857a31653e56e. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is toby a scam?
Quantum Audit's risk score for toby is 30/100 (Low risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Ownership: Retained; 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 TOBY liquidity locked?
Liquidity lock: Locked (as of Sep 4, 2026). Total DEX liquidity: $234.9K.
Who holds TOBY?
As of Sep 4, 2026, the 10 largest holders own 23.0% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of toby?
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