Skip to content

Robinhood Chain·Scanned 05 Nov 2026, 04:45 UTC

TorchToken $TORCH

0x000050e18ffa3f8f7ad170eb9cef160eb3ed1111

Verdict

Caution

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

  • Contract
    85
  • Token
    70
  • Social / X
    60
  • Website
    40

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
Post on XView on explorer ↗

Findings

16 findings

Risks (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

    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

    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%
    85

    The 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%
    70

    Fair-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%
    60

    Verified 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%
    40

    The 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