On-chain forensics · Ethereum + Polygon PoS · read-only

The Dank Bank Vaults

Twenty-one fractionalised meme NFTs, a bespoke AMM quoting against liquidity it does not hold, and two private keys that can still take the art.

Snapshot block ~25,833,300 · 2026-08-25 Method eth_call / eth_getLogs, no transaction broadcast Source bytecode-verified against DankBankLabs/markets

Verdict

Two protocols, not one

The fourteen addresses that circulate as “the Dank Bank tokens” are not memecoins and Dank Bank did not write them. They are stock Fractional.art v1.1 TokenVault instances — each one an ERC-20 claim on a single ERC-721 escrowed inside it. Bytecode at 0x4a6d2a7a… matches Fractional's verified ERC721TokenVault.sol exactly, 14,237 of 14,237 bytes, and it was deployed by Fractional inside their own factory's constructor. So yes — all of them are fractionalised NFTs, and ownerOf(id) returns the vault's own address in every case.

The AMM is a separate contract Dank Bank did write: DankBankMarket at 0x0988Fb1C153a6f6492218Ead6b17fd795d6D18F9. It is a single monolithic multi-pool holding every meme at once, with ERC-1155 LP shares and — the detail that governs everything below — virtual ETH reserves.

Buying works today. Selling essentially does not. And on eight of the fourteen vaults a single curator key can collapse the reserve price to 1 wei and auction the underlying NFT away from every fraction holder, with no multisig and no upgrade required.

Architecture

Three layers, only one of them bespoke

What looks like one system is three, stacked. Understanding which layer a given risk or opportunity lives in is the whole game — the vault layer is immutable and permissionless, the market layer is upgradeable by one signature.

Layer 3 · asset
The meme, as an ERC-721 Five underlying collections: Rarible RARI, Foundation FND, RarePepe by Matt Furie, The Super Viral Collection, and ten one-token NFT Basket wrappers each holding a single OpenSea Shared Storefront 1-of-1. Fourteen inbound transfers in all of history; zero outbound, ever.
Layer 2 · shares
Fractional.art v1.1 TokenVault — the 14 (really 21) addresses 252-byte InitializedProxy, hardcoded logic target, not upgradeable. Supply is permanently fixed: fee() == 0 and updateFee only ratchets downward, so nothing can mint. Exit is by redeem() at 100% of supply, or by a reserve-price buyout auction.
Layer 1 · venue
DankBankMarket — the only place any of this ever traded TransparentUpgradeableProxy, ERC-1155 LP, one contract for all pools, buy / sell in native ETH. Six implementations to date. Holds 1.4614 ETH total and between 1.6% and 45% of each token's supply.

Supporting cast. Fractional Settings at 0xE0FC7918… has owner() == 0x0 — renounced, so minVotePercentage (500 ‰) and the reserve factors can never change. The AMM's upgrade path is ProxyAdmin 0x7cf45345… → Gnosis Safe 0x25a12B52…. Two curator EOAs, 0xd4e3a3cb… and 0x30653411…, curate 12 of the 14 and hold nearly all LP.

Roster

There are 21, not 14

An exhaustive Multicall3 sweep of all 4,616 vaults on Fractional's v1.1 factory plus all 2,503 on v1.0, filtered by curator, returns 28 Dank Bank vaults, of which 21 are live meme tokens. Dank Bank's own committed subgraph manifest lists exactly those 21, and data/tokens.json currently carries 15 of them. Seven are missing from the roster DeVamp carries — including the two cheapest complete buyouts in the entire system.

