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.
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.
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.
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.
| Token | Address | Supply | AMM holds | Reserve price | Voting | Status |
|---|---|---|---|---|---|---|
| TRIANGLE | 0x6dd5f24e…d7aea | 42,069 | 15.59% | 42,069 ETH | 66.7% | joke price |
| ERMAGHERD | 0x94aebf59…a2a9b | 42,069 | 10.50% | 175 ETH | 61.4% | buyout open |
| SUCCESS | 0x7e0eaf21…c2486 | 42,069,000 | 10.06% | 163,224 ETH | 34.2% | no quorum |
| TRADE | 0xd20183c1…43fd6 | 69,000,000,000 | 1.57% | — | 0.0% | no quorum |
| 10GUY | 0x9550a643…53373 | 696,969 | 4.34% | 42,069 ETH | 81.8% | joke price |
| HIDEYOKIDS | 0x63a8041d…243ec | 42,069 | 15.17% | 42,069 ETH | 49.4% | no quorum |
| HIOKAY | 0x9874d02d…30926 | 42,069 | 15.15% | 500 ETH | 61.2% | buyout open |
| HONEYBADGER | 0xf9404561…af1c2 | 42,069 | 15.11% | 42,069 ETH | 11.2% | no quorum |
| 2PBF | 0x06e77ea8…69218 | 42,069 | 15.23% | 42,069 ETH | 61.2% | joke price |
| PANDA | 0x0c19a90a…a6061 | 42,069 | 13.98% | 42,069 ETH | 61.2% | joke price |
| CHICKENS | 0xcf8a5956…53187 | 42,069 | 15.13% | 420 ETH | 61.2% | buyout open |
| DANCE | 0x11c80833…3e0f3 | 42,069 | 15.14% | 500 ETH | 58.6% | buyout open |
| MOMMY | 0xf09d8ce5…df5a6 | 42,069 | 45.23% | 42,069 ETH | 26.3% | no quorum |
| CROISSANT | 0x1ab00521…2bc4 | 42,069 | 15.17% | 42,069 ETH | 11.2% | no quorum |
| BRIAN not on sheet | 0x8d15347e…bcb01 | 42,069,000 | 10.05% | 2,000 ETH | 11.9% | no quorum |
| DANKPEPE not on sheet | 0x8a06dbbb…9f87 | 42,069 | 36.24% | 420 ETH | 24.7% | no quorum |
| FEELSPEPE not on sheet | 0x1994e631…2e8f | 42,069 | 27.10% | 420 ETH | 38.3% | no quorum |
| SATAN not on sheet | 0x84b26537…7a88 | 42,069 | 50.02% | 42,069 ETH | 13.6% | no quorum |
| GENIUS not on sheet | 0x362bf4c2…831b0 | 42,069 | 23.79% | 420 ETH | 27.5% | no quorum |
| SMI not on sheet | 0xc9de125f…9d3c | 69,000 | 9.87% | 10 ETH | 88.2% | promo asset |
| FEDORA not on sheet | 0x4ce05dd7…a50e | 42,069,000 | 0.00% | 175 ETH | 90.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.
| Token | Vault (ERC-20 you buy) | Collection | Underlying NFT | Inside the basket | Polygon child |
|---|---|---|---|---|---|
| Dancing Triangle TRIANGLE | 0x6dd5f24e75… | Rarible | 0xc9154424b8… #112544722715… Rarible lazy-mint; id encodes the creator | — direct — | 0xA4e44E0020… |
| Ermagherd ERMAGHERD | 0x94aebf5944… | Foundation | 0x3b3ee1931d… #21303 | — direct — | 0x2D7D6ceFFB… |
| Success Kid SUCCESS | 0x7e0eaf2135… | Foundation | 0x3b3ee1931d… #21262 | — direct — | 0x506143F1ce… |
| Trade Offer TRADE | 0xd20183c182… | NFT Basket | 0xf6e70d3829… #0 | 0x495f9472… #312450302707… by 0x45140f78… | 0x39EA286F59… |
| 10 Guy 10GUY | 0x9550a64314… | Foundation | 0x3b3ee1931d… #35918 | — direct — | 0x3bDe1635f5… |
| Hide Yo Kids, Hide Yo Wife HIDEYOKIDS | 0x63a8041d68… | NFT Basket | 0xfb0151ef75… #0 | 0x495f9472… #831011765811… by 0xb7b99961… | 0x450345E119… |
| Hi Okay HIOKAY | 0x9874d02d03… | NFT Basket | 0xb582aea24c… #0 | 0x495f9472… #928178029234… by 0xcd3503c6… | 0xa219326057… |
| Honey Badger Don't Care HONEYBADGER | 0xf940456138… | NFT Basket | 0x70b8d36827… #0 | 0x495f9472… #572476670192… by 0x7e910802… | 0xfa90517482… |
| Two Pretty Best Friends 2PBF | 0x06e77ea852… | NFT Basket | 0xb2d6f0eb55… #0 | 0x495f9472… #273339050958… by 0x3c6e7129… | 0x6699421b06… |
| Sneezing Baby Panda PANDA | 0x0c19a90a91… | The Super Viral Collection | 0x2cbee73bd4… #2 tokenURI host auction.nftvirals.com is NXDOMAIN | — direct — | 0x54879FD3bB… |
| Look at all those chickens! CHICKENS | 0xcf8a595681… | NFT Basket | 0x4e0cb5c7e3… #0 metadata CID dead (504 on 7 gateways) | 0x495f9472… #683535882802… by 0x971ec28c… | 0x8bE5CD897f… |
| Evolution of Dance DANCE | 0x11c8083384… | NFT Basket | 0x91a22921ca… #0 metadata CID dead (504 on 7 gateways) | 0x495f9472… #683535882802… by 0x971ec28c… | 0x43496BB704… |
| I Don't Like You Mommy MOMMY | 0xf09d8ce551… | NFT Basket | 0x035438a9f8… #0 metadata CID dead (504 on 7 gateways) | 0x495f9472… #683535882802… by 0x971ec28c… | 0x52DC058104… |
| I Could've Dropped My Croissant CROISSANT | 0x1ab0052159… | NFT Basket | 0x8100b3155f… #0 metadata CID dead (504 on 7 gateways) | 0x495f9472… #711384475639… by 0x9d46ef38… | 0x21Ba992a49… |
| Bad Luck Brian BRIAN not on sheet | 0x8d15347eda… | Foundation | 0x3b3ee1931d… #4263 | — direct — | 0xBAB28c987E… |
| Dank Pepe DANKPEPE not on sheet | 0x8a06dbbb2e… | NFT Basket | 0x63661c57fa… #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 Furie | 0x937a2cd137… #23 official Matt Furie RarePepe collection | — direct — | 0x15B0918089… |
| Satan Pepe SATAN not on sheet | 0x84b26537ed… | RarePepe by Matt Furie | 0x937a2cd137… #31 official Matt Furie RarePepe collection | — direct — | 0xdC41DDf6AE… |
| Genius Pepe GENIUS not on sheet | 0x362bf4c209… | RarePepe by Matt Furie | 0x937a2cd137… #35 official Matt Furie RarePepe collection | — direct — | 0xf9b9f5295D… |
| Smithers O'Neil SMI not on sheet | 0xc9de125ff7… | Foundation | 0x3b3ee1931d… #128087 SkyCorp Home Video promo, minted & curated by the same wallet | — direct — | never bridged |
| Tips Fedora FEDORA not on sheet | 0x4ce05dd7b9… | Foundation | 0x3b3ee1931d… #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 memes — 0x45140f78 (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:
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()andgetReserves()both revert. NogetPair, noallPairs, no per-pair address for an indexer to enumerate. - Bespoke trade surface.
buy(address,uint256)andsell(address,uint256,uint256)— noswapExactETHForTokens, no v2swap(), no v3exactInputSingle. - Non-standard events.
DankBankBuy/DankBankSell, neverSwap/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:
| Token | Max sellable (tokens) | as % of pool | Real ETH in pool | Virtual ETH |
|---|---|---|---|---|
| CROISSANT | ~0 | 0.0000% | 0.0000000037 | 1.6766 |
| 10GUY | 0.224 | 0.0007% | 0.0000668 | 9.0501 |
| CHICKENS | 0.553 | 0.0087% | 0.000145 | 1.6799 |
| TRIANGLE | 0.751 | 0.0115% | 0.000212 | 1.8541 |
| HIOKAY | 1.172 | 0.0184% | 0.000357 | 1.9498 |
| DANCE | 1.628 | 0.0256% | 0.000427 | 1.6766 |
| SUCCESS | 1.767 | 0.0000% | 0.0000038 | 9.0095 |
| HONEYBADGER | 2.129 | 0.0335% | 0.000746 | 2.2334 |
| HIDEYOKIDS | 2.389 | 0.0374% | 0.000833 | 2.2334 |
| 2PBF | 3.684 | 0.0575% | 0.000318 | 0.5546 |
| TRADE | 6.348 | 0.0000% | 0.000000088 | 15.0000 |
| PANDA | 516.16 | 8.78% | 0.104895 | 1.1989 |
| ERMAGHERD | 1,970.71 | 44.63% | 0.993485 | 2.2334 |
| MOMMY | 2,112.72 | 11.10% | 0.303861 | 2.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
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.
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.
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.
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.
| Token | AMM holds | 50% of pool | 80% | 90% | 95% | 99% |
|---|---|---|---|---|---|---|
| 2PBF | 15.23% | 0.56 | 2.23 | 5.01 | 10.58 | 55.12 |
| PANDA | 13.98% | 1.31 | 5.23 | 11.77 | 24.85 | 129.5 |
| CROISSANT | 15.17% | 1.68 | 6.73 | 15.14 | 31.96 | 166.5 |
| DANCE | 15.14% | 1.68 | 6.73 | 15.14 | 31.97 | 166.6 |
| CHICKENS | 15.13% | 1.69 | 6.74 | 15.17 | 32.02 | 166.9 |
| TRIANGLE | 15.59% | 1.86 | 7.44 | 16.74 | 35.35 | 184.2 |
| HIOKAY | 15.15% | 1.96 | 7.83 | 17.61 | 37.17 | 193.7 |
| HIDEYOKIDS | 15.17% | 2.24 | 8.97 | 20.17 | 42.59 | 221.9 |
| HONEYBADGER | 15.11% | 2.24 | 8.97 | 20.17 | 42.59 | 221.9 |
| MOMMY | 45.23% | 3.06 | 12.24 | 27.53 | 58.12 | 302.9 |
| ERMAGHERD | 10.50% | 3.24 | 12.95 | 29.14 | 61.51 | 320.5 |
| SUCCESS | 10.06% | 9.04 | 36.15 | 81.35 | 171.7 | 894.8 |
| 10GUY | 4.34% | 9.08 | 36.32 | 81.71 | 172.5 | 898.9 |
| TRADE | 1.57% | 15.05 | 60.19 | 135.4 | 285.9 | 1,489.8 |
| ALL 14 | — | 54.7 | 218.7 | 492.1 | 1,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.
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.
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.
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'.
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.
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.
| Token | Polygon child address | Polygon supply | % of total |
|---|---|---|---|
| TRADE | 0x39EA286F590029634Db31440e4730fB026658951 | 67,438,411,935.73 | 97.74% |
| SUCCESS | 0x506143F1ceA18a4D880cEE60E01A55b678cfcfaB | 13,448,652.51 | 31.97% |
| HONEYBADGER | 0xfa90517482eDf50cD8CF53eE68EDa28F70443f53 | 10,156.93 | 24.14% |
| DANKPEPE | 0xC479Cb873FA422ef7Ab518b70d0389AB19E566cb | 10,125.94 | 24.07% |
| FEELSPEPE | 0x15B0918089634AcDf4Db21CEc9629DBAC65EA15a | 9,563.09 | 22.73% |
| HIDEYOKIDS | 0x450345E119d8B6f7dC01487BeaE31f28CEe4CD4E | 9,087.13 | 21.60% |
| CROISSANT | 0x21Ba992a493D0A50CdaD981Ac1329b49172038e4 | 8,076.66 | 19.20% |
| HIOKAY | 0xa219326057bA89F8c5e9D11236a764468BC81E21 | 6,427.33 | 15.28% |
| ERMAGHERD | 0x2D7D6ceFFBa8609ab2045C355df296D47076f3c3 | 6,044.34 | 14.37% |
| SATAN | 0xdC41DDf6AE0Dc87337B801b198B3f116afD3368a | 5,719.00 | 13.59% |
| CHICKENS | 0x8bE5CD897f64B45c28b517eafB03b32ea5a6C712 | 5,178.67 | 12.31% |
| DANCE | 0x43496BB704DA232eAF61Bde860bF0107C3e5B686 | 4,273.36 | 10.16% |
| 10GUY | 0x3bDe1635f5EE6BC44DD909E71cb901Eb747F78a1 | 65,073.72 | 9.34% |
| GENIUS | 0xf9b9f5295D5F94b5d93551a441024eB7Cf0739Eb | 3,615.08 | 8.59% |
| 2PBF | 0x6699421b0667F19c3154D2a09b0C6e37244bfc76 | 3,379.95 | 8.03% |
| PANDA | 0x54879FD3bB0B665746C249DD3a5112868E8F925A | 3,143.87 | 7.47% |
| MOMMY | 0x52DC058104D61A827C2bE671f71c80f962f8F8Ff | 3,051.63 | 7.25% |
| BRIAN | 0xBAB28c987Edc490CD6B6E1F1D57AF913a3Fe7E4d | 2,374,451.03 | 5.64% |
| TRIANGLE | 0xA4e44E00206f09d5DFb1d9627bD38E152A152281 | 1,080.36 | 2.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
- 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.
- 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.
- 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.
- A possible Polygon staking contract. The live frontend references
dank-bank-staking-maticand-mumbaisubgraphs. There is no staking repo in the org and no address in any config. It may hold user funds. Nobody has looked. - 4,206,900 FEDORA stranded in a failed MISO auction.
finalizeTimeExpired()returns true, so afinalize()should release them — but who is permitted to call it is unverified. - 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. - 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.