Robinhood Chain·Scanned 05 Nov 2026, 04:45 UTC
TorchToken $TORCH
Verdict
72/100 safety
No owner or mint, fixed 2% buy / 0% sell tax and sells work; homepage overstates holder payouts and LP lock
The TORCH token contract is clean: nobody can mint, pause, blacklist or change the fixed 2% buy tax, and test sells worked with no sell tax. The main concerns are off the token: the homepage advertises holder fee payouts that the project's own docs say are not live yet, the 'liquidity locked forever' claim is not shown as a recognised lock (the liquidity sits in the launch factory), and the fee router receiving the tax is unverified. Holders are reasonably spread, no snipers or bundles were found, and buyback-and-burns are ongoing.
Score breakdown
- Contract85
- Token70
- Social / X60
- Website40
Higher is safer · 0 = worst · 100 = best
- Yes
- 0%
- None (no owner role)
- 0% / 0%
- MC at check
- $9.47M
- MC now
- no live price
- Since check
- —
- Liquidity
- $2.27M
Key findings
- HighHomepage says holder payouts are live; docs say they are not
- MediumToken's pool uses an unverified v4 hook
- MediumAdvertised 1% fee split differs from the actual 2% buy-only tax
- MediumMain pool liquidity sits in the factory, not a recognised lock
- GoodBuyback & burn verified on-chain: 4.3% of supply burned
What would change the verdict
- Raises safety:Fee router source verified, showing no admin can redirect tax payouts → contract score up
- Raises safety:Full TorchFactory source verified with no liquidity-withdrawal path, confirming the main pool cannot be pulled → token score up
- Raises safety:Holder fee payouts actually go live on-chain as the homepage advertises, or the homepage is corrected → website and social up
- Lowers safety:The unlabelled 6.7% contract holder or the three funding clusters (about 2% each) dump into the pool → down
Findings
16 findingsRisks (8)
HighHomepage says holder payouts are live; docs say they are notclaims-mismatchAI
The marketing site tells buyers that holding $TORCH already pays two revenue streams: 70% of a 1% trade fee straight to holders, plus about 25% of bot, launchpad and terminal revenue, and that farming is live with nothing to sign up for. The project's own docs say the opposite: during the launch phase the holders' share of the buy tax is not paid to holders, the holder-reward plan is not live yet, and the numbers are plans that can change. Someone buying because of the homepage can be holding a token that does not yet pay what the homepage advertises.
Evidence
Show source
70% straight to holders paid out in WETH or in Torch via auto buys if wishedShow source
holders receive ~25% of net revenue from the trading bot, launchpad and terminal, distributed pro-rata by supply held.Show source
both streams pay continuously. holding is the only requirement.Show source
farming live the allocation is being earned right nowShow source
This is where $TORCH is heading once the launch phase is over. It's a plan, not live yet.Show source
These numbers are plans for now and subject to change for the benefit of the project.Show source
While $TORCH is young, the full 70% holders' share goes into instead, until there are more holders and the distribution is clearer.
Confirmed by: grok-4.7, gpt-5.6-sol
MediumToken's pool uses an unverified v4 hookhoneypotDeterministic
A Uniswap v4 pool of this token (pool.hooks (0x34a2d9f9…)) runs hook 0xb3d2…4040 on every swap (afterSwap). The hook's source code is not verified, so it cannot be checked whether it blocks sells for some wallets or later, or takes a hidden fee. A passing sell simulation only shows it works for our test wallet right now.
Evidence
- on-chainpool hook 0xb3d2C19158FDd8D687BF0D7e9DDc76b031354040 permission bits: afterSwap
Confirmed by: facts
MediumAdvertised 1% fee split differs from the actual 2% buy-only taxclaims-mismatchAI
TORCH has a fixed 2% buy tax and no sell tax, not a 1% trading fee on both sides. The token sends the entire collected buy tax to FEE_ROUTER; the supplied token code does not directly distribute it to holders or burn it.
Evidence
Show source
1% on every Torch trade, split two ways. 70% straight to holders paid out in WETH or in Torch via auto buys if wished 30% burned forever- on-chainBUY_TAX_BPS = 200 (2%); sellTaxBps = 0 (0%)
- forkbuyTaxPct = 2; sellTaxPct = 0
Show source
sell: 2393115325342663726558 token-wei → 9731716149338588 quote-wei (expected 9731716149338588) - codeTorchToken.sol:L121-L134
Show source
function _update(address from, address to, uint256 value) internal override { if (from == address(0) || to == FACTORY || value == 0 || !_isPool(from)) { super._update(from, to, value); return; } uint256 tax = (value * buyTaxBps()) / BPS; if (tax == 0) { super._update(from, to, value); return; } super._update(from, to, value - tax); super._update(from, FEE_ROUTER, tax); uint256 creatorCut = (tax * CREATOR_SHARE_BPS) / BPS; emit BuyTaxPaid(from, to, creatorCut, tax - creatorCut); - forkbuyTaxPct = 2; sellTaxPct = 0; transferTaxPct = 0
Show source
buy: 20000000000000000 quote-wei in → 4786230650685327453116 token-wei out (expected 4883908827229925972567) - codeTorchToken.sol:L94-L102
Show source
function buyTaxBps() public view returns (uint256) { uint256 elapsed = block.timestamp - LAUNCHED_AT; if (elapsed >= SNIPE_DURATION) return BUY_TAX_BPS; // SNIPE_DURATION == 0: always fixed return SNIPE_START_BPS - ((SNIPE_START_BPS - BUY_TAX_BPS) * elapsed) / SNIPE_DURATION; } function sellTaxBps() external pure returns (uint256) { return 0; }
Confirmed by: gpt-5.6-sol, claude-opus-5.5
MediumMain pool liquidity sits in the factory, not a recognised lockliquidityAI
In the main v4 pool (about $2.72M liquidity), 99.97% of the liquidity was added directly by TorchFactory 0x7891…776a. Facts report 0% locked and 0% burned. The factory's function table has no remove-liquidity or withdraw function; it shows only compound, compoundFrom, observe, launch, setMetadata, the admin setters and unlockCallback. That suggests the liquidity cannot be pulled. However, the full TorchFactoryBase source was not provided, so this could not be fully verified.
Evidence
- on-chainuniswap-v4 0x1649550af1…: v4 position liquidity other holders: 0x7891ea889899928afe637e4cca8106188427776a [contract — possibly a locker/launchpad] 99.9734%
- on-chainliquidity pool 0x1649550af1e3363b4c25236434530af7e6886b183e1f574a98fdd1d04d287a2d lpBurnedPct=0 lpLockedPct=0
Show source
liquidity forever locked in uniswap pools.- on-chainuniswap-v4 pool 0x1649550af1e3363b4c25236434530af7e6886b183e1f574a98fdd1d04d287a2d: lpBurnedPct = 0; lpLockedPct = 0; lpHeldByDeployerPct = 0
- on-chainuniswap-v4 0x1649550af1…: v4 position liquidity other holders: 0x7891ea889899928afe637e4cca8106188427776a [contract — possibly a locker/launchpad] 99.9734%, 0xb4fbcda754d07ba8b185d0f3da090528be3d6b87 0.0265%
- on-chainuniswap-v4 pool 0x385b4e85f060c35ea3872cb2163be823151d1b118d8c2dfe6ab6c6d17e53d117: lpBurnedPct = 0; lpLockedPct = 0; lpHeldByDeployerPct = 0
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol · Disputed by: gpt-5.6-sol
MediumHook owner on a small TORCH pool can swap code that could block tradesotherAI
Pool 0x385b4e85… (about $5.7k liquidity) uses MEVRebateHook 0xB851…d4C0. Its owner 0x883a…3A8e can call changeExecutorAddress at any time, with no timelock. The hook calls the executor with 10M gas before and after every swap. Normal executor failures are ignored. If the executor reverts with a 'LOK' payload, however, the whole swap reverts. So a malicious executor could block or grief trading in that pool. The hook also reverts swaps it classifies as cyclic MEV (CyclicSwap), which can hit multi-hop routers. The hook has no ReturnDelta permissions, so it cannot take swap amounts directly. This affects only that minor pool; the main pool has no hook flagged.
Evidence
- codewthHOOKV2.sol:L127-L134
Show source
function changeExecutorAddress(address newExecutor) external onlyOwner { require(newExecutor != address(0), "Zero address"); require( newExecutor != registryMaintainer, "Maintainer cant be the executor" ); executor = IHookArbitrageExecutor(newExecutor); } - codewthHOOKV2.sol:L387-L432
Show source
function _executeArbitrage( PoolKey calldata key, address token, address quote, address swapper, address tokenOut ) internal { PoolKey[] memory pools = tokenPools[token][_registryQuote(quote)]; bytes memory callData = abi.encodeCall( IHookArbitrageExecutor.executeArbitrage, (key, pools, swapper, tokenOut) ); address target = address(executor); bool success; bytes memory reason; - codewthHOOKV2.sol:L271-L309
Show source
function _revertIfMev( address swapper, address token, address quote, bool tokenIn ) internal view { if (swapper != address(0) && token != quote) { int256 tokenDelta = _currencyDelta(swapper, token); int256 nativeTokenDelta = token == WETH ? _currencyDelta(swapper, address(0)) : token == address(0) ? _currencyDelta(swapper, WETH) : int256(0); - on-chainuniswap-v4 0x385b4e85f0…: hooks=0xB85138cbcAe0F7ddE777138392F44fD0C995d4C0
Confirmed by: claude-opus-5.5
LowFee router receiving all buy tax is unverifiedfeesAI
The whole buy tax goes to FEE_ROUTER 0x3402…0fA6. The token comments say the router splits the tax 70% creator / 30% Torch and pays out in ETH. The router's source and admin were not part of the material. Who can redirect those payouts is unknown. This does not affect holders' ability to sell.
Evidence
- codeTorchToken.sol:L40-L42
Show source
/// @dev Immutable. Receives the whole tax; splits 70/30 and pays ETH. Creator payout wallet and /// Torch treasury live there, so nothing in this token can redirect either share. address public immutable FEE_ROUTER; - on-chainFEE_ROUTER = 0x340278A0eF7c7e83418771504871619453bd0fA6
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
LowWithdrawals from contracts exposing token0/token1 pay the 2% taxfeesAI
Besides the v4 PoolManager, the token checks each contract once by calling token0()/token1(). If either returns this token's address, the contract is cached as a 'pool' forever. Every transfer out of such a contract then pays the 2% tax. Users who withdraw TORCH from a vault-like or v2/v3 contract that exposes token0/token1 will lose 2%. A transfer from a contract also reverts if too little gas is left for the check. This is a design property, not an owner power, and the tax goes to the fixed fee router.
Evidence
- codeTorchToken.sol:L137-L159
Show source
function _isPool(address a) internal returns (bool) { if (a == POOL_MANAGER) return true; uint8 s = poolStatus[a]; if (s != UNKNOWN) return s == POOL; if (a.code.length == 0) return false; if (gasleft() < PROBE_MIN_GAS) revert InsufficientGasForProbe(); bool pool = _answers(a, ERC20Pool.token0.selector) || _answers(a, ERC20Pool.token1.selector); if (pool) { poolStatus[a] = POOL; emit PoolRecognised(a); return true; } // Cache "not a pool" for ordinary contracts. A delegated EOA (EIP-7702, code = 0xef0100 || addr) // can re-delegate to different code, so it is probed every time. if (!_isDelegatedEOA(a)) poolStatus[a] = NOT_POOL; - codeTorchToken.sol:L142
Show source
if (gasleft() < PROBE_MIN_GAS) revert InsufficientGasForProbe();
Confirmed by: claude-opus-5.5, gpt-5.6-sol
LowProject post misstates the burned share (4.04% claimed as 4.20%)claims-mismatchAI
With a total supply of 1,000,000,000 TORCH, 40,420,420 tokens equal about 4.042%, not 4.20%. The later on-chain snapshot also shows that ongoing burns had reached 42,954,521.368551330810558675 tokens, or 4.2954%.
Evidence
Show source
currently 40,420,420 (4,20%) of the supply has been torched worth $330,037.15,- USD.- on-chaintotalSupply = 1000000000000000000000000000; decimals = 18
- on-chaintoken.burns: burned = 42954521368551330810558675; burnedPct = 4.2954; ongoing = true
- on-chainbalanceOf(0x000000000000000000000000000000000000dEaD) = 4.2954% of supply
Confirmed by: gpt-5.6-sol, claude-opus-5.5
Positive signals (4)
PositiveBuyback & burn verified on-chain: 4.3% of supply burnedburnDeterministic
4.3% of the supply ever minted is burned (at least: the transfer history was read partially), in 821 burn transfer(s), last 2026-11-05. Burned by: holder 0x0695…9a07 (2.0%, 15 burns); holder 0x6d93…a6ce (1.1%, 598 burns); holder 0x5d75…305e (0.02%, 27 burns). Burned tokens are gone for good, which reduces the supply over time.
Evidence
- on-chainTransfer events to 0x0 / 0x…dEaD and balanceOf(burn addresses) of 0x000050e18ffa3f8f7ad170eb9cef160eb3ed1111
Confirmed by: facts
PositiveToken has no owner, mint, pause, blacklist or upgrade pathownershipAI
TorchToken is a standard OpenZeppelin ERC-20 with permit and one addition, a buy tax. It has no owner or role, no mint function after the constructor, no pause, no blacklist and no upgrade path. All settings (tax rate, fee router, factory, pool manager) are immutable and set once at deploy. Nobody can change token behaviour after launch.
Evidence
- codeTorchToken.sol:L36-L46
Show source
address public immutable POOL_MANAGER; /// @dev The factory receives the dev-buy output untaxed inside `launch()` and forwards it to the /// creator; it also receives collected LP fees for compounding. It never holds tokens otherwise. address public immutable FACTORY; /// @dev Immutable. Receives the whole tax; splits 70/30 and pays ETH. Creator payout wallet and /// Torch treasury live there, so nothing in this token can redirect either share. address public immutable FEE_ROUTER; uint256 public immutable BUY_TAX_BPS; /// @dev Anti-snipe window in seconds; 0 = off. uint256 public immutable SNIPE_DURATION; uint256 public immutable LAUNCHED_AT; - codeTorchToken.sol:L75-L87
Show source
constructor(Params memory p) ERC20(p.name, p.symbol) ERC20Permit(p.name) { if (p.buyTaxBps == 0 || p.buyTaxBps > 1_000) revert BadTax(); // 0.01% .. 10% if (p.antiSnipeSeconds > MAX_SNIPE_DURATION) revert BadSnipe(); if (p.poolManager == address(0) || p.feeRouter == address(0) || p.feeRouter == p.poolManager) revert BadRecipient(); POOL_MANAGER = p.poolManager; FACTORY = p.factory; FEE_ROUTER = p.feeRouter; BUY_TAX_BPS = p.buyTaxBps; SNIPE_DURATION = p.antiSnipeSeconds; LAUNCHED_AT = block.timestamp; _contractURI = p.contractURI; _mint(p.supplyRecipient, p.supply); } - on-chainisProxy=false, privileges=[]
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
PositiveTest sells worked, also from a second wallet and an hour laterhoneypotAI
A real buy and sell on the Uniswap v4 pool worked. A wallet that received tokens by transfer could also sell, and selling still worked one hour later. The token code has no path that blocks sells.
Evidence
- forksecond wallet (received via transfer) could sell; sell after +1h: ok
Show source
canSell: true
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
PositiveFounder handle is public and no scam accusations were foundsocialAI
The project account is verified and points at the app. The person the team calls the founder, @log1_053, has a 2021 account whose bio says they are building Torch, and community posts name that same handle. A search for scam, rug and honeypot posts did not return accusations against this token. That is not a legal identity and not proof the token is safe.
Evidence
Show source
if you have missed yesterdays AMA with torch founder @log1_053 then we highly recommend to watch the recording below.Show source
I was there from the start, had several talks with the dev @log1_053
Confirmed by: grok-4.7
Notes (4)
InfoFixed 2% buy tax to the fee router; sells and transfers untaxedfeesAI
When tokens leave a recognised pool (a buy), 2% of the amount goes to the immutable FEE_ROUTER 0x3402…0fA6. Sells, wallet-to-wallet transfers and transfers to the factory are not taxed. The constructor caps the rate at 10% and no setter exists. The anti-snipe schedule (start at 80%, fall to 2% over 60 seconds) ended at launch and can never come back. The fork simulation confirmed a 2% buy tax and 0% sell and transfer tax.
Evidence
- codeTorchToken.sol:L121-L135
Show source
function _update(address from, address to, uint256 value) internal override { if (from == address(0) || to == FACTORY || value == 0 || !_isPool(from)) { super._update(from, to, value); return; } uint256 tax = (value * buyTaxBps()) / BPS; if (tax == 0) { super._update(from, to, value); return; } super._update(from, to, value - tax); super._update(from, FEE_ROUTER, tax); uint256 creatorCut = (tax * CREATOR_SHARE_BPS) / BPS; emit BuyTaxPaid(from, to, creatorCut, tax - creatorCut); } - codeTorchToken.sol:L94-L102
Show source
function buyTaxBps() public view returns (uint256) { uint256 elapsed = block.timestamp - LAUNCHED_AT; if (elapsed >= SNIPE_DURATION) return BUY_TAX_BPS; // SNIPE_DURATION == 0: always fixed return SNIPE_START_BPS - ((SNIPE_START_BPS - BUY_TAX_BPS) * elapsed) / SNIPE_DURATION; } function sellTaxBps() external pure returns (uint256) { return 0; } - codeTorchToken.sol:L76
Show source
if (p.buyTaxBps == 0 || p.buyTaxBps > 1_000) revert BadTax(); // 0.01% .. 10% - forkbuyTaxPct=2, sellTaxPct=0, transferTaxPct=0
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
InfoHolders moderately spread; no snipers or bundles foundholdersAI
There are 4,341 holders, and the top 10 (excluding infrastructure) hold about 21%. The largest wallet is an unlabelled contract 0xF188…81f2 with 6.70%. Three small funding clusters hold about 2% each. No sniper wallets or bundles were found. The deployer holds 0%. About 4.3% of supply has been burned, with burns ongoing, including 137 buyback burns.
Evidence
- on-chaintop10Pct=21.1728, holdersCount=4341
- on-chainsnipers.wallets=[], bundles=[]
- on-chainDeployer 0xb2899cb0ff832626604e44a44fc2184ff8442020 holds 0% now
- on-chainburns.burnedPct=4.2954
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
InfoTORCH is the quote currency for other Torchpad launchesotherAI
TorchFactory lists this token as its immutable platformQuote. TORCH is therefore the base currency for other Torchpad launches, which helps explain the 13.9% of supply held in the v4 PoolManager. The factory admin 0x94E4…552B can only toggle allowed quotes and keepers. These are launch settings for new tokens, not powers over TORCH balances.
Evidence
- on-chainTorchFactory platformQuote = 0x000050E18ffa3F8F7aD170Eb9CeF160eb3Ed1111
- on-chainTorchFactory admin = 0x94E4A9B18935F0dd9B8EA0a0caced47CD7D0552B; setKeeper, setQuoteStatus, setAnyQuoteAllowed [admin]
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
InfodApp buy test timed out before any transaction (inconclusive)websiteAI
The scripted buy on app.torchpad.fun only produced two SIWE login signatures. Those signatures move no funds and grant no permission. The test hit its time cap before any transaction, and the sell test was skipped. This is inconclusive, not evidence of a failure.
Evidence
- forkdApp test Buy: driver timeout — goal time cap reached
Show source
This signature does not move funds or grant any permission.
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
Score breakdown
Higher is safer. The overall is the weighted average of the assessed parts, then capped by hard facts.
Contract
weight 45%85The token itself is a verified, non-upgradeable ERC-20 with no owner powers and an immutable 2% buy tax, and simulated sells pass; small deductions for the unverified fee router and side-pool hooks.
Why this score
Raised the score
- No owner, mint, pause, blacklist or proxy
- Tax rate and fee router are immutable (2% buy, 0% sell)
- Sells worked, including from a second wallet and after 1 hour
- Source verified
Lowered the score
- Fee router receiving the tax is unverified
- Unverified v4 hook found on a related pool
- Owner-controlled MEV hook on a minor TORCH pool
- Any contract exposing token0/token1 is taxed on withdrawals
Token
weight 30%70Fair-looking launch with no snipers or bundles, wide holder base, deep liquidity and ongoing burns, but main-pool liquidity sits in the factory contract rather than a recognised lock.
Why this score
Raised the score
- No sniper wallets or bundles detected
- 4,341 holders, top 10 about 21%
- About $2.7M liquidity in the main pool
- Ongoing buyback & burn, 4.3% of supply burned
- Deployer holds 0%
Lowered the score
- Main pool liquidity held by the factory, not locked or burned
- Unlabelled contract holds 6.7%
- Three funding clusters hold about 2% each
Social / X
weight 15%60Verified X account with a publicly named builder and no scam accusations, but official messaging overstates live holder payouts and burn numbers.
Why this score
Raised the score
- Verified project X account since 2025
- Founder handle publicly named and consistent across posts
- No rug or honeypot accusations found
Lowered the score
- Promotes holder payouts that docs say are not live
- Burn percentage in a post is misstated
Website
weight 10%40The homepage makes several claims (live holder payouts, 1% fee split, liquidity locked forever) that the docs or the chain contradict; only the buyback-and-burn claim is confirmed.
Why this score
Raised the score
- Buyback & burn claim confirmed on-chain
- Docs site exists and openly says payouts are a plan
Lowered the score
- Homepage says holder payouts are live; docs say not yet
- Advertised 1% fee split does not match the actual 2% buy tax
- 'Liquidity locked forever' not shown as locked on-chain
- Domain only a few months old