TokenAddressSupplyAMM holdsReserve priceVotingStatus
TRIANGLE0x6dd5f24e…d7aea42,06915.59%42,069 ETH66.7%joke price
ERMAGHERD0x94aebf59…a2a9b42,06910.50%175 ETH61.4%buyout open
SUCCESS0x7e0eaf21…c248642,069,00010.06%163,224 ETH34.2%no quorum
TRADE0xd20183c1…43fd669,000,000,0001.57%0.0%no quorum
10GUY0x9550a643…53373696,9694.34%42,069 ETH81.8%joke price
HIDEYOKIDS0x63a8041d…243ec42,06915.17%42,069 ETH49.4%no quorum
HIOKAY0x9874d02d…3092642,06915.15%500 ETH61.2%buyout open
HONEYBADGER0xf9404561…af1c242,06915.11%42,069 ETH11.2%no quorum
2PBF0x06e77ea8…6921842,06915.23%42,069 ETH61.2%joke price
PANDA0x0c19a90a…a606142,06913.98%42,069 ETH61.2%joke price
CHICKENS0xcf8a5956…5318742,06915.13%420 ETH61.2%buyout open
DANCE0x11c80833…3e0f342,06915.14%500 ETH58.6%buyout open
MOMMY0xf09d8ce5…df5a642,06945.23%42,069 ETH26.3%no quorum
CROISSANT0x1ab00521…2bc442,06915.17%42,069 ETH11.2%no quorum
BRIAN not on sheet0x8d15347e…bcb0142,069,00010.05%2,000 ETH11.9%no quorum
DANKPEPE not on sheet0x8a06dbbb…9f8742,06936.24%420 ETH24.7%no quorum
FEELSPEPE not on sheet0x1994e631…2e8f42,06927.10%420 ETH38.3%no quorum
SATAN not on sheet0x84b26537…7a8842,06950.02%42,069 ETH13.6%no quorum
GENIUS not on sheet0x362bf4c2…831b042,06923.79%420 ETH27.5%no quorum
SMI not on sheet0xc9de125f…9d3c69,0009.87%10 ETH88.2%promo asset
FEDORA not on sheet0x4ce05dd7…a50e42,069,0000.00%175 ETH90.0%no pool ever

Reserve price is the full ETH cost to open a 3-day buyout auction for the whole NFT. “No quorum” means start() is uncallable at any price because fewer than 50% of the supply has voted a price — minVotePercentage is 500 ‰ and can never be lowered. Every vault is auctionState() == 0, vaultClosed() == false.

Why the seven went missing. FEDORA has never had a pool and has never traded anywhere — its MISO auction raised zero, so nothing was ever seeded. Any roster reconstructed from AMM balances or explorer holder lists silently omits exactly the tokens that never traded; Blockscout reports zero holders for FEDORA despite two addresses demonstrably holding it.

Asset register

All 21 vaults and what each one holds

Every row verified by token(), id() and ownerOf() on the vault. ownerOf returns the vault's own address for all 21 — every NFT is genuinely escrowed, and none has ever left. Ten are one-token NFT Basket wrappers, so the asset you ultimately own sits one layer deeper; the inner token is listed too.

