Robinhood Chain·Scanned 05 Nov 2026, 01:11 UTC
PonsV2LauncherToken $CD
Verdict
61/100 safety
Token has no owner powers; buys and sells work at 2.5% fee, but about 25% of supply was bundled at launch.
The CD token contract itself is clean: fixed supply, no owner powers, and buys and sells work at a fixed 2.5% fee. The main risks are the launch and the story. About a quarter of supply was bought in bundled wallets in the first blocks, and liquidity is only about $2k. The project's posts say its OTC marketplace is live, but its own site still shows a demo with no markets and an admin key with no multisig.
Score breakdown
- Contract85
- Token45
- Social / X40
- Website35
Higher is safer · 0 = worst · 100 = best
- Yes
- 2.5%
- None (no owner role)
- 0% / 0%
Key findings
- MediumOne funder's 4 wallets bundled 6.02% of supply
- MediumPons factory owner controls fee and graduation-rescue paths
- MediumPosts say the OTC market is live; the site shows a demo with 0 markets
- LowThin liquidity: about $2k on an ungraduated bonding curve
- GoodToken is a fixed-supply Pons template with no owner powers
What would change the verdict
- Raises safety:Curve graduates to Uniswap v4 with LP held by the Pons locker → up
- Lowers safety:Pons factory owner uses rescueSweptGraduation to move reserves somewhere other than the pool → down
Findings
11 findingsRisks (6)
MediumOne funder's 4 wallets bundled 6.02% of supplysnipersDeterministic
4 wallets funded by the same address 0x5309…f32f bought 6.02% of the supply together (block 104953925). Spreading one buyer over many wallets hides how much a single entity controls.
Evidence
- on-chainbundles with commonFunder 0x53091256ebd2d8aa37b45536a5fd864ca764f32f: 4 wallets, pctSupply 6.02
- on-chainbundles[block 104953924].pctSupply = 11.6613 (wallets incl. 0x6c29068a174bc7465aaeb60811f306f9648cc5b2, 0x87e405d07fcfc07886ecca83d3be5f5036c73dd7)
- on-chainbundles[block 104953925].commonFunder = 0x53091256ebd2d8aa37b45536a5fd864ca764f32f, pctSupply 6.0231
- on-chainclusters funder 0xf70da97812cb96acdf810712aa562db8dfa3dbef pctSupplyHeldNow 1.675
- on-chaintop10Pct = 28.4249
Confirmed by: facts, claude-opus-5.5, grok-4.7, gpt-5.6-sol
MediumPons factory owner controls fee and graduation-rescue pathsotherAI
The launchpad factory is owned by 0x263e…19Dd. Through the factory, the owner can: pay out pending curve fees directly with rescueFees (the payees are fixed: the protocol recipient and the creator); change the creator fee recipient (a 72-hour timelock applies to the creator path); turn the buyback on or off; and call rescueSweptGraduation, which moves tokens and ETH after a graduation stalls (a 7-day delay constant exists). The curve's own reserves can only leave through graduate(), which runs only once the curve is sold out. The factory source was not provided, so where rescueSweptGraduation sends funds cannot be checked. This is launchpad-wide trust in the Pons owner, not a power specific to this token.
Evidence
- codePonsV2BondingCurve.sol:L850-L871
Show source
function rescueFees() external onlyFactory returns (uint256 protocolAmount, uint256 creatorAmount) { uint256 pending = quoteFeeBalance; uint256 tax = creatorTaxBalance; if (pending == 0 && tax == 0) revert ZeroAmount(); protocolAmount = (pending * protocolFeeShareBps) / BASIS_POINTS; creatorAmount = pending - protocolAmount + tax; quoteFeeBalance = 0; // Symmetrical with the sweep. This pays the creator their whole // bucket, earmark included, so leaving the earmark behind would let a // settled claim survive into the next accrual and divert fees the // creator has not earned yet into the vest. buybackQuoteBalance = 0; creatorTaxBalance = 0; - codePonsV2BondingCurve.sol:L598-L601
Show source
function graduate(address recipient) external onlyFactory returns (uint256 quoteOut, uint256 tokenOut) { if (graduated) revert AlreadyGraduated(); if (recipient == address(0)) revert ZeroAddress(); if (!readyToGraduate()) revert NotReadyToGraduate(); - staticPonsV2LaunchFactory rescueSweptGraduation(address,address) [owner] @PonsV2LaunchFactory.sol:L1254-L1286 — sends tokens out, sends ETH; GRADUATION_RESCUE_DELAY = 604800
- on-chainPonsV2LaunchFactory owner = 0x263ed295dAFaE1d9AAdD6E56c4B6F9f38eE019Dd
Confirmed by: claude-opus-5.5 · Disputed by: gpt-5.6-sol
MediumPosts say the OTC market is live; the site shows a demo with 0 marketsclaims-mismatchAI
The X account tells holders the marketplace is live on Robinhood Chain mainnet, with active fills and an offer book. The same project's pages still call the trade flow a preview where no funds move, label the markets view a demo showcase, and list 0 tokens. Docs also still describe the build as not yet handling real mainnet funds and the page header still says the deployment is live on testnet. Buying $CD for a working OTC desk is not what those pages show.
Evidence
Show source
Counter is now live on Robinhood Chain mainnet. CA: 0x32e6d0ebcdd5c25fae26d13b6d79b2496dc6f6cc The first peer-to-peer OTC marketplace on Robinhood Chain.Show source
The settlement contract is deployed, fills are active, and USDG is allowlisted, with WETH configured as the payment asset.Show source
This is a preview of Counter's landing page and proposed trade flow. The example above is interactive, but no wallet is connected and no funds move.Show source
counter.otc // demo.showcaseShow source
0 tokens · Page 1 of 1Show source
Expect this to move to a multisig before mainnet handles real funds.Show source
Robinhood Chain network parameters (verified) and Counter deployment status (live on testnet).
Confirmed by: grok-4.7, gpt-5.6-sol · Disputed by: claude-opus-5.5
LowThin liquidity: about $2k on an ungraduated bonding curveliquidityAI
The token trades only on its Pons bonding curve, which holds about $2,064 of real liquidity. The two Uniswap v4 pools show no tracked liquidity. Large sells will move the price sharply. Graduation to Uniswap v4 (with LP going to the Pons locker) happens only after the sellable allocation is bought out.
Evidence
- on-chainliquidity: pons-v2-bonding-curve 0x413b9CfA87DFbc2A2021e5E31F38E77FcC82C184 liquidityUsd 2064; uniswap-v4 pools liquidityUsd 0; graduated=false
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
LowCreator is snipe-tax exempt; holds 0.8% and has not soldinsidersAI
The creator, 0x332B9991…, was declared at launch and is exempt from the snipe tax. It now holds 0.81% and has not sold (deployerSoldPct 0). It also funded wallet 0x24a4d86c…, which now holds 0%. The creator also receives the 1.5% creator tax on every trade and the creator share of fees. This is small today, but it is insider activity worth watching.
Evidence
- on-chaininsiders: 0x332b9991e2ead67b7fac08dd653e21fa67937a6f declared by creator at launch (snipe-tax exempt), pctSupplyHeldNow 0.8062; 0x24a4d86c8a76b00ee9566ed9c9ff4f0c3faf0da7 fundedBy deployer, pctSupplyHeldNow 0
- codePonsV2BondingCurve.sol:L332-L335
Show source
function exemptFromSnipeTax(address account) external onlyFactory { snipeTaxExempt[account] = true; emit SnipeTaxExempted(account); }
Confirmed by: claude-opus-5.5 · Disputed by: grok-4.7, gpt-5.6-sol
LowSingle admin key can pause Counter OTC fills, with no multisigwebsiteAI
The project's OTC settlement contract (CounterSettlement) never holds user funds. Trades move directly between the two wallets using signed orders. Its owner (0x9178B573…) can pause all fills and choose which tokens are supported, but cannot move user funds. The scripted website test only wrapped 0.1 ETH into WETH and then timed out. No OTC fill was observed, so the product claim is unverified. The website domain was registered on 2026-11-02, one day before the token launched.
Evidence
- codeCounterSettlement.sol:L249-L262
Show source
function setFillsPaused(bool paused) external onlyOwner { fillsPaused = paused; emit FillsPausedSet(paused); } function setTokenSupported(address token, bool supported) external onlyOwner { if (token == address(0)) revert ZeroAddress(); if (token == paymentToken && !supported) { // the payment token is immutable; de-listing it would make every pair invalid. revert TokenNotSupported(token); } supportedTokens[token] = supported; emit TokenSupportSet(token, supported); } - forkdappTests swap: observed
Show source
wallet no balance change; 1 tx (deposit ok) | driver: timeout — goal time cap reached - on-chainsite.domainCreatedAt = 2026-11-02T07:47:19.170Z
Show source
Counter currently uses a single admin wallet — the same wallet used for contract deployment on both testnet and mainnet. There is no multisig on this build.
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
Positive signals (2)
PositiveToken is a fixed-supply Pons template with no owner powersownershipAI
The CD token is the standard Pons V2 launch token: an OpenZeppelin ERC-20 plus voluntary burn. Its whole supply is minted once, in the constructor, to the bonding curve. It has no owner, no mint function, no fees, no blacklist, no pause and no transfer hooks. The stored
deployeraddress is reference data only and grants no control. Nobody can change balances or block transfers at the token level.Evidence
- codePonsV2LauncherToken.sol:L21
Show source
contract PonsV2LauncherToken is ERC20, ERC20Burnable { - codePonsV2LauncherToken.sol:L55-L71
Show source
if (deployer_ == address(0) || curve_ == address(0) || launchFactory_ == address(0)) { revert ZeroAddress(); } deployer = deployer_; // Passed explicitly rather than read from msg.sender: PonsV2LaunchFactory // deploys this token indirectly through PonsV2LaunchDeployer to keep its // own bytecode under EIP-170's size limit, so msg.sender at construction // time would otherwise resolve to that deployer helper, not the factory. launchFactory = launchFactory_; curve = curve_; logo = logo_; description = description_; _socials = socials_; - on-chainprivileges = [] ; isProxy = false ; slither issues = []
Confirmed by: claude-opus-5.5, gpt-5.6-sol
PositiveBuys and sells work in simulation at a fixed 2.5% feehoneypotAI
In the fork simulation a buy and a sell on the bonding curve both went through. A second wallet that received tokens by plain transfer could also sell, and selling still worked one hour later. The roughly 2.5% cost on each trade is the curve's 1% protocol fee plus the creator's 1.5% tax. Both rates are fixed in the curve when it was deployed and cannot be raised later. The launch snipe tax has already decayed to 0. Plain token transfers carry no tax.
Evidence
- forkcanBuy=true buyTaxPct=2.48 canSell=true sellTaxPct=2.5 transferTaxPct=0; second wallet (received via transfer) could sell; sell after +1h: ok
- codePonsV2BondingCurve.sol:L109-L114
Show source
uint256 public immutable feeBps; // Creator-chosen at launch, capped by the protocol at launch time. Kept // entirely separate from feeBps: it is layered on top of the base trade // fee, not part of the protocol/buyback/creator split, and is paid to // the creator in full. uint256 public immutable creatorTaxBps; - codePonsV2BondingCurve.sol:L222
Show source
if (feeBps_ + creatorTaxBps_ > MAX_TOTAL_TRADE_FEE_BPS) revert InvalidFeePolicy();
Confirmed by: claude-opus-5.5, grok-4.7, gpt-5.6-sol
Notes (3)
InfoUniswap v4 hook only routes swaps to the curve and has no adminotherAI
PonsCurveAggregator is a single shared hook that lets Uniswap v4 routers trade the curve. It accepts exact-input swaps only and forwards each one to curve.buy or curve.sell. It has no owner setters, and its pool fee is fixed at 0. It refuses trades once the curve is closed or a buy would only partly fill, which is documented behaviour and not a sell trap.
Evidence
- codePonsCurveAggregator.sol:L152-L179
Show source
function _conductSwap(Currency settleCurrency, Currency takeCurrency, SwapParams calldata params, PoolId poolId) internal override returns (uint256 amountSettle, uint256 amountTake, bool hasSettled) { if (params.amountSpecified >= 0) revert ExactOutputNotSupported(); Market memory m = _market(poolId); amountTake = uint256(-params.amountSpecified); poolManager.take(takeCurrency, address(this), amountTake); if (_isBuy(m, params.zeroForOne)) { // refuse a partial fill up front: the curve would refund the rest, which a v4 exact-input swap cannot uint256 expected = _quoteBuy(m.curve, amountTake); uint256 quoteBefore = takeCurrency.balanceOfSelf() - amountTake; if (takeCurrency.isAddressZero()) { - codePonsCurveAggregator.sol:L35-L36
Show source
uint24 public constant POOL_FEE = 0; int24 public constant TICK_SPACING = 1;
Confirmed by: claude-opus-5.5
InfoX account is new and small, consistent with a new projectsocialAI
@usecountertech was created the day before the token deploy, has 35 followers and 0 following, and its posts are all about Counter. That fits a brand-new project. Mentions are mostly generic collab asks, not a wave of identical paid shills. No named team is shown, so any 'doxxed' claim would be unverifiable — none was made.
Evidence
- on-chaindeployedAt=2026-11-03T09:30:30.000Z
Show source
name PonsV2LauncherToken, symbol CD, deployerHistory empty, holdersCount 38
Confirmed by: grok-4.7
InfoScanner bot claims only partly match our factssocialAI
Larpcheckbot replied that the markets page is empty and that docs disagreed with 'live' posts. The markets page we opened does show 0 tokens. Its claim that the project names two different contract addresses is the token CA versus CounterSettlement, which the account itself separated. Bot holder counts (34–43) are close to the 38 holders in our facts, not a contradiction. Do not treat the 31–51/100 scores as on-chain proof.
Evidence
Show source
The contract is deployed, but the markets page the post advertises is empty and its data backend is down, so "live marketplace" is overstated.Show source
Red flags: - Project names two different CAsShow source
0x40292BBe5b3FB1De321ca6BE56f45afe8745a70A is CounterSettlement, the protocol’s OTC settlement contract. It is separate from the token CA displayed on our website.
Confirmed by: grok-4.7, claude-opus-5.5, 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%85Verified fixed-supply template token with no owner powers and working buys and sells; residual trust sits with the Pons factory owner.
Why this score
Raised the score
- Verified, non-upgradeable token with no owner, mint, pause or blacklist
- Buy, sell, transfer-then-sell and delayed sell all passed in simulation
- Fixed 2.5% curve fee (1% protocol + 1.5% creator), 0% transfer tax
- Slither found no issues
Lowered the score
- Pons factory owner controls fee rescue and graduation-rescue paths
- Factory source omitted, so the rescue destination is unverified
Token
weight 30%45About a quarter of supply went to same-block bundles at launch, and liquidity is only about $2k on an ungraduated curve.
Why this score
Raised the score
- Deployer holds 0.8% and has not sold
- Several bundle groups have already sold out to 0%
- No deployer rug history in the facts
Lowered the score
- About 25% of supply bought in launch-block bundles
- One funder's 4 wallets took 6% of supply
- Thin liquidity: about $2,064 on the bonding curve, not graduated
- Only 38 holders
Social / X
weight 15%40A one-day-old, small X account claims the marketplace is live, which the project's own site does not support.
Why this score
Raised the score
- Account is on-topic and shows no wave of paid shills
- Account clarified which address is the settlement contract
Lowered the score
- Posts say fills are live while the site shows a demo with 0 markets
- Account created a day before launch, with about 35 followers
- No named team
Website
weight 10%35Brand-new site whose own pages describe a preview or demo and testnet status, contradicting the 'live' claims.
Why this score
Raised the score
- Docs openly describe the admin powers and limits
- A settlement contract is deployed and verified
Lowered the score
- Domain registered one day before the token launch
- Markets page shows a demo with 0 tokens
- Docs say a single admin key with no multisig, and status 'live on testnet'
- Site test completed no OTC trade