# MTF (Meme Traded Fund): full documentation This file contains every page of the MTF docs (https://mtf-meme500.vercel.app/docs) as plain markdown. # MTF documentation > What MTF is, the problem it solves, how MEME500 works in one paragraph, and the key numbers. Source: https://mtf-meme500.vercel.app/docs **Imagine ETFs, but for memes.** MTF (Meme Traded Fund) lets you buy a basket of Ethereum memes with one transaction. You send ETH and receive **MEME500**, a token that represents your share of a vault holding PEPE, SHIB, SPX6900, MOG and NEIRO. You can redeem it back to ETH at any time. The basket is bought and sold inside the swap by a Uniswap v4 hook, so there is no fund manager, no separate liquidity pool and no price oracle deciding what you get. > **Live on mainnet:** MEME500 is live on Ethereum mainnet: 0.01 ETH minimum and 5 ETH maximum per ape, with no cap on total deposits. The MTF token is not launched yet: date and address TBA. Contract addresses are listed on the [Contract addresses](https://mtf-meme500.vercel.app/docs/contract-addresses) page. ## The problem Getting broad meme exposure on Ethereum today means doing the work of an index fund by hand: * **Picking winners.** Memes move together but not equally. Holding one is a bet on that one coin. * **Five swaps and five approvals.** Buying five memes means five trades, five pool fees, five gas bills and approvals to manage. * **Manual rebalancing.** When one coin runs, your portfolio drifts. Keeping target weights means more trades. * **Exiting is just as slow.** Selling a basket back to ETH is another five transactions. ## The solution **Diagram: Five swaps by hand versus one swap through the MEME500 hook.** * Left side, the manual way: a wallet makes five separate swaps (ETH to PEPE, ETH to SHIB, ETH to SPX6900, ETH to MOG, ETH to NEIRO), each with its own approval and fee. * Right side, MTF: the wallet makes one swap of ETH into MEME500. Inside that single transaction the IndexHook buys all five memes in their target proportions and mints MEME500 to the wallet. MEME500 packages the top five Ethereum memes into one token. One click in, one click out. Inside a single Uniswap v4 swap the **IndexHook** splits your ETH across the five memes on their own deep ETH pools, deposits them in the index vault and mints MEME500 to you. Redeeming burns MEME500 and sells your share of each meme back to ETH, again in one transaction. Because shares are minted in proportion to what the vault already holds, nobody can mint cheap shares or dilute existing holders by pushing a price. ## Key numbers * **Memes in MEME500:** 5 (PEPE, SHIB, SPX6900, MOG, NEIRO) * **Target weights:** 35 / 35 / 18 / 7 / 5 (percent, in the order above) * **Ape and redeem fee:** 0.30% (each way, plus the 0.3% V2 pool fee per leg) * **Yearly fee:** 1% / year (streamed by minting MEME500) * **Measured round trip:** about 1.2% (1 ETH in, 0.988 ETH out on a mainnet fork) * **Per ape:** 0.01 ETH to 5 ETH (no cap on total deposits; split bigger amounts into several apes) ## How to read these docs * [How MEME500 works](https://mtf-meme500.vercel.app/docs/how-meme500-works): the ape and redeem flows step by step. * [Pricing and NAV](https://mtf-meme500.vercel.app/docs/pricing-and-nav): exactly how many MEME500 you receive and what one MEME500 is worth. * [Methodology and rebalancing](https://mtf-meme500.vercel.app/docs/methodology): how the weights are chosen and maintained. * [Fees](https://mtf-meme500.vercel.app/docs/fees) and [Locking and rewards](https://mtf-meme500.vercel.app/docs/locking): where every fee goes and how lockers earn more MEME500. * [MTF token](https://mtf-meme500.vercel.app/docs/mtf-token), [Approved list and tiers](https://mtf-meme500.vercel.app/docs/approved-list) and [User-built indexes](https://mtf-meme500.vercel.app/docs/user-indexes). * [Architecture](https://mtf-meme500.vercel.app/docs/architecture), [Security](https://mtf-meme500.vercel.app/docs/security) and [Risks](https://mtf-meme500.vercel.app/docs/risks): what the contracts can and cannot do, how they were tested, and what can go wrong. --- # How MEME500 works > The ape and redeem flows step by step, why a Uniswap v4 hook is used, and the in-kind fallback on redeem. Source: https://mtf-meme500.vercel.app/docs/how-meme500-works MEME500 lives in a Uniswap v4 pool where `currency0` is native ETH and `currency1` is the MEME500 token. The pool has a hook, the **IndexHook**, that replaces normal AMM pricing: it does not hold a curve of liquidity. Instead it buys or sells the underlying memes for every swap. Users interact through the **MTFRouter** with two functions: `ape` and `redeem`. ## Ape: ETH into MEME500 **Diagram: Sequence of one ape transaction.** 1. The user calls MTFRouter.ape(key, minOut, recipient) and sends ETH. 2. The router opens a swap on the Uniswap v4 PoolManager (exact input, ETH to MEME500). 3. The PoolManager calls the IndexHook before the swap. The hook takes the 0.30% fee and splits the remaining ETH across the five memes in proportion to what the vault holds. 4. The hook buys PEPE, SHIB, SPX6900, MOG and NEIRO on their own V2 style ETH pools (Uniswap V2 and ShibaSwap). Every leg is checked against a 3% price impact guard. 5. The bought tokens go into the index vault, which tracks holdings in storage. 6. The hook mints MEME500 in proportion to the increase in holdings and the swap settles. The router checks minOut and sends MEME500 to the recipient. 1. You call `MTFRouter.ape(key, minOut, recipient)` with ETH. `key` is the MEME500 pool key; the app reads it from `IndexHook.poolKeyOf(MEME500)`. 2. The router starts an exact input swap of ETH for MEME500 on the v4 PoolManager. Exact output swaps revert. 3. The IndexHook takes the 0.30% ape fee in ETH and splits the rest across the five memes **in proportion to current holdings**, so a deposit never changes the basket's mix. 4. Each meme is bought on its own V2 style ETH pool. If any leg would move that pool's price by more than 3%, the whole transaction reverts. 5. The bought tokens are added to the vault and MEME500 is minted to you. The amount is defined on [Pricing and NAV](https://mtf-meme500.vercel.app/docs/pricing-and-nav). 6. The router reverts if you would receive less than `minOut`. The app sets `minOut` from `IndexHook.estimateApe` minus your slippage setting. > **Too large for current liquidity:** `estimateApe` returns 0 when an ape would trip the 3% guard. The app then shows “Too large for current liquidity. Try a smaller amount” instead of sending a transaction that would revert. ## Redeem: MEME500 back to ETH **Diagram: Redeem runs the same path in reverse, with an in-kind fallback per leg.** 1. The user approves the router and calls MTFRouter.redeem(key, indexIn, minEthOut, recipient). 2. The hook takes the 0.30% sell fee in MEME500 before redeeming, burns the rest and computes the user's share of every meme: holding × shares / supply. 3. Each share is sold on its pool for ETH. If a sale fails, that meme is delivered to the user in kind instead. 4. The ETH is sent to the recipient, subject to minEthOut. 1. Approve the MTFRouter to spend your MEME500, then call `MTFRouter.redeem(key, indexIn, minEthOut, recipient)`. 2. The 0.30% fee is **taken in MEME500 before redeeming**, before anything is sold, so it cannot be avoided by forcing legs to fail. A redeem pays no ETH fee. 3. The remaining shares are burned and your pro rata share of every meme is computed: `holding_i × shares / supply`. 4. Each share is sold for ETH on its pool. The total ETH is sent to you if it is at least `minEthOut`. ### In-kind fallback Redeems are designed to always work. If the sale of one meme fails (for example because its pool is temporarily unusable), the redeem does not revert: that meme is sent to you **in kind** as the token itself, and the other legs are still sold for ETH. If an in-kind transfer cannot be delivered, it is recorded and can be claimed later with `IndexHook.claimInKind(token)`. Redeems cannot be paused by any admin role. ## Why a Uniswap v4 hook * **Atomic.** Buying five memes and minting the index happen in one transaction. Either everything succeeds or nothing happens. * **One transaction, one approval.** Ape needs no approval at all (you send ETH). Redeem needs one approval of MEME500. * **No separate liquidity pool.** The hook is the market maker. There are no LPs to pay and `addLiquidity` on the MEME500 pool reverts. * **Price equals the basket.** Because every ape buys the basket and every redeem sells it, the price you get is the value of the underlying memes after fees and pool slippage, not a separate order book. * **Composable.** Any wallet or aggregator that can route a v4 swap can reach MEME500 through the router. ## What one round trip costs On a mainnet fork using the real pools, 1 ETH aped into MEME500 minted about 99.6 MEME500, and redeeming it returned 0.988 ETH. Across sizes from 0.1 to 10 ETH the measured round trip cost was 1.19% to 1.22%: the 0.30% fee each way plus the 0.3% V2 pool fee on each leg in each direction. 20 consecutive apes totalling 46 ETH, then full redeems: aggregate cost 1.19%, no reverts, nothing delivered in kind. With the live limits (0.01 ETH to 5 ETH per ape, no deposit cap), a 5 ETH ape redeemed in full returned 4.94 ETH (98.8%), and ten 5 ETH apes in a row (50 ETH) all went through, and full redeems returned 49.4 ETH. | Index | Ape gas | Redeem gas | | --- | --- | --- | | MEME500 (5 tokens) | about 608k | about 659k | _Gas measured for the final contracts._ --- # Pricing and NAV > How MEME500 shares are minted without an oracle, the launch NAV, how NAV per token is computed, and a worked example. Source: https://mtf-meme500.vercel.app/docs/pricing-and-nav ## Shares minted on an ape MEME500 does not use a price oracle to decide how many shares you receive. Shares are minted in proportion to how much the vault's holdings grow, measured on the **smallest** relative increase across all tokens: **Shares minted** ```text shares = totalSupply × min_i( bought_i / held_i ) bought_i = amount of meme i bought by this ape held_i = amount of meme i in the vault before the ape ``` Taking the minimum means a buyer can never receive more than their real contribution to the basket. Even if someone manipulates one meme's pool price, they cannot mint cheap shares, so **existing holders cannot be diluted**. The person aping can still lose to a sandwich if they set no minimum output, which is why the app always sets `minOut` from the quote. ### First mint **Launch NAV** ```text first mint: 100 MEME500 per 1 ETH (1 MEME500 = 0.01 ETH) dead shares: 1e3 wei of MEME500 minted to address(0) ``` When the supply is zero the hook buys by the target weights and mints 100 MEME500 per ETH. A tiny amount of dead shares is minted once so the supply can never return to exactly zero. ## NAV per token **NAV** ```text NAV per MEME500 = Σ_i ( held_i × price_i ) / totalSupply ``` `IndexHook.navPerToken(MEME500)` returns this value in ETH (scaled by 1e18) for display. It is not used to mint or redeem. The ETH you actually receive on a redeem is the result of selling your share of each holding, so it reflects real pool prices and slippage at that moment. ## Worked example Suppose 1 MEME500 is worth $10.00 and the basket is exactly at its target weights. The value of each slice is the weight times the NAV: | Meme | Weight | Value inside 1 MEME500 | | --- | --- | --- | | Pepe | 35% | $3.50 | | Shiba Inu | 35% | $3.50 | | SPX6900 | 18% | $1.80 | | Mog Coin | 7% | $0.70 | | Neiro | 5% | $0.50 | * **PEPE doubles** and everything else is flat: the PEPE slice goes from $3.50 to $7.00, so NAV rises from $10.00 to $13.50, **+35%**. * **MOG goes to zero** and everything else is flat: the MOG slice of $0.70 disappears, so NAV falls to $9.30, **down 7%**. * **All five fall 50%**: NAV falls 50%. An index spreads single coin risk, it does not remove market risk. ## Why MEME500 is not chart tradable like a meme A normal meme trades on a curve whose price moves with buying pressure. MEME500 has no such curve: every ape buys the basket and every redeem sells it, so its price is pinned to the value of the five memes it holds. Buying a lot of MEME500 does not pump MEME500 relative to its basket; it pumps the five memes slightly, which the 3% guard limits. If MEME500 ever traded somewhere else at a different price, anyone could ape or redeem through the hook and sell on the other venue until the gap closed. --- # Methodology and rebalancing > How MEME500 weights are set (market cap and on-chain liquidity), the monthly review, membership rules, bounded rebalancing and capacity. Source: https://mtf-meme500.vercel.app/docs/methodology ## Weighting formula Each member's weight blends how big the coin is with how easily it can be bought on chain. Liquidity counts as much as market cap, because a coin that is large but thinly traded on ETH pools would make every ape and redeem expensive. **Target weight** ```text raw_i = 50% × marketCap_i / Σ marketCap + 50% × ethLiquidity_i / Σ ethLiquidity weight_i = raw_i, capped at 35% and floored at 5%, with the excess or shortfall redistributed pro rata across the others ``` | Meme | Market cap | ETH liquidity | Cap share | Liquidity share | Raw blend | Target | | --- | --- | --- | --- | --- | --- | --- | | PEPE | $1.85B | $34.7M | 31.8% | 55.6% | 43.7% | 35% | | SHIB | $3.46B | $4.7M | 59.4% | 7.5% | 33.5% | 35% | | SPX | $426M | $13.1M | 7.3% | 21% | 14.2% | 18% | | MOG | $47.8M | $6M | 0.8% | 9.6% | 5.2% | 7% | | NEIRO | $39.2M | $3.9M | 0.7% | 6.2% | 3.5% | 5% | _Market data from 2026-10-05. PEPE and SHIB hit the 35% cap, NEIRO is lifted to the 5% floor, and the remainder goes to SPX6900 and MOG (18.3% and 6.7%, rounded to 18% and 7%)._ ## Monthly review and timelock * The composition and weights are reviewed **monthly** against the formula above. * Any change to target weights is scheduled on chain and only takes effect after a **48 hour timelock**, so holders can see it coming and redeem if they disagree. * **Membership rule:** a coin enters or leaves MEME500 only after it qualifies (or fails to qualify) at **two consecutive monthly checks**. This avoids churning the basket on a single spike. * MEME500 only holds **Blue chip** memes from the approved list. See [Approved list and tiers](https://mtf-meme500.vercel.app/docs/approved-list). ## Bounded keeper rebalancing Because apes buy in proportion to current holdings, the basket drifts with prices just like a normal portfolio. Moving it back toward target weights is done by a rebalance keeper calling `rebalance`. Rebalances are bounded: each call has a maximum size and a minimum output, it can only trade toward the scheduled target weights, and it runs at most a few times per day. A keeper cannot withdraw tokens or change the targets. The owner appoints the rebalance keeper; **none is appointed yet**, so for now the basket simply drifts with prices. ## Capacity and why SHIB's ETH liquidity matters Every leg of an ape must stay under the 3% price impact guard. SHIB is 35% of the basket but its main ETH pool (ShibaSwap) holds only about 581 WETH, far less than PEPE's Uniswap V2 pool. On a mainnet fork the largest single ape the pools could absorb was **24.85 ETH** before the SHIB leg hit 3%; the other legs moved about 0.3% at that size. The contract caps each ape at **5 ETH**, well inside that, and there is no cap on total deposits: larger amounts are split into several apes. Capacity grows if SHIB's ETH liquidity deepens or if a future review lowers its weight. --- # Fees > Every MEME500 fee and its split between lockers, creators, the buyback wallet and the treasury, the planned MTF pool fee (TBA), and a worked example for a 1 ETH ape. Source: https://mtf-meme500.vercel.app/docs/fees ## Fee schedule | Fee | MEME500 | User-built indexes (planned) | | --- | --- | --- | | Ape fee | 0.30% | 0.10% to 1.00%, set by the creator | | Redeem fee | 0.30%, taken in MEME500 before redeeming | same as the ape fee | | Yearly fee | 1.00% per year | 0% to 2.00% per year, set by the creator | | Underlying pool fee | 0.3% per leg (Uniswap V2 / ShibaSwap) | 0.3% per leg | The yearly fee is streamed continuously by minting a small amount of new index tokens, so it shows up as a slow reduction in NAV per token rather than a charge on your wallet. ## How fees are split **Diagram: Where the ape and redeem fee goes.** * The 0.30% ape and redeem fee is split four ways. * 40% goes to lockers of that index: it is aped into MEME500 without a fee and streamed to lockers over 6 hours. * 25% goes to the index creator. For MEME500 the creator share goes to the treasury. * 15% goes to the public buyback wallet. Once MTF launches, it is used to buy back and burn MTF manually. * 20% goes to the treasury. | Split | Lockers | Creator | Buyback wallet | Treasury | | --- | --- | --- | --- | --- | | Ape and redeem fee | 40% | 25% | 15% | 20% | | Yearly fee | none | 25% | 25% | 50% | | Early exit penalty | 100% to the remaining lockers, streamed over 7 days | none | none | none | * **MEME500's creator share goes to the treasury**, because MEME500 is the official index. * **The sell fee is taken in index shares** before the basket is sold, so it applies even when a leg is delivered in kind. * **The locker share is converted without a fee.** The lockers' 40% of ape fees is aped into MEME500 by a keeper with no ape fee charged, at most once per block per index and with a minimum output, so lockers receive the full value. The lockers' 40% of redeem fees is already in MEME500 shares. * **The buyback share goes to a buyback wallet.** It accrues to a dedicated public buyback wallet set at deploy; changing it requires a 48h timelock. Once MTF launches (TBA), the team uses it to buy back and burn MTF, manually and at its discretion; every burn will be on-chain and verifiable. * **Rewards that arrive while nobody is locked go to the treasury** instead of being captured by the next lock. ## MTF pool fees MTF is not launched yet. Its pool is planned with a 1% fee that funds the treasury, the MEME500 backing wallet and MTF buybacks; the exact split and how sells are charged are **TBA** and will be published with the contract. See [MTF token](https://mtf-meme500.vercel.app/docs/mtf-token). ## Worked example: a 1 ETH ape | Item | ETH | | --- | --- | | You send | 1.000000 | | Ape fee (0.30%) | 0.003000 | | of which lockers (40%), aped into MEME500 | 0.001200 | | of which creator share, to treasury for MEME500 (25%) | 0.000750 | | of which buyback wallet (15%) | 0.000450 | | of which treasury (20%) | 0.000600 | | Spent on the basket | 0.997000 | | PEPE 35%, SHIB 35%, SPX6900 18%, MOG 7%, NEIRO 5% | 0.34895 / 0.34895 / 0.17946 / 0.06979 / 0.04985 | _Each basket leg also pays the 0.3% fee of its V2 pool. The split of the basket follows current holdings, which equal the target weights right after a rebalance._ --- # Locking and rewards > Lock MEME500 for 7, 30 or 90 days and earn more MEME500 from 40% of every ape and redeem fee. Tiers, reward math, early exit and decay. Source: https://mtf-meme500.vercel.app/docs/locking **Lock MEME500, earn more MEME500.** Lockers share 40% of every ape and redeem fee on MEME500. That share is aped into MEME500 without a fee and streamed to lockers over 6 hours after each fee distribution, so rewards arrive in the same token you locked and can be locked again. It compounds. ## Tiers | Tier | Lock length | Reward weight | Early exit | | --- | --- | --- | --- | | Sprint | 7 days | 1× | Not allowed | | Season | 30 days | 1.5× | Allowed, with a penalty | | Diamond | 90 days | 3× | Allowed, with a penalty | You can claim rewards at any time and extend a lock to a longer tier at any time. The minimum lock is **0.001 MEME500**. Locking uses `IndexLocker.lock(index, amount, tier)`; claiming uses `claim(lockId)`, which returns the reward in the second (index token) slot. ## Where rewards come from **Diagram: From a fee to a locker's claimable MEME500.** 1. Every ape and redeem on MEME500 pays a 0.30% fee. 2. 40% of that fee is set aside for lockers. 3. A keeper apes it into MEME500 with no ape fee (rate limited, with a minimum output). 4. The MEME500 is streamed to lockers over 6 hours, pro rata to each lock's weight. The lockers' 40% of redeem fees is already in MEME500 and joins the same stream. 5. Lockers claim MEME500 at any time. ## Reward math **Your share and APR** ```text weight = amount locked × tier multiplier (1, 1.5 or 3) your share = your weight / total weight of all MEME500 locks rewards/day = your share × 40% × fee × daily volume (fee = 0.30%) APR = 40% × fee × daily volume × 365 / locked value ``` The APR formula gives the average for 1× weight. A Diamond lock earns three times the rate of a Sprint lock of the same size, and the total is shared, so more locking means a smaller slice for everyone. Rewards in MEME500 are the USD value divided by the MEME500 price. | Daily MEME500 volume | Yearly locker rewards | APR at $2M locked | APR at $10M locked | | --- | --- | --- | --- | | $250k | $109,500 | 5.5% | 1.1% | | $1M | $438,000 | 21.9% | 4.4% | | $2M | $876,000 | 43.8% | 8.8% | | $5M | $2,190,000 | 109.5% | 21.9% | _Illustrative only. Volume and locked value are assumptions, not forecasts. Nothing is promised._ ## Early exit **Penalty** ```text penalty = 20% × time left / lock length (paid in MEME500) ``` * Sprint (7 day) locks and creator seed locks can **never** exit early, even after extending. * Season and Diamond locks can. Leaving halfway through costs 10%; leaving on the first day costs close to 20%. * The penalty goes **100% to the lockers who stay**, streamed over 7 days so it cannot be captured by opening a lock just before someone leaves. * Rewards or penalties that arrive while nobody is locked go to the treasury. ## After a lock ends When a lock reaches its end date its weight drops to 1×: anyone can call `kick(lockId)` to apply it, so an expired Diamond lock no longer earns three times the rate without a commitment. The app shows it as “Matured · 1× until you unlock or relock”. You can unlock, keep earning at 1×, or relock into a new tier. --- # MTF token > MTF is the planned platform token: a fixed supply of 1 billion and a fair launch with 100% in a locked pool. Launch date, contract address and final fee routing: TBA. Source: https://mtf-meme500.vercel.app/docs/mtf-token > **Status: TBA:** MTF is **not launched yet**. The launch date, the contract address and the final fee routing are **to be announced (TBA)**. Only trust an MTF address once it is published on the [Contract addresses](https://mtf-meme500.vercel.app/docs/contract-addresses) page. MEME500 works without MTF: you ape and redeem with ETH and lockers are paid in MEME500. | Item | Status | | --- | --- | | Contract address | TBA | | Launch date | TBA, after MEME500 | | Pool fee routing | TBA, published with the contract | | Supply | 1,000,000,000 MTF, fixed (planned) | | Allocation | 100% in the launch pool, no team allocation (planned) | ## The plan MTF is planned as the platform token of Meme Traded Fund. The supply is fixed at **1,000,000,000 MTF** with no minting function, so the supply can only go down through burns. * **Fair launch.** All 1,000,000,000 MTF go into a one-sided Uniswap v4 MTF/ETH pool. There is no team, treasury, community or launch boost allocation; everyone buys from the same pool. * **Starting point.** The pool opens at a launch price equivalent to 1B MTF paired with 1 ETH (about a 1 ETH starting market cap), or 0.000000001 ETH per MTF. The price can't fall below the launch price, because the pool holds no ETH below it. * **Liquidity locked forever.** The pool position is held by a locker that can only collect fees; the liquidity can never be withdrawn. * **Launch protection.** A wallet can hold at most 2% of supply (20M MTF) for the first 15 minutes after launch. The limit then switches itself off permanently; it is enforced in the MTF token and nobody can switch it back on. * **Pool fee.** A 1% fee on MTF trades, used to fund the treasury, the MEME500 backing wallet and MTF buybacks. The exact split and how sells are charged are TBA and will be published with the contract. ## What MTF is for * **Buybacks.** 15% of every MEME500 ape and redeem fee and 25% of every MEME500 yearly fee already go to the public buyback wallet (see [Contract addresses](https://mtf-meme500.vercel.app/docs/contract-addresses)). Once MTF launches, the team uses it to buy back and burn MTF, manually and at its discretion; every burn will be on-chain. Until then the wallet only accumulates. * **Backing.** Part of the MTF pool fees is planned to go to a public MEME500 backing wallet that apes MEME500. Address: TBA. * **Creator stake.** When user-built indexes open, each new index is planned to lock $500 of MTF for as long as it lives. * **Governance.** MTF holders are planned to steer listings, fees and treasury decisions. --- # Approved list and tiers > Which memes can be held by an index, the Blue chip, Standard and Degen thresholds, the safety rules, and the latest scan. Source: https://mtf-meme500.vercel.app/docs/approved-list Indexes can only hold tokens on the on-chain **MemeRegistry** approved list. Listing is **team only** and goes through a **48 hour timelock**. Delisting or downgrading is instant: it blocks new apes into indexes holding that token, but it **never blocks redeems**. ## Tiers | Tier | Market cap | ETH pool liquidity | Pool age | Max weight | Used by | | --- | --- | --- | --- | --- | --- | | Blue chip | at least $10M | at least $500k | at least 30 days | 40% | MEME500 and any index | | Standard | at least $1M | at least $50k | at least 7 days | 40% | User-built indexes | | Degen | at least $250k | at least $20k | at least 3 days | 15% | User-built indexes, which are then flagged Degen | ## Safety rules for every tier * No buy or sell tax, and not a honeypot. * No blacklist, pause or freeze function unless ownership is renounced. * No owner mint or takeover function. * Verified source code. * Top 10 wallets hold at most 40% (excluding burn, LP and tagged exchange wallets). **Blue chips are exempt.** * At least 80% of LP tokens locked or burned. **Blue chips are exempt.** * A V2 style WETH pool (Uniswap V2, ShibaSwap or SushiSwap) so the hook can trade it. ### Why blue chips are exempt from two rules For large, old memes the top holder list is dominated by exchange custody wallets, so a top 10 rule would exclude coins like SHIB for the wrong reason. Their main pools are also deep enough and old enough that an unlocked LP is a much smaller risk; PEPE's main pool, for example, shows 0% of LP locked but holds over $30M. Standard and Degen tokens must pass both rules. ## How tokens are scanned * **On-chain reserves:** the token's WETH pair on Uniswap V2, ShibaSwap and SushiSwap, read directly from the pool. * **GoPlus token security:** taxes, honeypot simulation, blacklist, pause, mint and owner powers, holder distribution and LP locks. * **GeckoTerminal:** pool age. * **CoinGecko:** market cap (an FDV estimate is used when market cap is missing). Anyone can run the same pre-check from the [Approved memes](https://mtf-meme500.vercel.app/app/memes) page with “Check a token”. It does not list anything; listing remains team only. ## Latest scan * **Scanned:** 217 (CoinGecko meme category, market cap at least $250k) * **Eligible:** 102 (scan of 2026-10-05) * **Blue chip:** 13 * **Standard:** 33 * **Degen:** 56 * **FLOKI** is excluded because it charges a 0.3% DEX tax. * **TURBO** is excluded because it has no V2 style WETH pool for the hook to trade. * 28 tokens failed the top 10 holder rule, 12 have transfer taxes, and 11 have blacklist, pause or owner mint powers. The full list with addresses, liquidity and checks is on the [Approved memes](https://mtf-meme500.vercel.app/app/memes) page. --- # User-built indexes (coming soon) > The planned rules for community indexes: 3 to 10 approved memes, creator fees, the MTF stake and the seed lock. Off at launch. Source: https://mtf-meme500.vercel.app/docs/user-indexes > **Not live at launch:** The platform launches with MEME500 only. User-built indexes are switched off on chain (`IndexFactory.userIndexesEnabled()` is false) and can only be switched on through a 48 hour timelock, after the MEME500 launch. The rules below are planned and can still change. ## Planned rules | Rule | Value | | --- | --- | | Memes per index | 3 to 10, from the approved list | | Weight per meme | 5% to 40%, summing to exactly 100% (Degen memes at most 15%) | | Ape and redeem fee | 0.10% to 1.00%, set by the creator | | Yearly fee | 0% to 2.00%, set by the creator | | Creator stake | $500 of MTF, locked for as long as the index lives (MTF launch: TBA) | | Seed | at least 0.1 ETH, aped at creation with a minimum share output; the creator's seed shares are locked for 30 days and can never exit early | | Creator earnings | 25% of trade fees and 25% of the yearly fee | | Ticker and name | ticker up to 12 letters or digits, name up to 48 characters | | Degen flag | any index holding a Degen meme is flagged Degen | ## Card art and metadata Creators can attach card art and a short description. The app uploads a JSON file `{name, ticker, image, description}` and stores its URI on chain with `IndexFactory.setIndexMetadata(indexToken, uri)` (at most 256 bytes). The URI is set by the creator and not checked on chain, so the app only renders `ipfs://` and `https://` URIs, fetches them with a timeout, validates every field and falls back to a plain monogram card on any failure. --- # Architecture > The MTF contracts, what each one does, who can call what, and the admin powers with their timelocks. Source: https://mtf-meme500.vercel.app/docs/architecture **Diagram: How the contracts connect.** * Users call MTFRouter (ape, redeem) and IndexLocker (lock, claim, unlock). * MTFRouter swaps through the Uniswap v4 PoolManager, which calls IndexHook on every MEME500 swap. * IndexHook buys and sells the memes on V2 style pools, holds the vault and mints and burns IndexToken (MEME500). * IndexHook checks MemeRegistry for approved tokens and sends fees to FeeSplitter. * FeeSplitter apes the lockers' share into MEME500 for IndexLocker, sends the buyback share to the buyback wallet, and pays the treasury and creators. * The MTF token and its pool are not deployed yet (TBA). * IndexFactory creates new indexes and their pools (user-built indexes are switched off at launch). ## Contracts | Contract | Role | Who calls it | | --- | --- | --- | | IndexHook | Uniswap v4 hook for every index pool. Buys and sells the basket, holds the vault, mints and burns index tokens, enforces the 3% guard and the in-kind fallback. | Only the PoolManager calls the swap callbacks. Views are public. | | MTFRouter | Entry point for `ape` and `redeem`. Never spends another user's approval. | Anyone | | IndexFactory | Creates indexes and their pools, holds creator stakes, stores card metadata URIs. | Owner for official indexes; anyone for user-built indexes once switched on | | MemeRegistry | The approved list and token tiers. | Owner proposes (48h timelock) and delists (instant) | | IndexToken | The ERC-20 for each index, such as MEME500. | Only the IndexHook can mint and burn | | FeeSplitter | Receives fees (ETH on apes, MEME500 shares on redeems) and splits them: lockers, creator, buyback wallet, treasury. | Keepers convert the locker share (rate limited, minimum output); the buyback share is sent to the buyback wallet | | Buyback wallet | A public wallet that receives the buyback share. Once MTF launches, the team uses it to buy back and burn MTF manually, at its discretion. | Set at deploy; changing it requires a 48h timelock | | IndexLocker | Locks, reward streaming in the index token, early exit penalties streamed over 7 days, and decay to 1× after maturity. | Anyone (their own locks); anyone can kick a matured lock | | MTF token and pool | Planned platform token, fixed supply, 100% in a locked MTF/ETH pool at launch. | Not deployed yet: TBA | ## Admin powers and their limits | Power | Who | Delay | | --- | --- | --- | | List a meme or raise its tier | Registry owner | 48 hour timelock | | Delist or downgrade a meme (blocks apes, never redeems) | Registry owner | Instant | | Change MEME500 target weights | Owner | 48 hour timelock | | Change fee splitter configuration or addresses used by the hook | Owner | 48 hour timelock | | Change the buyback, backing or treasury wallet | Owner | 48 hour timelock | | Buy back and burn MTF | Team, from the buyback wallet | Manual and discretionary; every burn is on-chain | | Emergency pause of new apes | Owner (and a creator for their own index) | Instant; each can only clear its own pause; redeems stay open | | Change the ape limits (min and max per ape, deposit cap) | Owner | Instant. Today: 0.01 ETH min, 5 ETH max per ape, no deposit cap | | Appoint or remove keepers | Owner | Instant | | Process locker rewards | Keeper | Rate limited, minimum output | | Rebalance toward scheduled targets | Rebalance keeper appointed by the owner (none appointed yet) | Bounded size, minimum output, a few times per day at most | | Switch user-built indexes on | Factory owner | 48 hour timelock; switching off is instant | > **What no admin can do:** No admin role can move user deposits or locked tokens, and redeems cannot be paused. The contracts are not upgradeable. > **Who the owner is:** All five owned contracts (IndexHook, IndexLocker, IndexFactory, FeeSplitter, MemeRegistry) are owned by a single wallet, not a multisig. Its address is published on the [Contract addresses](https://mtf-meme500.vercel.app/docs/contract-addresses) page. Ownership can only move through a two-step transfer that the new owner must accept on-chain. --- # Security > The design properties that protect deposits and how the contracts were tested, with numbers. Source: https://mtf-meme500.vercel.app/docs/security ## Design properties * **Oracle-free minting.** Shares are minted from the smallest relative increase in holdings, so price manipulation cannot mint cheap shares or dilute holders. * **Holdings tracked in storage.** The vault counts what it bought, not its token balance, so tokens sent directly to the hook cannot skew accounting. * **Reentrancy guards** (transient storage) on every state-changing path. * **Per-leg 3% price impact guard** on every basket trade. * **User minimum output** on every ape and redeem through the router. * **In-kind fallback** so a failing pool cannot block a redeem. * **Timelocks** on listings, weight changes, fee routing changes and switching on user-built indexes. * **Keeper-only locker reward conversion** with a size cap, a once per block limit and a minimum output. * **Buyback wallet.** The buyback share accrues to a dedicated public buyback wallet set at deploy; changing it requires a 48h timelock. MTF buybacks start once MTF launches (TBA). * **Seed apes with a minimum share output** so a new index's first mint cannot be sandwiched. * **Ape limits.** Each ape is between 0.01 ETH and 5 ETH; there is no cap on total deposits. * **Non-upgradeable contracts.** The code that is deployed is the code that runs. ## Verification * **Automated tests:** 583 (559 unit, audit and stress tests plus 24 mainnet fork tests, all passing) * **Invariant calls:** 1,024,000 (8 invariants, random call sequences) * **Audit regression tests:** 58 (one or more per fixed review finding) * **Scale test:** 50 indexes × 10 tokens * **Fork round trip:** 1.19% to 1.22% (real mainnet pools) * **Unit tests** for the hook, router, factory, registry tiers, fee splitter, locker, metadata and the user index switch. * **Fuzz tests** over ape and redeem sizes and basket compositions. * **Stateful invariant suites**: 8 invariants checked over 1,024,000 random calls (256 runs × 500 calls deep per suite), covering vault solvency, redeems always working, and locker and fee accounting always adding up. * **Scale test** with 50 indexes × 10 tokens, plus extreme value and gas tests. * **Mainnet fork tests** on the real MEME500 pools: round trip cost 1.19% to 1.22%; with the live limits, a 5 ETH ape redeemed in full returned 4.94 ETH (98.8%), and ten 5 ETH apes in a row (50 ETH) all went through, and full redeems returned 49.4 ETH. * **Static analysis** with Slither, with every result triaged. ## Review An internal security review of the trading core, factory, registry, fees and locker identified issues that are now fixed and covered by 58 regression tests. This was an internal review, not an independent external audit. A public bug bounty is planned. --- # Risks > What can go wrong, stated plainly. Source: https://mtf-meme500.vercel.app/docs/risks > **Not a fund, not advice:** MEME500 is not an exchange traded fund and not a regulated fund. “ETF” is a metaphor. Nothing on this site is financial advice. * **Meme volatility.** Memes can fall 50% to 90% or more, and they often fall together. An index spreads single coin risk; it does not protect against a market wide drop. * **Smart contract risk.** The contracts are new code. Testing and review reduce risk but cannot rule out bugs, and a bug can mean lost funds. * **Liquidity and capacity.** Every ape and redeem trades on the memes' own pools. Large trades pay more slippage, each ape is capped at 5 ETH, and in a crash pool liquidity can thin out quickly. * **Design trade-offs.** Minting without an oracle protects holders but means the person aping must set a minimum output to avoid being sandwiched. Rebalancing depends on a keeper and is bounded; no rebalance keeper is appointed yet, so the basket drifts with prices for now. * **Single owner.** One wallet (not a multisig) owns the contracts. It can pause new apes, change the ape limits and appoint keepers instantly, and schedule listings, weight and fee routing changes behind a 48 hour timelock. It cannot move deposits or block redeems. * **Token listing risk.** A listed meme can change after listing (for example a new owner, a tax or a drained pool). Delisting is instant for apes, but tokens already held stay in the vault until sold. * **In-kind delivery.** If a pool fails during a redeem you receive that meme instead of ETH and must sell it yourself. * **Regulatory uncertainty.** Rules for tokens like MEME500 and MTF can change and may restrict access in some places. * **Launch status.** MEME500 is live on Ethereum mainnet (0.01 ETH minimum and 5 ETH maximum per ape, no cap on total deposits). The MTF token is not launched yet: date, address and fee routing are TBA. --- # Roadmap > What launches first and what comes next. No dates are promised. Source: https://mtf-meme500.vercel.app/docs/roadmap | Phase | What | Status | | --- | --- | --- | | Phase 1 | MEME500 launch on Ethereum mainnet. Ape, redeem and locking paid in MEME500. | Live | | MTF | Fair launch of the MTF token, then MTF buybacks from the buyback wallet. | TBA | | Phase 2 | User-built indexes from the approved list, and more lock tiers (6 month and 1 year locks are being considered). | Planned | | Phase 3 | Governance with MTF and expansion of the index family. | Planned | --- # Glossary > Short definitions of the terms used across MTF. Source: https://mtf-meme500.vercel.app/docs/glossary | Term | Meaning | | --- | --- | | Ape | Buy an index with ETH in one transaction. | | Redeem | Burn index tokens and receive your share of the basket as ETH (or in kind for a failed leg). | | Index token | An ERC-20 that represents a share of an index vault, such as MEME500. | | MEME500 | The official index: PEPE 35%, SHIB 35%, SPX6900 18%, MOG 7%, NEIRO 5%. | | NAV | Net asset value: the value of the vault's holdings divided by the index token supply. | | IndexHook | The Uniswap v4 hook that buys and sells the basket and mints and burns index tokens. | | Uniswap v4 hook | A contract that a v4 pool calls during swaps, letting the pool run custom logic. | | In kind | Receiving the meme token itself instead of ETH when its sale fails during a redeem. | | Price impact guard | A check that reverts any leg that would move its pool price by more than 3%. | | Lock tier | Sprint (7 days, 1×), Season (30 days, 1.5×) or Diamond (90 days, 3×). | | Reward weight | Amount locked × tier multiplier; your share of locker rewards is your weight over the total. | | Early exit penalty | 20% × time left / lock length, paid in MEME500 to the lockers who stay. | | MTF | The planned platform token, with a fixed supply of 1 billion. Launch: TBA. | | Buyback wallet | A public wallet that receives 15% of trade fees and 25% of yearly fees; once MTF launches, the team uses it to buy back and burn MTF manually. | | Buyback and burn | Buying MTF with the buyback wallet and sending it to the burn address. Manual and at the team's discretion. | | Approved list | The on-chain MemeRegistry of tokens an index may hold. | | Blue chip, Standard, Degen | Listing tiers with different market cap, liquidity and age thresholds. | | Keeper | An account the owner appoints for bounded maintenance: processing locker rewards (appointed) and rebalancing (none appointed yet). | | Timelock | A delay between scheduling a change and it taking effect (48 hours for listings, weights and fee routing). | | TBA | To be announced: not decided or not deployed yet. | --- # FAQ > Answers to the questions people ask most. Source: https://mtf-meme500.vercel.app/docs/faq ### Is MEME500 live? Yes. MEME500 is live on Ethereum mainnet: each ape is 0.01 to 5 ETH, with no cap on total deposits. Prices, holders, activity and the ape limits on this site are read live from the chain. The MTF token is not launched yet (TBA). Contract addresses are in the Docs. ### What do I actually get when I ape? MEME500: a token for your pro-rata share of the basket in the vault. You send ETH through MTFRouter in one transaction; inside that swap the IndexHook takes the 0.30% fee and buys PEPE, SHIB, SPX6900, MOG and NEIRO on their own Uniswap V2 / ShibaSwap pools, in proportion to what the vault already holds. No price oracle is used for minting, so it can’t be manipulated. ### What does it cost? MEME500 charges 0.30% per ape and 0.30% per redeem, plus 1% a year on deposits. Each leg also pays the 0.3% Uniswap V2 pool fee. In our mainnet fork test, 1 ETH → MEME500 → back to ETH returned 0.988 ETH (about 1.2% round trip). ### How big can one ape be? Each ape is 0.01 to 5 ETH, and there is no cap on total deposits (split bigger amounts into several apes). Beyond that, every leg is checked by a 3% price-impact guard, so the maximum ape is limited by the thinnest pool, roughly $100k today, because of SHIB’s on-chain liquidity. Bigger apes revert instead of filling at a bad price, and the app tells you to try a smaller amount. ### Can I always get out? Yes, redeem anytime. A 0.30% fee is taken in MEME500 before redeeming, the rest is burned and the hook sells your share of each meme back to ETH. If one meme can’t be sold, that token is sent to you in kind instead of the redeem failing. ### How does locking pay? Lock MEME500 for 7, 30 or 90 days at a 1×, 1.5× or 3× reward weight. Lockers share 40% of every ape/redeem fee, paid in MEME500: the fees are aped into MEME500 (fee free) and streamed to lockers over 6 hours. Lock MEME500, earn more MEME500, and it compounds. Claim anytime, extend to a longer tier anytime. The minimum lock is 0.001 MEME500. 7-day locks can never exit early; 30/90-day locks can, paying 20% × time left / lock length (in MEME500), streamed over 7 days to the lockers who stay. After a lock matures its weight drops to 1× until you unlock or relock. APR depends on volume, and nothing is promised. ### Who decides which memes can be listed? Only the team, through a 48-hour timelock, using three tiers. Blue chip: ≥ $10M market cap, ≥ $500k ETH liquidity, ≥ 30 days old. Standard: ≥ $1M, ≥ $50k, ≥ 7 days. Degen: ≥ $250k, ≥ $20k, ≥ 3 days, max 15% weight, and the index is flagged Degen. Every tier must pass: no tax or honeypot, no blacklist / pause / mint powers, verified source, top-10 holders ≤ 40%, and LP ≥ 80% locked or burned (blue chips exempt). MEME500 is blue-chip only. ### Can I make my own index? Soon. The platform launches with MEME500 only, and user-built indexes open after the MEME500 launch. The plan: pick 3 to 10 approved memes at 5 to 40% each (Degen memes max 15%), set a 0.10 to 1.00% trade fee and 0 to 2% yearly fee, lock $500 of MTF and seed it with at least 0.1 ETH. Seed shares are auto-locked for 30 days, and the creator earns 25% of the index’s trade fees. ### What is MTF? MTF is the planned platform token: a fixed 1,000,000,000 supply with no minting and a fair launch, with 100% of the supply in a one-sided Uniswap v4 MTF/ETH pool, liquidity locked forever and no team allocation. It is not launched yet: the launch date, contract address and final fee routing are TBA. Meanwhile 15% of MEME500 trade fees and 25% of its yearly fees already go to the public buyback wallet, for MTF buybacks once MTF launches. You don't need MTF to use MEME500: lockers are paid in MEME500. ### Is this an ETF? No. “ETF” is a metaphor. MEME500 is not an exchange-traded fund, not a regulated fund, and nothing here is financial advice. Memes are volatile and you can lose everything you put in. ### Can MEME500's price be pumped like a normal meme? No. Every ape buys the basket and every redeem sells it, so MEME500's price follows the value of the five memes it holds. See Pricing and NAV. ### What happens if one of the memes collapses? Its slice of NAV shrinks. If MOG went to zero, MEME500 would lose 7% (its weight), all else equal. The monthly review can remove it after two consecutive failed checks, and delisting blocks new apes immediately. ### How is the MTF launch protected? MTF is not launched yet (TBA). The plan is a fair launch: 100% of the supply in a one-sided MTF/ETH pool with liquidity locked forever, starting at a launch price equivalent to 1B MTF paired with 1 ETH, and for the first 15 minutes a wallet can hold at most 2% of supply (20M MTF). That limit then switches itself off permanently and is enforced in the token. The launch date, contract address and fee routing will be announced. ### Do I need MTF to use MEME500? No. You ape with ETH, redeem to ETH, and locking pays in MEME500. MTF launches separately; date TBA. --- # Contract addresses > Deployed contract addresses, and the mainnet addresses of the tokens and infrastructure MEME500 uses. Source: https://mtf-meme500.vercel.app/docs/contract-addresses ## MTF contracts | Contract | Address (Ethereum mainnet) | | --- | --- | | MTFRouter | `0x294C0eE27131192FFc1308757D3449Fff3D2b625` | | IndexHook | `0xc6f31200B27434f5d15Db9A13378a7F162782888` | | IndexLens | `0x366163a8FA739327186ea93b4F6C871375943548` | | IndexLocker | `0x370C4CE1F02b086ba6F2633e8d07543d7A928DF0` | | IndexFactory | `0x87E7072498485DBC7d54e55B866cf2B78683f23A` | | FeeSplitter | `0x617787Ab5de4B03C28A126B3102b716029E811f5` | | MemeRegistry | `0xaCc7D9fd194befDB046c025C653586447309Cb1d` | | MEME500 token | `0xCBE70f09a7957742CA1eD89178A7B7Ba59Ce75d3` | | MTF token | TBA | _MEME500 went live at block 26,158,377. TBA = to be announced: the MTF token is not deployed yet. Only trust addresses shown on this page._ ## Public wallets | Wallet | Address | Role | | --- | --- | --- | | Owner | `0xF76Dbee75f9D780Bd0496f91f3DebBcfc40CE535` | Owns IndexHook, IndexLocker, IndexFactory, FeeSplitter and MemeRegistry (single wallet, not a multisig) | | Treasury | `0xdD78f8B02c6266e3897eE14A76138218807111D1` | Treasury share of fees; MEME500's creator share | | Buyback wallet | `0x2f6C391F173B53937a48C52D0D43a1b84D16fC4E` | 15% of trade fees and 25% of yearly fees, for MTF buybacks once MTF launches | | Keeper | `0xC8f6efeDC0301e0240d4EFC948677910F0316286` | Processes locker rewards (no rebalancing) | | MEME500 backing wallet | TBA | Planned with MTF | ## MEME500 members (Ethereum mainnet) | Token | Address | Pool | | --- | --- | --- | | Pepe | `0x6982508145454Ce325dDbE47a25d4ec3d2311933` | Uniswap V2 PEPE/WETH | | Shiba Inu | `0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE` | ShibaSwap SHIB/WETH | | SPX6900 | `0xE0f63A424a4439cBE457D80E4f4b51aD25b2c56C` | Uniswap V2 SPX/WETH | | Mog Coin | `0xaaeE1A9723aaDB7afA2810263653A34bA2C21C7a` | Uniswap V2 MOG/WETH | | Neiro | `0x812Ba41e071C7b7fA4EBcFB62dF5F45f6fA853Ee` | Uniswap V2 NEIRO/WETH | ## Infrastructure (Ethereum mainnet) | Contract | Address | | --- | --- | | Uniswap v4 PoolManager | `0x000000000004444c5dc75cB358380D2e3dE08A90` | | WETH | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | | Uniswap V2 factory | `0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f` | | ShibaSwap factory | `0x115934131916C8b277DD010Ee02de363c09d037c` | ---