TokenVault (ERC-20 you buy)CollectionUnderlying NFTInside the basketPolygon child
Dancing Triangle
TRIANGLE
0x6dd5f24e75…Rarible0xc9154424b8…
#112544722715…
Rarible lazy-mint; id encodes the creator
— direct —0xA4e44E0020…
Ermagherd
ERMAGHERD
0x94aebf5944…Foundation0x3b3ee1931d…
#21303
— direct —0x2D7D6ceFFB…
Success Kid
SUCCESS
0x7e0eaf2135…Foundation0x3b3ee1931d…
#21262
— direct —0x506143F1ce…
Trade Offer
TRADE
0xd20183c182…NFT Basket0xf6e70d3829…
#0
0x495f9472…
#312450302707…
by 0x45140f78…
0x39EA286F59…
10 Guy
10GUY
0x9550a64314…Foundation0x3b3ee1931d…
#35918
— direct —0x3bDe1635f5…
Hide Yo Kids, Hide Yo Wife
HIDEYOKIDS
0x63a8041d68…NFT Basket0xfb0151ef75…
#0
0x495f9472…
#831011765811…
by 0xb7b99961…
0x450345E119…
Hi Okay
HIOKAY
0x9874d02d03…NFT Basket0xb582aea24c…
#0
0x495f9472…
#928178029234…
by 0xcd3503c6…
0xa219326057…
Honey Badger Don't Care
HONEYBADGER
0xf940456138…NFT Basket0x70b8d36827…
#0
0x495f9472…
#572476670192…
by 0x7e910802…
0xfa90517482…
Two Pretty Best Friends
2PBF
0x06e77ea852…NFT Basket0xb2d6f0eb55…
#0
0x495f9472…
#273339050958…
by 0x3c6e7129…
0x6699421b06…
Sneezing Baby Panda
PANDA
0x0c19a90a91…The Super Viral Collection0x2cbee73bd4…
#2
tokenURI host auction.nftvirals.com is NXDOMAIN
— direct —0x54879FD3bB…
Look at all those chickens!
CHICKENS
0xcf8a595681…NFT Basket0x4e0cb5c7e3…
#0
metadata CID dead (504 on 7 gateways)
0x495f9472…
#683535882802…
by 0x971ec28c…
0x8bE5CD897f…
Evolution of Dance
DANCE
0x11c8083384…NFT Basket0x91a22921ca…
#0
metadata CID dead (504 on 7 gateways)
0x495f9472…
#683535882802…
by 0x971ec28c…
0x43496BB704…
I Don't Like You Mommy
MOMMY
0xf09d8ce551…NFT Basket0x035438a9f8…
#0
metadata CID dead (504 on 7 gateways)
0x495f9472…
#683535882802…
by 0x971ec28c…
0x52DC058104…
I Could've Dropped My Croissant
CROISSANT
0x1ab0052159…NFT Basket0x8100b3155f…
#0
metadata CID dead (504 on 7 gateways)
0x495f9472…
#711384475639…
by 0x9d46ef38…
0x21Ba992a49…
Bad Luck Brian
BRIAN not on sheet
0x8d15347eda…Foundation0x3b3ee1931d…
#4263
— direct —0xBAB28c987E…
Dank Pepe
DANKPEPE not on sheet
0x8a06dbbb2e…NFT Basket0x63661c57fa…
#0
Emblem Vault wrapping a 2016 Rare Pepe Counterparty card (Series 1, Card 5, issue 420)
0x82c7a8f7…
#3010381…
0xC479Cb873F…
Feels Pepe
FEELSPEPE not on sheet
0x1994e631a6…RarePepe by Matt Furie0x937a2cd137…
#23
official Matt Furie RarePepe collection
— direct —0x15B0918089…
Satan Pepe
SATAN not on sheet
0x84b26537ed…RarePepe by Matt Furie0x937a2cd137…
#31
official Matt Furie RarePepe collection
— direct —0xdC41DDf6AE…
Genius Pepe
GENIUS not on sheet
0x362bf4c209…RarePepe by Matt Furie0x937a2cd137…
#35
official Matt Furie RarePepe collection
— direct —0xf9b9f5295D…
Smithers O'Neil
SMI not on sheet
0xc9de125ff7…Foundation0x3b3ee1931d…
#128087
SkyCorp Home Video promo, minted & curated by the same wallet
— direct —never bridged
Tips Fedora
FEDORA not on sheet
0x4ce05dd7b9…Foundation0x3b3ee1931d…
#22878
never pooled, never traded
— direct —never bridged

Links go to OpenSea for the NFTs, Etherscan for the vault contracts and Polygonscan for the bridged children. TRIANGLE's Rarible token id is 78 digits (it encodes the creator address), truncated here — the full value is in the vault's id().

Six different minters across the nine OpenSea-backed memes0x45140f78 (TRADE), 0xb7b99961 (HIDEYOKIDS), 0xcd3503c6 (HIOKAY), 0x7e910802 (HONEYBADGER), 0x3c6e7129 (2PBF), 0x9d46ef38 (CROISSANT), and 0x971ec28c which minted three in sequence (CHICKENS, DANCE, MOMMY). Distinct third-party wallets is consistent with memes licensed from their creators; none has been tied to a real-world identity.

Mechanism

Uniswap v2 maths, fabricated reserves

Every pool lives in mappings on one contract, keyed by token address. There is no pair object, no factory, no getReserves(). The token reserve is just balanceOf(market). The ETH reserve is two numbers added together, and only one of them is real:

mapping(address => uint256) public virtualEthPoolSupply;   // fictitious, set once at initPool
mapping(address => uint256) public ethPoolSupply;          // real ETH actually held

function getTotalEthPoolSupply(address token) public view returns (uint256) {
    return virtualEthPoolSupply[token] + ethPoolSupply[token];
}

