Robinhood Chain·Scanned 05 Nov 2026, 11:39 UTC
PonsV2LauncherToken $MHD
Verdict
62/100 safety
Token has no owner powers; sells work with a 4% pool fee; one unidentified contract holds 62% of supply.
The token contract itself is clean: fixed supply, no owner powers, and buying and selling work, though every swap in the main pool pays a 4% launchpad fee. The main risk is holdings: one unidentified contract holds about 62% of supply and deployer-funded wallets hold about 5.5%, against only about $40k of main liquidity. The team's claimed buyback is not visible on-chain as a buy, and in-game withdrawals depended on team approval. Main pool liquidity is about 99% locked and token burns are ongoing.
Score breakdown
- Contract85
- Token40
- Social / X45
- Website45
Higher is safer · 0 = worst · 100 = best
- Yes
- 0%
- None (no owner role)
- 1% / 99%
- MC at check
- $187.3K
- MC now
- no live price
- Since check
- —
- Liquidity
- $40.0K
Live chart
The chart updates live; “MC at check” above is the market cap when this check ran.
Key findings
- HighClaim contradicted: Completed a buyback and burn using 3 ETH to buy and permanently burn 20,200,000 MHD tokens.
- HighUnidentified contract holds about 62% of supply
- MediumDeployer-funded wallets hold about 5.5% of supply, unlocked
- MediumFounder says every player won; official report shows losses
- GoodOngoing token burns verified on-chain: 2.0% of supply burned
What would change the verdict
- Raises safety:The 62% holder contract is identified as a locked game-reward or vesting contract with no free withdrawal → up
- Lowers safety:The 62% holder contract sends large amounts of MHD to wallets that sell into the ~$40k pool → down
- Lowers safety:Deployer-funded wallets (about 5.5%) start selling → down
- Raises safety:Team publishes the buyback transaction showing the 3 ETH purchase before the 20.2M burn → up
Findings
15 findingsRisks (9)
HighClaim contradicted: Completed a buyback and burn using 3 ETH to buy and permanently burn 20,200,000 MHD tokens.claims-mismatchDeterministic
The project claims buyback & burn, but none of the 23 burn(s) seen was preceded by a buy from a pool in the same transaction (2.0% of supply burned in total).
Evidence
Show source
3 ETH was used to purchase 20,200,000 $MHD, and all purchased tokens have been permanently burned.- on-chainTransfer events of 0xd39142cf605e31988153718fc6487b4d95389eca to burn addresses + balanceOf(0x…dEaD)
Confirmed by: facts
HighUnidentified contract holds about 62% of supplyholdersAI
Address 0xAB98…488C is a contract holding 61.99% of MHD. The facts layer did not classify it as a pool, locker, curve or launchpad contract. Its code and controller are not in the material. If whoever controls it can withdraw, it could sell into a pool with only about $40k of main liquidity and crash the price. It may be a staking, game or vesting contract, but that cannot be verified here.
Evidence
- on-chaintopHolders: 0xAB98d7a2303B82b230682C1c9B6D20D49662488C pct 61.9906 isContract true
- on-chainTop holders (excl. pools/curve/burn/infra/launchpad): 0xab98d7a2303b82b230682c1c9b6d20d49662488c [contract] 61.9906%
- on-chainliquidity pool 0x28e4391b6db2e6c735662b1e6ab5e91c42fdf177467e3465aa93f0bce93f36b2 liquidityUsd 40130
- on-chaintop10Pct = 71.4911; holdersCount = 976
Show source
top10Pct: 71.4911, holdersCount: 976
Confirmed by: claude-opus-5.5, gpt-5.6-sol, grok-4.7
MediumDeployer-funded wallets hold about 5.5% of supply, unlockedinsidersAI
Two contracts funded by the creator 0x21D1…51D3 hold 5.53% of supply together: - 0x1640…aA6B (2.04%) - the SafeProxy 0x2F1A…199e (3.49%) The deployer wallet itself holds 0% and has sold 0%. This is team-linked supply that could be sold at any time. No lock is shown for it.
Evidence
- on-chaininsiders: wallets 0x1640072f11b1e85e96853fcb11fe29df31e6aa6b, 0x2f1a895ec77930393588402c121306999a76199e fundedBy 0x21d1d288b90a46343d6c05d7d511b1a2343d51d3 pctSupplyHeldNow 5.5326
- on-chainDeployer 0x21d1d288b90a46343d6c05d7d511b1a2343d51d3 holds 0% now
Confirmed by: claude-opus-5.5 · Disputed by: gpt-5.6-sol
MediumFounder says every player won; official report shows lossesclaims-mismatchAI
The founder posted that everyone who played Minehood from day one has won. The project's own November 4 rewards post says 6 of 667 paying players are at a loss. Those two public claims cannot both be true. The 99.1% win rate is also only the team's self-reported game data, not something holders can check on-chain from the material here.
Evidence
Show source
Everyone who joined and played @minehood_rh from day one until today has won.Show source
661 out of 667 paying players are in profit. Only 6 are at a loss. That's a 99.1% profitability rate among paying players.
Confirmed by: grok-4.7, gpt-5.6-sol
MediumIn-game withdrawals required team approvalsocialAI
The project said yesterday's withdrawal requests were submitted together for approval and were still being processed, and it pointed players at team-controlled wallets to track payouts. That means money deposited into the game is not a normal token transfer: the team decides when withdrawals go out.
Evidence
Show source
Yesterday's withdrawal requests have been collectively submitted for approval. All transactions are now underway and being processed.
Confirmed by: grok-4.7, gpt-5.6-sol
LowLaunch sniped: 38 wallets took 12.5% of supply in 11 secondssnipersDeterministic
The launch was captured: 38 wallets bought 12.5% of the supply within 11 seconds. A small, fast group set the early price and could sell into everyone who bought later — bad for launch fairness and a strong insider/bot signal. They now hold 0.28% of supply, so current dump pressure from them is low — most of it was already sold, i.e. they exited on later buyers.
Evidence
- on-chainsnipers: windowBlocks=100, wallets=38, pctSupplyBought=12.5028, pctSupplyHeldNow=0.2785
- on-chainsnipers: pctSupplyBought 12.5028, pctSupplyHeldNow 0.2785
- on-chainclusters: funder 0xed9ab5bc05a0152b9dc2f7902e8369af7bc18771, 16 wallets, pctSupplyHeldNow 0
Confirmed by: facts, claude-opus-5.5, gpt-5.6-sol
LowPons protocol owner controls shared hook, factory, vault and lockerownershipAI
One address, 0x263e…19Dd, owns the hook, the factory, the buyback vault and the LP locker. Ownership of the hook cannot be renounced. What it can do on the hook: - Change global fee policy for future launches (hook fee ≤10%, protocol share ≤50%). - Rotate the fee sweep operator. - Change the protocol fee recipient for future launches. - Call rescuePoolFees, which pays pending fees to this pool's snapshotted protocol recipient and creator only, not to an arbitrary address. Through the factory it can override creator-fee recipients and run graduation rescue functions; the factory source is not provided. None of these powers can block holders from selling, but it is a trusted party. Whether it is a multisig or an EOA is not shown.
Evidence
- codePonsV2MemeHook.sol:L235-L278
Show source
function renounceOwnership() public pure override { revert OwnershipCannotBeRenounced(); } function setProtocolFeeShareBps(uint256 bps) external onlyOwner { if (bps > MAX_PROTOCOL_FEE_SHARE_BPS) revert InvalidBps(); protocolFeeShareBps = bps; emit ProtocolFeeShareUpdated(bps); } function setBuybackBurnBps(uint256 bps) external onlyOwner { if (bps > BASIS_POINTS) revert InvalidBps(); buybackBurnBps = bps; emit BuybackBurnBpsUpdated(bps); } - codePonsV2MemeHook.sol:L555-L603
Show source
function rescuePoolFees(PoolId poolId) external onlyOwner nonReentrant returns (uint256 protocolAmount, uint256 creatorAmount) { LaunchInfo memory info = launches[poolId]; if (!info.registered) revert UnknownPool(); address quoteToken = info.quoteToken; if (quoteToken != address(0)) { (protocolAmount, creatorAmount) = _rescueCurrency(poolId, info, quoteToken); } (uint256 memecoinProtocol, uint256 memecoinCreator) = _rescueCurrency(poolId, info, info.memecoin); if (protocolAmount == 0 && creatorAmount == 0 && memecoinProtocol == 0 && memecoinCreator == 0) { - on-chainfactory owner = 0x263ed295dAFaE1d9AAdD6E56c4B6F9f38eE019Dd; hook owner=0x263ed295dAFaE1d9AAdD6E56c4B6F9f38eE019Dd
Confirmed by: claude-opus-5.5 · Disputed by: gpt-5.6-sol
LowFee sweep operator chooses slippage on fee conversion swapsotherAI
Converting memecoin fees and running buybacks is restricted to the feeSweepOperator, 0xa101…cA83, which the owner sets. That operator chooses the minimum outputs. A careless or malicious operator could let these conversion swaps be sandwiched. The loss falls on accrued fees, not on holder balances, but these swaps also trade against the MHD pool.
Evidence
- codePonsV2MemeHook.sol:L500-L531
Show source
function sweepPoolFees(PoolId poolId, uint256 minConversionQuoteOut, uint256 minBuybackTokensOut) external nonReentrant { LaunchInfo memory info = launches[poolId]; if (!info.registered) revert UnknownPool(); bool isOperator = msg.sender == feeSweepOperator; if (!isOperator && msg.sender != info.creator) revert NotFeeSweepOperator(); if (!isOperator && _requiresTrustedOperator(poolId, info)) revert InternalSwapRequiresOperator(); (uint256 convertedFeeQuote, uint256 convertedTaxQuote, uint256 convertedBuybackQuote, bool converted) = _convertPendingMemecoin(poolId, info, minConversionQuoteOut); // Only a conversion that actually executed is subject to the caller's // minimum. Enforcing it when there was nothing to convert, or when the // swap filled nothing and the pending amount was restored for a later - codePonsV2MemeHook.sol:L752-L765
Show source
/** * @dev Opens a standalone unlock context to run one exact-input internal * swap, bounded by a price-impact ceiling measured against the pool's * live price. * * That ceiling limits how far this swap moves the price, not where the * price started. A front-run that depresses spot first shifts the whole * band down with it, so the bound is slippage control rather than * manipulation resistance. What actually caps the loss on a sandwich is * the caller's `minConversionQuoteOut` / `minBuybackTokensOut`, which is * why every price-sensitive sweep is gated to the sweep operator by * `_requiresTrustedOperator`. Treat those minimums as the real defense * and size them off an independent price. */ - on-chainparam feeSweepOperator = 0xa1018c1D9655292A2dE0F7dEa9a0F848EaA8cA83
Confirmed by: claude-opus-5.5, gpt-5.6-sol
LowGame rewards exceed player spending, backed by an unproven reservesocialAI
The official account says it paid out about $3,620 in MHD while players spent about $1,580, and that a reserve covers the gap. If that reserve is team or launch funds, payouts can stop or the extra tokens can be sold into the market. Nothing in the posts proves the reserve size, who controls it, or that the numbers are real.
Evidence
Show source
Rewards distributed exceed player spending. The reserve covers the difference.
Confirmed by: grok-4.7 · Disputed by: gpt-5.6-sol
Positive signals (4)
PositiveOngoing token burns verified on-chain: 2.0% of supply burnedburnDeterministic
2.0% of the supply ever minted is burned, in 23 burn transfer(s), last 2026-11-05. Burned by: holder 0xbd8a…3279 (2.0%, 13 burns); pool 0x8366…0951 (0.0%, 5 burns); holder 0x5d75…305e (0.0%, 2 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 0xd39142cf605e31988153718fc6487b4d95389eca
Confirmed by: facts
PositiveToken is a fixed-supply template with no owner powersownershipAI
MHD is the standard Pons V2 launcher token: plain OpenZeppelin ERC20 plus ERC20Burnable. The whole supply was minted once, to the bonding curve, in the constructor. There is no owner, no mint function, no fee, no blacklist, no pause and no transfer hook. The stored
deployeraddress is reference data only and grants no rights. Burning only works on your own tokens or on tokens you approved to someone. The fork simulation confirms 0% buy, sell and transfer tax at the token level, and a wallet that received tokens by transfer could also sell.Evidence
- codePonsV2LauncherToken.sol:L44-L71
Show source
constructor( string memory name_, string memory symbol_, string memory logo_, string memory description_, Socials memory socials_, address deployer_, address curve_, address launchFactory_, uint256 supply_ ) ERC20(name_, symbol_) { if (deployer_ == address(0) || curve_ == address(0) || launchFactory_ == address(0)) { revert ZeroAddress(); } - codeERC20.sol:L176-L204
Show source
function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } - codeERC20Burnable.sol:L20-L38
Show source
function burn(uint256 value) public virtual { _burn(_msgSender(), value); } /** * @dev Destroys a `value` amount of tokens from `account`, deducting from * the caller's allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `value`. */ - forkcanBuy=true, canSell=true, buyTaxPct=0, sellTaxPct=0, transferTaxPct=0; second wallet (received via transfer) could sell; sell after +1h: ok
- staticslither 0.11.6: issues = []
Confirmed by: claude-opus-5.5, gpt-5.6-sol
PositivePool hook cannot block sells or lock liquidity providershoneypotAI
The hook address only enables beforeInitialize, afterSwap and afterSwapReturnDelta. There is no beforeSwap and no add/remove-liquidity callbacks, so it cannot whitelist traders or stop LPs from withdrawing. afterSwap has no per-user checks. beforeInitialize only requires that the factory creates the pool. The simulated buy and sell through this pool succeeded.
Evidence
- codePonsV2MemeHook.sol:L184-L201
Show source
function getHookPermissions() public pure override returns (Hooks.Permissions memory) { return Hooks.Permissions({ beforeInitialize: true, afterInitialize: false, beforeAddLiquidity: false, afterAddLiquidity: false, beforeRemoveLiquidity: false, afterRemoveLiquidity: false, beforeSwap: false, afterSwap: true, beforeDonate: false, afterDonate: false, beforeSwapReturnDelta: false, afterSwapReturnDelta: true, afterAddLiquidityReturnDelta: false, - codePonsV2MemeHook.sol:L429-L432
Show source
function _beforeInitialize(address sender, PoolKey calldata, uint160) internal view override returns (bytes4) { if (sender != factory) revert NotFactory(); return IHooks.beforeInitialize.selector; } - forkdex uniswap-v4 pool 0x28e4391b6db2e6c735662b1e6ab5e91c42fdf177467e3465aa93f0bce93f36b2 canSell true
Confirmed by: claude-opus-5.5, gpt-5.6-sol
PositiveMain pool liquidity about 99% locked in the Pons lockerliquidityAI
For the graduated v4 pool, 99.10% of LP is locked and 0.90% is burned; the deployer holds none. The locker is PonsV2LaunchLocker, owned by the Pons protocol owner. The locker's source was omitted, so the unlock conditions cannot be verified here. Smaller side pools are not locked. Pool 0xc95e…, with about $14k, is fully held by 0x4506…a7a9, which can pull it.
Evidence
- on-chainliquidity 0x28e4391b6db2e6c735662b1e6ab5e91c42fdf177467e3465aa93f0bce93f36b2: lpBurnedPct 0.8957, lpLockedPct 99.1042, lpHeldByDeployerPct 0
- on-chainuniswap-v4 0xc95e642241…: v4 position liquidity other holders: 0x4506e519ec599c9d6afeb0611b8f74f5ffdea7a9 100%
Confirmed by: claude-opus-5.5 · Disputed by: gpt-5.6-sol
Notes (2)
MediumMain pool charges a 4% fee on every swap, fixed at launchfeesAI
The PonsV2MemeHook's afterSwap takes hookFeeBps plus creatorTaxBps from every swap's output side. Its afterSwapReturnDelta permission lets it remove that amount from the trader's proceeds. For this launch that is a 1% protocol fee plus a 3% creator tax, 4% in total: - The 3% creator tax is paid entirely to the creator. - The 1% is split 30% protocol and 70% creator/buyback. The rates are snapshotted per pool when the pool is registered and read from that snapshot on every swap. The hook owner changing the global setters therefore does not change this pool's fee. Hard caps also apply: creator tax plus hook fee can be at most 20%.
Evidence
- codePonsV2MemeHook.sol:L444-L485
Show source
function _afterSwap(address, PoolKey calldata key, SwapParams calldata params, BalanceDelta delta, bytes calldata) internal override returns (bytes4, int128) { // The conversion and buyback legs swap against this same pool, but // they are never taxed here: v4-core skips a pool's hooks when the // hook itself is the caller (Hooks.afterSwap). Were that not so, the // skim would come out of the buyback before it reached the vault. PoolId poolId = key.toId(); LaunchInfo memory info = launches[poolId]; if (!info.registered) return (IHooks.afterSwap.selector, 0); if (info.hookFeeBps == 0 && info.creatorTaxBps == 0) return (IHooks.afterSwap.selector, 0); bool specifiedIsCurrency0 = (params.amountSpecified < 0) == params.zeroForOne; - codePonsV2MemeHook.sol:L342-L378
Show source
if ( policy.protocolFeeRecipient == address(0) || policy.protocolFeeShareBps > MAX_PROTOCOL_FEE_SHARE_BPS || policy.buybackBurnBps > BASIS_POINTS || policy.hookFeeBps > MAX_HOOK_FEE_BPS || policy.maxInternalPriceImpactBps == 0 || policy.maxInternalPriceImpactBps >= BASIS_POINTS ) { revert InvalidBps(); } // The curve bounds the same sum in its own constructor rather than // inheriting it from the factory. A pool taking more than the whole // unspecified leg would flip the swapper's output delta negative. if (uint256(creatorTaxBps) + policy.hookFeeBps > MAX_TOTAL_TRADE_FEE_BPS) revert InvalidBps(); // The factory builds the key correctly today, but these two facts are // what every later fee credit and swap direction is derived from. A // memecoin that is neither currency would silently designate the wrong - on-chainlaunchpad.fees: buyPct 4, sellPct 4; protocol fee 1%; creator tax 3%
- on-chainparam hook permissions (from address bits) = beforeInitialize, afterSwap, afterSwapReturnDelta
Confirmed by: claude-opus-5.5, gpt-5.6-sol
InfoWebsite blocked the scanner, so the dApp could not be testedwebsiteAI
minehood.io returned a Cloudflare 403 block page to the scanner. Both dApp tests (deposit/buy and withdraw/sell) failed only because the page could not be reached. No transactions or approvals were requested. This is not evidence of a malfunction, but the app's behaviour is unverified. The site has Wayback snapshots since 2026-10-09, before the token deploy.
Evidence
- forkdappTests: use the main action of the app — driver: fail — Access blocked by Cloudflare (security block page encountered)
Show source
Attention Required! | Cloudflare
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 is a verified, fixed-supply Pons template with no owner powers and sells work, but the shared pool hook takes a 4% fee per swap and the Pons protocol owner controls the related contracts.
Why this score
Raised the score
- Fixed supply, no mint, pause, blacklist or owner
- Verified source, not a proxy, Slither found no issues
- Buy, sell and transfer-then-sell simulated at 0% token tax
- Hook cannot block sells or liquidity withdrawals
Lowered the score
- 4% fee on every swap in the graduated pool (1% protocol + 3% creator)
- Pons protocol owner controls hook, factory, vault and locker
- Trusted operator sets slippage on fee conversion swaps
Token
weight 30%40A single unidentified contract holds about 62% of supply against only ~$40k main liquidity, and the launch was sniped, though main LP is locked and burns are ongoing.
Why this score
Raised the score
- Main pool LP ~99% locked in Pons locker, ~1% burned
- Deployer holds 0% and has sold nothing
- Ongoing burns verified: about 2% of supply burned
- Snipers have mostly exited (0.28% held now)
Lowered the score
- Unidentified contract holds ~62% of supply
- Top 10 holders own ~71.5%
- 38 sniper wallets took 12.5% in the first 11 seconds
- Deployer-funded wallets hold ~5.5%, no lock shown
- Main liquidity only about $40k
Social / X
weight 15%45The X account is verified and names this contract with a public founder, but the team's own posts contradict each other and the claimed buyback is not shown on-chain.
Why this score
Raised the score
- Official X account names this contract
- Founder publicly linked
Lowered the score
- Claimed buyback and burn not matched by an on-chain buy
- Founder says everyone won; official post says 6 players lost
- Rewards paid exceed player spending, funded by an unproven reserve
- In-game withdrawals required team approval
Website
weight 10%45The website existed before launch but blocked the scanner, so neither its content nor the dApp behaviour could be checked.
Why this score
Raised the score
- Wayback snapshots since 2026-10-09, before the token deploy
Lowered the score
- Site and docs blocked by Cloudflare; dApp tests could not run
- Game-economy claims unverifiable