Robinhood Chain·Scanned 05 Nov 2026, 11:38 UTC·check #2
PonsV2LauncherToken $ASSAY
Verdict
64/100 safety
No owner powers, fixed supply; sells work at 0% token tax (3% pool fee), but insiders bought 60% at launch.
The token contract itself is clean: fixed supply, no owner powers, and buying and selling work with no token tax (the pool hook takes about 3% per swap). The main problem is the launch. Wallets the creator declared, which were exempt from the snipe tax, bought about 60% of supply in the first block, and most of it has since been sold. Two unidentified upgradeable contracts plus the deployer still hold about 24%, which could be sold into a fairly small pool. The main pool's liquidity is locked, but the project website still says the token is not live.
Score breakdown
- Contract88
- Token35
- Social / X60
- Website45
Higher is safer · 0 = worst · 100 = best
- Yes
- 0%
- None (no owner role)
- 0% / 100%
- MC at check
- $445.0K
- MC now
- no live price
- Since check
- —
- Liquidity
- $60.7K
Live chart
The chart updates live; “MC at check” above is the market cap when this check ran.
Key findings
- HighLaunch sniped: 126 wallets took 127.1% of supply in 10 seconds
- HighOne funder's 18 wallets bundled 60.3% of supply
- HighCreator-declared wallets bought 60.3% of supply at launch
- MediumTwo unidentified upgradeable contracts and deployer hold ~24% of supply
- GoodFixed-supply template token with no owner powers
What would change the verdict
- Raises safety:The project identifies the two proxy holders (for example as a verified staking or treasury contract with a timelocked admin) → up
- Lowers safety:The deployer starts selling its 4.5% stake → down
- Lowers safety:The owner of the unlocked ~$28k secondary pool withdraws it → down
Unlock PRO for this project
A one-time payment adds hourly re-checks for good, a 7-day watch, questions to the jury, the launch map and deeper social forensics.
Findings
13 findingsRisks (7)
HighLaunch sniped: 126 wallets took 127.1% of supply in 10 secondssnipersDeterministic
The launch was captured: 126 wallets bought 127.1% of the supply within 10 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 1.15% 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=126, pctSupplyBought=127.0575, pctSupplyHeldNow=1.154
Confirmed by: facts
HighOne funder's 18 wallets bundled 60.3% of supplysnipersDeterministic
18 wallets funded by the same address 0x88d2…51d3 bought 60.3% of the supply together (block 98642380). Spreading one buyer over many wallets hides how much a single entity controls.
Evidence
- on-chainbundles with commonFunder 0x88d25c861938a91af4ad57ad964a8fcc6c6351d3: 18 wallets, pctSupply 60.27
Confirmed by: facts
HighCreator-declared wallets bought 60.3% of supply at launchinsidersDeterministic
18 wallet(s) linked to the team (declared by the creator at launch, exempt from the snipe tax) bought 60.3% of the supply in the first blocks — an insider allocation that real buyers did not get. They now hold 4.51%, so current dump pressure from them is low; most of it has already been sold.
Evidence
- on-chaininsiders: 18 wallets, fundedBy declared by creator at launch (snipe-tax exempt on curve; creator 0x00fbb06ac74db9ee8d38bb4278ffda0117bfdc64), bought at launch 60.27%, pctSupplyHeldNow 4.5114
- on-chainbundles[block 98642380]: commonFunder 0x88d25c861938a91af4ad57ad964a8fcc6c6351d3, pctSupply 60.265
- on-chaininsiders: fundedBy "declared by creator at launch (snipe-tax exempt on curve; creator 0x00fbb06ac74db9ee8d38bb4278ffda0117bfdc64)", pctSupplyHeldNow 4.5114
- on-chaincurve param snipeTaxStartBps = 9900 (99%), snipeTaxSeconds = 3
- on-chainsnipers.pctSupplyHeldNow = 1.154
Confirmed by: facts, claude-opus-5.5, grok-4.7, gpt-5.6-sol
MediumTwo unidentified upgradeable contracts and deployer hold ~24% of supplyholdersAI
Two ERC1967Proxy contracts hold 9.9999% (0x5167…65C4) and 9.4146% (0xcF8a…8Dd6). The deployer contract holds 4.5114%. Neither proxy's logic or admin was provided. They may be project staking or treasury contracts: the website talks about staking, and the dApp test drew ASSAY from 0x5167…. But because they are upgradeable, whoever controls them could move the tokens. About 24% of supply could therefore be sold into a main pool holding roughly $60.7k of liquidity, which would heavily hit the price. The deployer has sold 0% so far.
Evidence
- on-chaintopHolders: 0x5167C8818eF75EBc45dd96217B36A6929b2765C4 9.9999% ERC1967Proxy; 0xcF8a103183F3bB84Cf4f43Ee9Dd6c0D173EB8Dd6 9.4146% ERC1967Proxy; 0x00FBB06ac74Db9ee8D38bb4278Ffda0117BfdC64 4.5114% deployer
- on-chainliquidity pool 0x617b079d8ba5c12a65f2ae9fffeba86d3912b6084212ab6080a390822af00949 liquidityUsd 60683
- on-chaindeployerSoldPct = 0
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
MediumWebsite says token not live and product testnet-only, contradicting chainclaims-mismatchAI
goassay.ai still tells visitors that $ASSAY has not launched and that the product only runs on Robinhood Chain testnet. The token contract is already deployed on Robinhood Chain (Pons V2 launcher token, hundreds of holders), and the project's own X account posts that CA and says the product is live on Robinhood Chain. Anyone who trusts only the website will get the opposite status from the chain and the official account. This does not by itself let an owner drain wallets, but it is a contradicted core claim about whether the token and the paid product are live.
Evidence
Show source
$ASSAY will launch on Pons Not live yet. Official links only via goassay.aiShow source
Assay runs on Robinhood Chain testnet and Solana devnet today.- on-chaintarget 0xa2b38467e9b60c016d94977ad37f825da4cd3462 deployedAt 2026-10-26T19:00:53.000Z name PonsV2LauncherToken holdersCount 569
Show source
PonsV2LauncherToken ASSAY deployed 2026-10-26, 569 holders, ownerRenounced false Show source
2,000+ paid calls by AI agents on Assay. Live on Robinhood Chain.
Confirmed by: grok-4.7, gpt-5.6-sol
LowSecondary pool with ~$28k liquidity is unlocked and can be pulledliquidityAI
Pool 0x390743061b205154b6cf786cc14299f807a2a846fe6c359d45aa4671779dbd15 holds about $28.4k. Its whole position belongs to 0x7b5d…0cc5 and is shown as 0% locked or burned, so it can be withdrawn at any time. The owner is not identified as the deployer. The main graduated pool is locked.
Evidence
- on-chainliquidity pool 0x390743061b205154b6cf786cc14299f807a2a846fe6c359d45aa4671779dbd15 liquidityUsd 28431 lpLockedPct 0 lpBurnedPct 0
- on-chainuniswap-v4 0x390743061b…: v4 position liquidity other holders: 0x7b5de3d5e1bc40735a253076d920343c13510cc5 100%
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
LowThird-party accounts push airdrop-vote bait using the real contractsocialAI
Several accounts that are not @goassay posted near-identical messages telling people to vote for $ASSAY so an airdrop lands in their wallet, and they paste the real contract address plus a shortened link. The official account's recent posts do not run this vote-drop. Those links were not opened, so the destination is unverified. Treat them as third-party bait, not as a team promise, and do not connect a wallet from those posts.
Evidence
Show source
vote for $ASSAY and you're not just backing it, you're getting your cut of the drop.Show source
your yes pays you in $ASSAYShow source
vote for $ASSAY and the drop lands in your wallet. simple as that.
Confirmed by: grok-4.7
Positive signals (4)
PositiveFixed-supply template token with no owner powersownershipAI
ASSAY is the standard PonsV2LauncherToken: OpenZeppelin ERC20 plus voluntary burn. The full 1,000,000,000 supply was minted once, to the bonding curve, in the constructor. There is no mint, pause, blacklist, fee or owner function. The deployer field is reference data only, and slither found no issues.
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; } } - staticslither 0.11.6: issues []
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
PositiveFork test: buy, sell and transfer-then-sell all workhoneypotAI
On a fork, the test bought and sold through the graduated Uniswap v4 pool and received exactly the expected amounts. A second wallet that got tokens by transfer could also sell, and a sell one hour later also worked.
Evidence
- forkcanBuy true, canSell true; second wallet (received via transfer) could sell; sell after +1h: ok
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
PositiveMain pool liquidity locked in the Pons LP lockerliquidityAI
The graduated pool's liquidity position is 100% locked in the Pons LP locker (0x2674…4952). The locker's function table shows no withdraw or unlock function, only lockPosition and lockTokenSupply, which only the factory can call. Its source was omitted, so an unlock date or a fee-collection path could not be checked.
Evidence
- on-chainliquidity pool 0x617b079d8ba5c12a65f2ae9fffeba86d3912b6084212ab6080a390822af00949 lpLockedPct 100 lpHeldByDeployerPct 0
- on-chainLP-locker functions: lockPosition(address,uint256) [factory], lockTokenSupply(address,uint256) [factory]
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
PositiveVerified X account predates token and lists the same contractsocialAI
@goassay (Assay Labs) is verified, was created on 2026-08-11 (about two and a half months before the 2026-10-26 deploy), and its bio lists the same contract address as the token under review. The site domain was registered 2026-08-26. That matches a product account that later launched a Pons token, not a brand-new throwaway. No team member is named, so any 'doxxed team' claim would be unverifiable — the account does not make that claim. A keyword search for scam/rug/honeypot did not return posts about this token.
Evidence
- on-chaindeployerHistory [] ; deployedAt 2026-10-26T19:00:53.000Z
Show source
deployer 0x00FBB06ac74Db9ee8D38bb4278Ffda0117BfdC64 has no prior rugs listed in the facts
Confirmed by: grok-4.7 · Disputed by: gpt-5.6-sol
Notes (2)
LowPons pool hook takes a fixed 3% fee on every swapfeesAI
The graduated pool uses PonsV2MemeHook. After every swap, the hook takes its 1% fee plus the creator's 2% tax out of the swap output. The fee split goes to protocol, buyback and creator; the tax goes entirely to the creator. These rates are copied into the pool's own record when the pool is registered, and afterSwap reads only that record. If the owner later changes the global hookFeeBps (capped at 10%), only new launches are affected, not this pool. At registration the combined fee was capped at 20%. The token itself has no transfer tax: the simulation shows 0% buy, sell and transfer tax at token level, and the pool fee is included in its quotes.
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-L352
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(); - codePonsV2MemeHook.sol:L251-L255
Show source
function setHookFeeBps(uint256 bps) external onlyOwner { if (bps > MAX_HOOK_FEE_BPS) revert InvalidBps(); hookFeeBps = bps; emit HookFeeBpsUpdated(bps); } - forkbuyTaxPct 0, sellTaxPct 0, transferTaxPct 0; venue uniswap-v4 — pool LP fee is included in quotes
Confirmed by: claude-opus-5.5, gpt-5.6-sol
LowPons owner controls fee handling but cannot block tradesownershipAI
Address 0x263e…19Dd owns the hook, factory, buyback vault and LP locker. Ownership of the hook and vault cannot be renounced. For this pool, the owner can do the following: - Replace the fee-sweep operator. That operator chooses the minimum outputs on fee conversions; a careless one could lose fee value to sandwich trades. - Rescue pending fees, paid out at the pool's frozen split. - Through the factory, override the creator fee recipient (subject to a 3-day timelock constant). None of these powers touch holder balances or stop swaps. The hook only has the beforeInitialize, afterSwap and afterSwapReturnDelta permissions, so it has no beforeSwap or remove-liquidity callbacks that could block sells or lock LPs. Note: the function table says setMaxInternalPriceImpactBps has no bounds, but the code requires 0 < bps < 10000, and the value is frozen per pool anyway.
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:L274-L278
Show source
function setFeeSweepOperator(address operator) external onlyOwner { if (operator == address(0)) revert ZeroAddress(); feeSweepOperator = operator; emit FeeSweepOperatorUpdated(operator); } - codePonsV2MemeHook.sol:L555-L572
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) { - codePonsV2MemeHook.sol:L257-L261
Show source
function setMaxInternalPriceImpactBps(uint256 bps) external onlyOwner { if (bps == 0 || bps >= BASIS_POINTS) revert InvalidBps(); maxInternalPriceImpactBps = bps; emit MaxInternalPriceImpactUpdated(bps); } - on-chainfactory param CREATOR_FEE_RECIPIENT_TIMELOCK = 259200
Confirmed by: claude-opus-5.5 · Disputed by: 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%88Verified, immutable fixed-supply template token with no owner powers that trades at 0% token tax; the only control sits with the Pons protocol owner over fee plumbing, and some side contracts were not reviewed.
Why this score
Raised the score
- No mint, pause, blacklist or fee functions
- Not upgradeable, verified source, slither clean
- Buy, sell and transfer-then-sell all pass at 0% token tax
- Hook cannot block swaps or liquidity
Lowered the score
- Pons hook takes a fixed 3% per swap
- Pons owner can redirect fee handling
- Source of locker, factory and curve not reviewed
Token
weight 30%35Capped · max 40launch sniped: 127.1% of supply bought by 126 wallets in 10 seconds → max 40
Launch was captured by creator-declared, snipe-tax-exempt wallets and snipers who mostly exited, and about 24% still sits in unidentified upgradeable contracts plus the deployer.
Why this score
Raised the score
- Main pool LP 100% locked in the Pons locker
- Deployer has sold 0%
- Snipers now hold only about 1.2%
Lowered the score
- Creator-declared wallets bought 60.3% at launch
- 126 sniper wallets bought in the first 10 seconds
- One funder bundled 18 wallets for 60.3%
- Two unidentified proxies hold about 19.4%
- Unlocked secondary pool of about $28k
Social / X
weight 15%60Verified X account older than the token posts the correct contract, but no team is named and third-party airdrop-bait posts circulate.
Why this score
Raised the score
- Verified X account created before the token
- X bio lists the same contract address
- No scam or rug reports found
Lowered the score
- No named or doxxed team
- Unaffiliated accounts push vote-for-airdrop bait
Website
weight 10%45The site is young and its status claims contradict the chain: it says the token is not live and the product is testnet-only.
Why this score
Raised the score
- Pons launch claim confirmed
- Domain registered before the token launch
Lowered the score
- Says $ASSAY is not live while it trades
- Says testnet-only while X says live on mainnet
- Staking claims unverifiable; staking test did not complete