With FEE_MULTIPLIER = 311 and MULTIPLIER_SUB_ONE = 310, where T is pooled tokens and E is virtual + real ETH:

tokensOut = ( T · 310 · ethIn ) / ( E · 311 + 310 · ethIn )
ethOut    = ( E · 310 · tokensIn ) / ( T · 311 + 310 · tokensIn )

That is algebraically Uniswap v2 with γ = 310⁄311 — a 0.321543% fee taken on the input side, retained in the pool for LPs. There is no feeTo and no protocol cut. Note the contract's own comment claims ~0.42069%; it is wrong for the constant it ships.

Why no aggregator could ever route to it

You were right that routing friction killed it, and the reason is structural rather than a missing integration. Five independent blockers, all confirmed against source:

  • Nothing to discover. One contract, mappings keyed by token. factory() and getReserves() both revert. No getPair, no allPairs, no per-pair address for an indexer to enumerate.
  • Bespoke trade surface. buy(address,uint256) and sell(address,uint256,uint256) — no swapExactETHForTokens, no v2 swap(), no v3 exactInputSingle.
  • Non-standard events. DankBankBuy / DankBankSell, never Swap / Sync / Mint / Burn.
  • Native ETH only. No WETH pair, no ERC-20 quote asset.
  • ERC-1155 LP, so generic position tooling cannot see the liquidity either.

And the one that would have broken an aggregator even if it had integrated: the quote function prices against reserves the contract does not hold, then the execution reverts. A quote-then-execute router would have failed constantly.

Confirmed empirically — 147 pair lookups on Ethereum across Uniswap v2/v3 (all four fee tiers) and SushiSwap against WETH and USDC, plus 285 on Polygon, all return address(0) with working controls. No token has ever appeared on CoinGecko, CoinMarketCap or DexScreener.

Activity

Full decoded log history of the proxy: 958 trades — 597 buys, 361 sells — from 203 unique traders, 109.83 ETH bought against 110.08 ETH sold. By year: 9 in 2021, 745 in 2022, 65 in 2023, 116 in 2024, 15 in 2025, 8 in 2026. First trade 2021-08-22, last 2026-06-15. It is dormant but not dead.

The trap

53 ETH of quoted liquidity, 1.4 ETH of real

This is the single most important fact for anyone putting money in. Across your fourteen pools there is 53.0957 ETH of virtual reserve against 1.4054 ETH of real ETH — and every wei of that real ETH came from buyers, not from liquidity providers.

The proof is in the LP accounting. initPool mints initVirtualEthSupply + msg.value shares, and virtualEthPoolSupply is write-once. For thirteen of the fourteen pools, lpTokenSupply equals virtualEthPoolSupply to the wei — which means msg.value was zero at genesis. Only TRADE ever had real ETH deposited: 0.5956 ETH. In the whole history of the contract there are 27 LiquidityAdded events and exactly one LiquidityRemoved, and that one returned 0 ETH.

The consequence: sell() gates on require(ethPoolSupply[token] >= ethOut) — real ETH only — while calculateSellEthOut quotes off virtual + real. calculateSellEthOut(TRIANGLE, 100e18) returns 0.0277689 ETH against a real pool of 0.0002117 ETH. A 131× overquote, followed by a revert.

How much you can actually sell before the revert, measured by bisecting each boundary and round-tripping it through the quote function:

TokenMax sellable (tokens)as % of poolReal ETH in poolVirtual ETH
CROISSANT~00.0000%0.00000000371.6766
10GUY0.2240.0007%0.00006689.0501
CHICKENS0.5530.0087%0.0001451.6799
TRIANGLE0.7510.0115%0.0002121.8541
HIOKAY1.1720.0184%0.0003571.9498
DANCE1.6280.0256%0.0004271.6766
SUCCESS1.7670.0000%0.00000389.0095
HONEYBADGER2.1290.0335%0.0007462.2334
HIDEYOKIDS2.3890.0374%0.0008332.2334
2PBF3.6840.0575%0.0003180.5546
TRADE6.3480.0000%0.00000008815.0000
PANDA516.168.78%0.1048951.1989
ERMAGHERD1,970.7144.63%0.9934852.2334
MOMMY2,112.7211.10%0.3038612.7455

Spend 1 ETH on TRIANGLE and you receive 2,292.25 tokens. You can then sell back at most 0.751 of them, for a total of 0.000212 ETH. Treat every purchase here as one-way.

Routes

Four ways to take supply, and what each is worth

A

Buy from the AMM

Works today · verified by simulation

One unpermissioned call, no router, no approval, no deadline, no allowlist, no pause. Gets you the 1.6–45% of each supply the market holds. Constant-product means the last few percent are asymptotically unbuyable — see the cost table.

B

Buyout auction — start() then end()

Open on 10 of 21 · blocked on the rest

Pay reservePrice(), wait 3 days, take the NFT outright; fraction holders then cash() their pro-rata share of your bid. This is the only route that gets you the asset rather than a minority of paper. SMI at 10 ETH is the lowest price in the set, though it is a Dank Bank promotional asset rather than an organic meme — priced by the wallet that both minted and curates it. Of the genuine memes, ERMAGHERD and FEDORA sit at 175 ETH, CHICKENS and the three Pepes at 420, HIOKAY and DANCE at 500. The rest are set to the joke 42,069 or blocked on quorum.

Blocked wherever fewer than 50% of the supply has voted a price — and that gate cannot be lowered, because Fractional's Settings owner is 0x0. Note the perverse dynamic: tokens sitting in the AMM are non-voters, so every historical sale pushed its vault further from quorum. MOMMY is the clearest case — the market holds 45.23% while voting power is only 26.31%.

Do not try to force the reserve down first. Buying the AMM float and voting at the floor cuts the reserve by at most 4.5–18.7%, and the floor is pinned at the incumbent voter's price ÷ 100 — it does not ratchet, because the bound is computed excluding your own vote. Splitting the buy across many wallets converges on the same number (0.2% better on TRIANGLE). Worse, start() escrows the whole reserve as a live bid with no cancel path anywhere in the contract, and even a fully crashed reserve sits 5×–9,423× above what the underlying NFTs appear to be worth. The curator's winning counter-move is simply to do nothing and let you take delivery of your own overpriced bid.

C

Accumulate to 100%, then redeem()

Impractical for almost all of them

redeem() burns your entire holding and transfers the NFT to you. It is live on all 21 and has already been exercised three times on abandoned first-attempt vaults. But it needs every last token consolidated into one address: the AMM's slice, the curator's 11–82%, and the 2.6–97.7% sitting on Polygon. For TRADE roughly 99.3% is bridged or pooled. For a basket-wrapped meme it is two steps — redeem() the vault for Basket #0, then withdrawERC1155 on the basket.

D

Bridge back from Polygon, or buy there

Path is open · float is concentrated

19 of 21 have live Polygon child tokens holding 2.6–97.7% of supply. The PoS exit path is fully operational — checkpoints were 2.4 minutes old at measurement, and there is no 7-day challenge period for PoS ERC-20s. But ~95–100% of the Polygon float on 18 of 19 sits with the same two curator keys, so this is an OTC conversation, not a market. TRADE is the exception.

Pricing

What the AMM route costs

Computed from live reserves with the exact source formula and spot-checked against the on-chain quote function.

TokenAMM holds50% of pool80%90%95%99%
2PBF15.23%0.562.235.0110.5855.12
PANDA13.98%1.315.2311.7724.85129.5
CROISSANT15.17%1.686.7315.1431.96166.5
DANCE15.14%1.686.7315.1431.97166.6
CHICKENS15.13%1.696.7415.1732.02166.9
TRIANGLE15.59%1.867.4416.7435.35184.2
HIOKAY15.15%1.967.8317.6137.17193.7
HIDEYOKIDS15.17%2.248.9720.1742.59221.9
HONEYBADGER15.11%2.248.9720.1742.59221.9
MOMMY45.23%3.0612.2427.5358.12302.9
ERMAGHERD10.50%3.2412.9529.1461.51320.5
SUCCESS10.06%9.0436.1581.35171.7894.8
10GUY4.34%9.0836.3281.71172.5898.9
TRADE1.57%15.0560.19135.4285.91,489.8
ALL 1454.7218.7492.11,038.9≈5,414

ETH cost to take that fraction of the market's own holdings, ordered by cheapest first. “AMM holds” is that slice as a percentage of total token supply, so buying 90% of the TRIANGLE pool for 16.74 ETH leaves you with 14.0% of all TRIANGLE. Slippage on TRIANGLE runs +0.4% at 0.001 ETH, +5.7% at 0.1 ETH, 1.54× spot at 1 ETH and 6.40× at 10 ETH.

The shape of the opportunity: roughly 55 ETH takes half of every pool across all fourteen; ~492 ETH takes 90%. Beyond that the asymptote makes it pointless. Neither figure buys a controlling position in anything — the curator keys hold 11–82% of most vaults and the bridge holds the rest.

Risk

Three things a single key can still do

Supply cannot be minted, transfers cannot be frozen, there is no blacklist, no fee-on-transfer, no pause and no expired deadline anywhere. The token contracts have no owner() at all. What remains is worse than a typical admin key, because it reaches the asset rather than the paper.

CriticalA curator can collapse the reserve price to 1 wei and auction the NFT away

In eight of your fourteen vaults the curator is the sole voter. updateUserPrice's sole-voter branch applies no minReserveFactor or maxReserveFactor bound at all. I verified this directly: updateUserPrice(1) from 0xd4e3a3cb… against the TRIANGLE vault returns 0x — success — while the identical call from an ordinary holder reverts update:reserve price too low.

So the curator can set reservePrice() to 1 wei, start() the auction for 1 wei, and after 72 hours end() transfers the escrowed NFT out — leaving every fraction holder to cash() a pro-rata share of one wei. No multisig, no upgrade, no warning. Affected: TRIANGLE, ERMAGHERD, 10GUY, HIOKAY, 2PBF, PANDA, CHICKENS, DANCE — eight vaults, two keys. Buying fractions in any of these is buying a position that one person can zero at will.

CriticalOne signature replaces the AMM and takes everything pooled in it

The market's EIP-1967 admin slot resolves to ProxyAdmin 0x7cf45345…, owned by Gnosis Safe 0x25a12B52…, whose getThreshold() returns 1, with two owners. One signature swaps the implementation and takes the 1.4614 ETH plus every pooled token. The proxy has already been upgraded five times, so this is a used path, not a dormant one.

Note the governance asymmetry: the Safe that merely holds tokens is 5-of-9, while the Safe holding the upgrade key is 1-of-2 — and one of its two signers, 0x30653411…, is also curator of seven of your fourteen vaults.

HighLPs can withdraw all real pooled ETH ahead of any holder's sell

LP ownership is effectively 100% Dank Bank: 0xd4e3a3cb… holds all of nine pools, 0x30653411… all of six plus 99.89% of SUCCESS. Simulated: burning 30.79% of the ERMAGHERD LP returns 0.9935 ETH — 99.9999999% of that pool's entire real ETH — plus ~1,359 pooled tokens, in one call. They deposited no ETH; they can take all of the buyers'.

HighA wrong token address is a silent, unrecoverable total loss

buy() has no pool-existence guard — unlike addLiquidity, which does. Calling buy(<any ERC-20 with no pool>, 0) succeeds, keeps 100% of your msg.value in ethPoolSupply, and sends you zero tokens. Verified by simulating buy(DAI, 0) with 0.01 ETH — returns 0x, no revert. Every recent trader used minTokensOut = 0, which disables the only protection against this and against sandwiching in pools this thin.

MediumFour underlying memes have dead metadata

CHICKENS, DANCE, MOMMY and CROISSANT resolve to IPFS CIDs that return 504 — found 3 provider(s), attempted 3, none reachable across seven gateways, while control CIDs in the same run resolved instantly. PANDA's tokenURI host is NXDOMAIN. The custody chain is fully verified either way — the NFT is provably in the vault — but for the basket-wrapped memes no name is currently verifiable from on-chain data alone; the names that resolved came from OpenSea's mutable API, not chain state.

Polygon

19 child tokens, and the bridge home is open

19 of the 21 have Polygon supply; only SMI and FEDORA were never bridged. Every mapping is a standard PoS ERC-20; the L1 escrow balance in the ERC20Predicate is the Polygon circulating supply, and child totalSupply() matches it to the wei for 18 of 19.

TokenPolygon child addressPolygon supply% of total
TRADE0x39EA286F590029634Db31440e4730fB02665895167,438,411,935.7397.74%
SUCCESS0x506143F1ceA18a4D880cEE60E01A55b678cfcfaB13,448,652.5131.97%
HONEYBADGER0xfa90517482eDf50cD8CF53eE68EDa28F70443f5310,156.9324.14%
DANKPEPE0xC479Cb873FA422ef7Ab518b70d0389AB19E566cb10,125.9424.07%
FEELSPEPE0x15B0918089634AcDf4Db21CEc9629DBAC65EA15a9,563.0922.73%
HIDEYOKIDS0x450345E119d8B6f7dC01487BeaE31f28CEe4CD4E9,087.1321.60%
CROISSANT0x21Ba992a493D0A50CdaD981Ac1329b49172038e48,076.6619.20%
HIOKAY0xa219326057bA89F8c5e9D11236a764468BC81E216,427.3315.28%
ERMAGHERD0x2D7D6ceFFBa8609ab2045C355df296D47076f3c36,044.3414.37%
SATAN0xdC41DDf6AE0Dc87337B801b198B3f116afD3368a5,719.0013.59%
CHICKENS0x8bE5CD897f64B45c28b517eafB03b32ea5a6C7125,178.6712.31%
DANCE0x43496BB704DA232eAF61Bde860bF0107C3e5B6864,273.3610.16%
10GUY0x3bDe1635f5EE6BC44DD909E71cb901Eb747F78a165,073.729.34%
GENIUS0xf9b9f5295D5F94b5d93551a441024eB7Cf0739Eb3,615.088.59%
2PBF0x6699421b0667F19c3154D2a09b0C6e37244bfc763,379.958.03%
PANDA0x54879FD3bB0B665746C249DD3a5112868E8F925A3,143.877.47%
MOMMY0x52DC058104D61A827C2bE671f71c80f962f8F8Ff3,051.637.25%
BRIAN0xBAB28c987Edc490CD6B6E1F1D57AF913a3Fe7E4d2,374,451.035.64%
TRIANGLE0xA4e44E00206f09d5DFb1d9627bD38E152A1522811,080.362.57%

HIDEYOKIDS is the one mismatch: L1 escrow exceeds Polygon supply by exactly 0.1 token — one Polygon-side burn whose L1 exit was never claimed.

Where it sits, and how to get it back

For 18 of the 19, the Polygon float is ~95–100% held by the Polygon AMM plus two EOAs — and each token's Polygon holder is exactly that vault's L1 curator, 19 for 19. This is not a distributed retail float; it is one curator key per vault carried across the bridge. TRADE is the sole outlier: 0.14% in the AMM, 0.25% with the curator, and 99.58% genuinely distributed — chiefly contract 0x8cd79898… (38.99%), EOA 0xbdbae5d1… (25.95%) and EOA 0xccd8f8cc… (22.44%).

The exit works. Verified live: withdraw(uint256) on a child contract simulated successfully from a 600-TRIANGLE holder; an oversized amount reverted ERC20: burn amount exceeds balance; a checkpoint was 2.4 minutes old at measurement. Settlement is checkpoint latency (~30 min–3 h) plus a manual exit() proof on Ethereum. There is no 7-day challenge period — that applies to legacy Plasma exits. Polygon PoS is not deprecated; the July 2026 sunset was zkEVM Mainnet Beta, a different chain.

The Polygon AMM is worse than mainnet's. DankBankMarketGSN at 0x64C5CD05… is USDC.e-denominated and gasless via ERC-2771. It holds 1,998 base units of USDC.e — $0.001998 — against pool books totalling 8,998,108.60 USDC. sell() checks the book, passes, then reverts on the real transfer. Every Polygon sell above ~0.002 USDC is dead. Its addLiquidity is also broken outright — the dust refund uses the wrong token denomination and a self-allowance that is never granted.

Execution

The transaction, exactly

The dead website is irrelevant. Every historical buy from 2022 to June 2026 is an EOA calling this selector directly — no router, no WETH wrap, no approval, no deadline, no signature, no allowlist.

Buy — mainnet

to:    0x0988Fb1C153a6f6492218Ead6b17fd795d6D18F9
value: <ETH to spend>
data:  0xcce7ec13 || abi.encode(address token, uint256 minTokensOut)
gas:   ~90,000        // observed gasUsed 86,847

Quote first — always

calculateBuyTokensOut(address token, uint256 ethIn)   0xa615e05a
calculateSellEthOut  (address token, uint256 tokensIn) 0x8108dd21   // lies — see §The trap
ethPoolSupply        (address token)                   0x24eb07f5   // the real number

Sell — two steps, and mostly futile

1. approve(0x0988Fb1C…, tokensIn)   // on the meme ERC-20; safeTransferFrom, so mandatory
2. to 0x0988Fb1C…, value 0
   data 0x6a272462 || abi.encode(address token, uint256 tokensIn, uint256 minEthOut)

Buyout auction — the route that gets you the NFT

reservePrice()  0xdb2e1eed   // full ETH cost; msg.value must be >= this
votingTokens()  0x9a4e6d34   // must be >= 50% of totalSupply() or start() reverts
start()         0xbe9a6555   payable
bid()           0x1998aeef   payable   // min increase 5% (minBidIncrease 50/1000)
end()           0xefbe1c1c             // after auctionEnd; transfers the NFT to `winning`
redeem()        0xbe040fb0             // burns 100% of supply, takes the NFT directly

Set a real minTokensOut. It is the only slippage bound — there is no deadline argument — and it is the only thing standing between a fat-fingered token address and a total loss. The guard does work: an unreachable value reverts with DankBankMarket: Insufficient tokens out.

Everything above was proven by read-only eth_call with a funded from override at block ~25,833,276. buy(token, 0) with 0.01 ETH returned success on TRIANGLE, ERMAGHERD, PANDA, MOMMY and TRADE; with 10 ETH on TRIANGLE, SUCCESS, CROISSANT and TRADE. sell(TRIANGLE, 100e18, 0) reverts with DankBankMarket: Market has insufficient liquidity for the trade. No transaction was broadcast and none will be — I can research and simulate this, but I can't execute trades or transfers on your behalf, and nothing here is investment advice.

Gaps

What I could not settle

  1. Who holds the two curator keys 0xd4e3a3cb and 0x30653411, and the two signers on the 1-of-2 upgrade Safe. Between them they can collapse the reserve price on eight vaults, withdraw all pooled ETH, and replace the AMM. This is the highest-value follow-up before committing capital — it is the difference between a dormant project and an active one.
  2. Who holds the 19 Polygon child tokens. Nobody has run a holder query against them. For TRADE, at 97.74% bridged, this is the acquisition question.
  3. What drained the Polygon AMM's USDC.e to $0.002 against an 8.99M book. The leading untested hypothesis is 18-decimal seed figures against a 6-decimal payment token.
  4. A possible Polygon staking contract. The live frontend references dank-bank-staking-matic and -mumbai subgraphs. There is no staking repo in the org and no address in any config. It may hold user funds. Nobody has looked.
  5. 4,206,900 FEDORA stranded in a failed MISO auction. finalizeTimeExpired() returns true, so a finalize() should release them — but who is permitted to call it is unverified.
  6. Whether Safe 0x8569fCA4 (feistydao.eth, 5-of-9) is Dank Bank's treasury or FeistyDAO's. Its holdings — 13.4bn NFD, 100m DOG, ten Uniswap v3 positions — point to FeistyDAO as an outside participant, not the issuer. Unresolved; its 161 transactions were never decoded.
  7. The five superseded AMM implementations were never disassembled. The 745 trades of 2022 — the bulk of all volume ever — cleared under a version nobody read.

Unrelated but worth passing on: the still-live frontend bundle at dankbank.co leaks a The Graph gateway API key, two Infura project ids, and seven OpenZeppelin Defender autotask webhook URLs. I have not exercised them and have not reproduced the values here. If you end up in contact with anyone from the project, it is worth mentioning.