# DFM — The Fund Management OS > The operating system for onchain funds on Solana. DFM lets anyone launch an onchain fund: a basket of Solana tokens with declared weights, held by a vault that no person holds the key to. Anyone can deposit USDC into a fund and receive shares; a share is an equal claim on every token the vault holds. Shares can be redeemed at any time for USDC or for the tokens themselves. People and AI agents use exactly the same functions — from the app, or from an agent through DFM's MCP server. - MCP server `@dfm-fi/agent` 0.2.1916 (37 tools): `npx -y @dfm-fi/agent install` - Every fund operation runs from your app wallet, which signs for you so agents can act. Revoke it or export the key at any time. - Read-only by default. Never asks for, reads or stores a private key or seed phrase. Writes need DFM_AGENT_WRITE_ENABLED=true and a key you can revoke. - DFM runs on Solana mainnet. Deposits are real tokens and can lose value. Read https://app.dfm.finance/docs/security before depositing anything you cannot afford to lose. Below: the 21 pages of the docs at https://app.dfm.finance/docs, in their own order. Fees read from the factory contract on 2026-10-19 15:21 UTC; the live table is at https://app.dfm.finance/docs/fees. > Corrections where the docs below are behind the live code (as of the date above): (1) a USDC redemption through the zapper pays the exit fee in USDC at close; only a direct in-kind redemption pays it in shares. (2) The app wallet's server signer sends USDC, USDT, wSOL and SOL only to the wallet you signed in with; anything else you sign yourself in the app. (3) New app wallets are user-owned (Privy); DFM holds a policy-bound signer you can remove. (4) The API and skill live at https://app.dfm.finance/api/v2 (n2-api.dfm.finance is an old alias). (5) The MCP server has more tools than the docs list; the current list is in its README. --- # What is DFM _The operating system for onchain funds on Solana._ https://app.dfm.finance/docs/introduction ## In one paragraph DFM lets anyone launch an **onchain fund**: a basket of Solana tokens with declared weights, held by a vault that no person holds the key to. Anyone can deposit USDC into a fund and receive **shares**; a share is an equal claim on every token the vault holds. Shares can be redeemed at any time for USDC or for the tokens themselves. People and AI agents use exactly the same functions — from this app, or from an agent through DFM’s MCP server. ## What a fund is - **A basket.** Between 2 and 10 tokens, each with a target weight. The weights always add up to exactly 100%. - **A vault.** Program-owned accounts that hold the tokens. They move only through the program’s own instructions: deposit, redeem, rebalance, and the protocol’s emergency paths (see [Security and trust](https://app.dfm.finance/docs/security)). - **A share token.** An SPL token minted by the vault. Its supply grows with deposits and shrinks with redemptions. - **A creator.** The wallet that launched the fund. It chooses the basket, rebalances it, and earns part of the fees. It cannot send the vault’s tokens to a wallet. ## How DFM is built Three programs on Solana mainnet do the onchain work. Everything else is convenience around them. | Program | What it does | |---|---| | `dtf_vault` | The core. Creates funds, holds their tokens, mints and burns shares in kind, stores each fund’s policy. It never swaps. | | `dtf_zapper` | The USDC experience. Turns a USDC deposit into the basket (one Jupiter swap per token) before shares exist, and turns a redemption back into USDC. | | `dtf_rebalancer` | Lets a creator trade the fund’s tokens through Jupiter to move the holdings back to the target weights, inside fixed limits. | Around them: this web app, an API that prepares transactions and reads the chain, an app wallet that signs for you (see [App wallet](https://app.dfm.finance/docs/app-wallet)), and an agent you can talk to here or run yourself (see [Agent and MCP](https://app.dfm.finance/docs/agent)). Program addresses are in [Contracts and addresses](https://app.dfm.finance/docs/contracts). ## Design principles - **In kind.** Shares are minted against tokens the vault actually receives, and redeemed for a slice of tokens the vault actually holds. Swaps happen outside the vault, with the depositor’s own money, before a share exists. - **No oracle in the contracts.** The programs never price anything. Share counts come from token balances. Dollar values shown in the app are computed offchain (see [Share price and valuation](https://app.dfm.finance/docs/pricing)). - **The same fees everywhere.** Entry and exit fees are set once for the whole platform. No fund can add a management or performance fee. - **Manual rebalancing.** Nothing rebalances a fund on its own unless its creator turns on automation. - **An open universe.** There is no list of approved tokens. Any token that passes the contract’s checks and can be bought with USDC can be in a fund. - **Agents are first-class.** Every capability of the product is reachable by an AI agent, not added later. > **Real money** > > DFM runs on Solana mainnet. Deposits are real tokens and can lose value. Read [Security and trust](https://app.dfm.finance/docs/security) before depositing anything you cannot afford to lose. --- # Getting started _From signing in to your first deposit._ https://app.dfm.finance/docs/getting-started ## 1. Sign in Sign in with email, X, Telegram, Google or a Solana wallet such as Phantom. With a wallet you sign a message (Sign In With Solana): it is not a transaction and costs nothing. On your first sign-in DFM creates your **app wallet**, the wallet every fund operation runs from (see [App wallet](https://app.dfm.finance/docs/app-wallet)). ## 2. Add funds to your app wallet Open [Portfolio](https://app.dfm.finance/portfolio) → App wallet → Add funds. You need USDC to deposit and a little SOL for network fees and the temporary accounts a deposit opens (their rent comes back when the deposit closes). Three ways in: - Send from a wallet you hold — the only time your own wallet signs. - Buy with a card or from an exchange, straight to the app wallet address. - Send to the app wallet address from anywhere: an exchange, a hardware wallet, a phone. ## 3. Pick a fund The [Marketplace](https://app.dfm.finance/) lists every live fund, ranked by TVL, with filters by sector (Fun, RWA, AI, Stocks, Gaming, DeFi). A fund’s page shows its basket and target weights, what it actually holds right now, its fees, its holders, its rebalance history and its creator. ## 4. Deposit Enter an amount in USDC and confirm. Your app wallet signs; no wallet popup opens. The deposit buys every token of the basket and then mints your shares — usually within a minute. Fund cards also have **quick deposit** buttons with preset amounts you can edit. Details: [Depositing](https://app.dfm.finance/docs/depositing). ## 5. Follow it and exit when you want [Portfolio](https://app.dfm.finance/portfolio) shows your positions, their value and your P&L. Redeem from the fund’s page at any time, for USDC. Details: [Redeeming](https://app.dfm.finance/docs/redeeming). ## 6. Or launch your own [Launch a Fund](https://app.dfm.finance/create-vault) takes a name, a basket and its weights. See [Launching a fund](https://app.dfm.finance/docs/launching). --- # How a fund works _Basket, vault, shares, seed and creator._ https://app.dfm.finance/docs/funds ## The basket A fund declares its assets and a target weight for each, in basis points (1 bp = 0.01%). The weights must add up to exactly 10,000 — 100% — for the fund to exist. In the app a basket has between 2 and 10 assets; the contracts themselves allow up to 20. USDC can be one of the assets. A fund can also keep USDC declared at 0% as a **cash sleeve**: a place to settle redemptions that the next rebalance spends back into the basket. ## The vault Each asset sits in a token account owned by the vault’s program address. Nobody holds a private key for it. Tokens leave the vault only through program instructions: - a redemption, which pays every asset out pro rata to the person redeeming; - a rebalance, which can only swap one declared asset of the fund into another declared asset of the same fund; - the protocol’s emergency instructions, described in [Security and trust](https://app.dfm.finance/docs/security). The creator has no instruction that sends the vault’s tokens to a wallet. ## Shares Shares are an SPL token minted by the vault. Owning 1% of the shares in circulation means owning 1% of every token in the vault. Shares sit in your app wallet next to your USDC and SOL. ## The seed At launch, the creator’s app wallet pays a seed (currently 0.1 USDC). The seed mints a locked seed share held by a program account. It cannot be redeemed while the fund is live, and it is left out of every share-price calculation. It exists so that the first depositor of a fund cannot manipulate the share price against everyone after them. The protocol can recover it only when the fund is being wound down and nobody else holds a share. ## Targets and holdings Targets are what the fund promises to hold; holdings are what it holds right now. Prices move every day, so holdings drift away from targets. A fund’s page shows both, and the creator brings them back together by rebalancing (see [Rebalancing and editing](https://app.dfm.finance/docs/managing)). Deposits and redemptions always follow the holdings, not the targets: that is what keeps them fair to everyone already in the fund. ## The creator The wallet that launched a fund is its **admin**. It can rebalance, change the basket and weights, set the fund’s policy, and hand the admin role to another wallet (a two-step transfer: the new admin has to accept). It earns its share of every entry and exit fee. It cannot change the fees, pause the fund or close it — those are protocol powers. --- # Depositing _How USDC becomes shares, step by step._ https://app.dfm.finance/docs/depositing ## The three steps 1. **Open.** Your USDC moves into an escrow account owned by the zapper program. The whole plan is fixed in that moment and signed: exactly how much USDC each token’s purchase spends, and the minimum amount of each token it must receive (from your slippage setting). The entry fee stays in the escrow. 2. **Buy each token.** Each asset is bought in its own transaction through Jupiter. A keeper runs these transactions, but it cannot change the plan: a purchase that would receive less than its minimum fails. 3. **Close.** When every token has been bought, they are deposited into the vault in kind, your shares are minted, and the entry fee is paid to the creator and the platform. The escrow closes and its rent comes back to you. All three steps are signed by your app wallet. Nothing opens in your own wallet. ## How many shares you get For a fund that already has holders, the vault mints: ``` shares = min over held assets i of ⌊ deposited_i × basket_supply / vault_balance_i ⌋ ``` Each token counts only up to the amount that keeps the fund’s proportions; anything above that is returned to your app wallet at close. This makes a deposit proportional by construction: it can never dilute the people already in the fund. The first deposit into an empty fund sets the share price at about $1.00. ## Slippage Slippage is how much worse than the quote a purchase may land. The app starts at 0.5% and lets you change it; the contract refuses anything looser than 10% per token. Because the purchases happen in your escrow, with your USDC, before any share exists, your slippage is yours alone — it never lands on the fund’s other holders. ## If a deposit stalls A purchase can fail to land if the market moves past your minimum. You then have two ways out, both signed by your app wallet: - **Loosen the minimums.** Allowed once the deposit has been stuck for a minute. It can only loosen, only for tokens not yet bought, and never past the 10% cap. - **Cancel.** Returns whatever the escrow holds right now — the USDC not yet spent and the tokens already bought — plus the entry fee. You can cancel at any time. Anyone else can trigger a cancel only after the deposit has expired (its window is set at open, between 1 and 30 minutes), and even then everything goes back to you. ## What you need - USDC in your app wallet for the amount. - A little SOL for network fees and for the rent of the temporary accounts the deposit opens. The rent comes back at close. ## Depositing tokens directly Anyone can also deliver the basket’s tokens directly to the vault program and receive shares, without USDC or swaps. The same share formula applies, and the entry fee is charged in shares instead of USDC. --- # Redeeming _How shares become USDC — or tokens — again._ https://app.dfm.finance/docs/redeeming ## The three steps 1. **Open.** Your shares are burned. The exit fee is taken in shares at this moment and transferred to the creator and the platform. A pro-rata slice of every token in the vault moves into an escrow: ``` out_i = vault_balance_i × shares_burned / basket_supply ``` 1. **Sell each token.** Each token is sold for USDC through Jupiter, in its own transaction, against a minimum you signed. 2. **Close.** The USDC goes to your app wallet. It must clear the minimum USDC you set when you opened. ## A token that cannot be sold If one token has no route to USDC within your slippage — an illiquid token, a paused market — that part is marked as unsellable and paid to you **in kind**: you receive the token itself, and USDC for everything else. A redemption never gets stuck on one illiquid asset. ## Cancelling Cancel returns whatever the escrow holds at that moment: the tokens not yet sold and the USDC already received. Your shares stay burned — you are holding your slice of the fund directly. ## When redemptions can stop Pausing one fund stops new deposits into it, never redemptions. Redemptions stop only if the protocol pauses the whole platform or puts a fund in emergency recovery — both described in [Security and trust](https://app.dfm.finance/docs/security). ## Redeeming for tokens directly Anyone can call the vault program directly to burn shares and receive the tokens in kind, with no swaps and no keeper. The exit fee is charged in shares exactly the same way. --- # Share price and valuation _What a share is worth and where the number comes from._ https://app.dfm.finance/docs/pricing ## The formula ``` basket_supply = total_supply − locked_seed_shares share_price = gross_asset_value / basket_supply ``` `gross_asset_value` is the dollar value of every token the vault holds. The locked seed share is left out of the supply, as it is left out of every mint and every redemption. The same basis is used everywhere — the share price you see, the minimums a deposit is planned with, and the agent’s answers — so two screens cannot disagree about what a share is worth. ## No prices in the contracts The programs never read a price. Minting and redeeming are arithmetic on token balances, which is why a price feed going down cannot stop a redemption. Dollar values — share price, TVL, returns, P&L — are computed offchain by the API: each balance the vault holds onchain, times a market price. Charts are offchain estimates built the same way. ## Why in kind matters for the price - A deposit buys its tokens in its own escrow before shares exist, so its slippage cannot lower the share price for anyone else. - A redemption takes its slice of the tokens out and sells them outside the vault, so it does not sell the other holders’ tokens. - Between those two, only market prices and the creator’s rebalances move the value of a share. --- # Fees _What you pay, when, and to whom._ https://app.dfm.finance/docs/fees ## The fees | Fee | Rate | Charged | |---|---|---| | Entry | 0.75% | On every deposit, when the shares are minted | | Exit | 0.75% | On every redemption, when the shares are burned | | Split of entry and exit fees | 50% creator / 50% platform | Paid to the fund's creator and to the platform in the same instruction | | Fund creation | 0 USDC | Once, at launch | | Launch seed | 0.1 USDC | Once, at launch — locked in the fund, not a fee | | Management | None | — | | Performance | None | — | ## How they are charged - **Entry fee.** Taken from your USDC when a deposit opens and kept in its escrow. It is paid only when the shares are minted; a cancelled deposit gets it back. - **Exit fee.** Taken in shares at the moment shares are burned. Every way out of a fund — USDC redemption, cancel, unsellable tokens, a direct redemption — goes through that burn, so no exit skips it. The fee shares are transferred, not burned: they stay backed by the basket. - **Direct deposits and redemptions** through the vault program pay the same rates, in shares. - **The split.** Each fee is divided between the fund’s creator and the platform, in the same instruction. ## Who sets them Fees are set once, in the factory contract, for the whole platform. A creator cannot set, raise or lower the fees of their fund, and there is no management or performance fee anywhere. The protocol can change the rates for all funds at once; the contract caps entry and exit fees at 10% each. ## Other costs - Solana network fees, paid in SOL from your app wallet. - Rent for the temporary accounts a deposit or redemption opens, returned when it closes. - The price impact of each Jupiter swap, which is part of your slippage, not a DFM fee. - At launch: the creation fee and the seed above, plus SOL for the rent of the fund’s new accounts. - Buying and selling tokens in your app wallet is not a fund operation and has its own fee: see [Trade](https://app.dfm.finance/docs/trade). - The in-app agent spends **platform credits** — model, market data and tools. Credits are separate from fund fees and never touch a fund. --- # Launching a fund _Name, basket, weights, deploy._ https://app.dfm.finance/docs/launching ## Before you start - Be signed in, with an active app wallet. - Have in your app wallet the creation fee (0 USDC) and the seed ( 0.1 USDC) in USDC, plus some SOL for the rent of the fund’s accounts. A fund can only be launched from an app wallet. Deploy never opens a popup in your own wallet. ## The steps 1. **Name and symbol.** The symbol has at most 10 characters; leave it empty and one is suggested from the name, ending in `-DFM`. Names and symbols must be unique among live funds, and are reserved while a launch is in progress. 2. **Category, description and avatar.** The avatar can be uploaded or linked. 3. **Choose assets.** Browse the tabs (All, Hot, Traded, RWA, Fun), search by name or symbol, or paste any token address. See [Which tokens can be in a fund](https://app.dfm.finance/docs/asset-universe). 4. **Set the weights.** They must add up to exactly 100%. Changing one asset never changes another; the screen shows how much is left to place, and **Split Equally** spreads 100% evenly. 5. **Deploy.** Your app wallet creates the vault, its share token and the locked seed, writes the token metadata so wallets show the fund’s name, and sets up its rebalancer and its policy. ## After launch The fund appears on the Marketplace and anyone can deposit. You are its admin: you manage it from the fund’s page (see [Rebalancing and editing](https://app.dfm.finance/docs/managing)), and you can also launch and manage funds through the agent. Launching a fund that keeps money in it earns XP (see [XP and referrals](https://app.dfm.finance/docs/xp)). --- # Rebalancing and editing _Keeping holdings on target, changing the basket, handing the fund over._ https://app.dfm.finance/docs/managing ## Rebalancing The fund’s manage screen shows each asset’s target next to its live weight. **Rebalance** moves the holdings back to the targets with Jupiter swaps, signed by your app wallet. The app lets a rebalance use up to 3% slippage — lower than for deposits, because a rebalance spends the fund’s money and its holders carry the slippage. Every rebalance is recorded onchain and listed in the fund’s rebalance history. On every rebalance swap the contract checks that: - the output lands in a declared asset of the same fund — nothing can be swapped out of the basket; - the route touches no fund account other than the declared input and output; - the amount received clears a minimum measured after the swap; - the fund’s own policy limits are respected (see [Fund policy](https://app.dfm.finance/docs/policy)). ## Speed limits | | Delegated key (automation) | Creator signing directly | |---|---|---| | Share of a position sold per transaction | At most 50% | No limit — a full sale is needed to remove an asset | | Time between rebalances | At least 5 seconds | Only the fund policy’s own limit | | Rebalances per day | At most 48 | Only the fund policy’s own limit | These ceilings are compiled into the rebalancer. In the current version they bind delegated keys, not the creator: a creator rebalancing their own fund is limited only by the policy they set. ## Editing the basket - Add an asset, change the targets, or remove one, then save. The new weights must add up to 100%. - Removing an asset needs its balance in the vault at zero, so the app first sells it into the rest of the basket. Pressing minus on a row does both. - A USDC cash sleeve stays declared at 0% and is never a row to remove: the next rebalance spends it back into the basket. - Saving brings the holdings in line with the new targets, so the fund can keep accepting deposits right away. ## Handing the fund over The admin role moves in two steps: the current admin names a new wallet, and that wallet accepts. Until it accepts, nothing changes. ## Automation A creator can let a key rebalance on its own when drift crosses a threshold or on a schedule. That key can only rebalance, inside the delegated-key limits above. See [Agent and MCP](https://app.dfm.finance/docs/agent). --- # Fund policy _The limits a creator writes into the fund, and how they change._ https://app.dfm.finance/docs/policy ## What a policy is Every fund carries a policy account onchain: limits its creator commits to. The contracts check them on every basket change and every rebalance — they are not a promise in a description. | Limit | What it does | |---|---| | Asset mode | Open, allowlist only, blocklist, or both — which tokens the basket may ever contain. | | Maximum and minimum weight | No asset above, or (if held) below, a set weight. | | Minimum and maximum assets | How many tokens the basket must and may hold. | | Rebalance size | The most total weight one rebalance may move. | | Time between rebalances | A minimum wait after each rebalance. | | Rebalances per day and per week | Up to 10 per day and 30 per week at most. | | Launch blackout | No rebalancing for a period after launch, up to 30 days. | | Fee lock | A one-way switch that records the fee rates permanently. It can never be turned off. | ## Changing a policy A change is proposed and then accepted. The proposal stores only a fingerprint of the new policy, and the acceptance must submit exactly the same content, so what is accepted is what was proposed. > **In the current version** > > A creator can propose and accept a change in the same block: there is no waiting period. The contracts include a 7-day window between proposal and acceptance — time for holders to leave before a change — but it is switched off in this version, where each creator is treated as running their own fund. Read a policy as the creator’s current rules, which they can change at any time. --- # Which tokens can be in a fund _The open universe, the contract’s checks, and how to find tokens._ https://app.dfm.finance/docs/asset-universe ## No listing DFM keeps no list of approved tokens. A token can be in a fund if it passes the contract’s checks when the fund is created or edited, and if Jupiter can buy it with USDC — every deposit buys every asset with USDC, so a token without a USDC route would make the fund impossible to deposit into. The app does not offer such a token. ## What the contract checks | Token | Accepted? | |---|---| | Standard SPL token | Yes | | Token with a freeze authority (USDC, tokenized stocks, gold…) | Yes, in the current version. The app marks it: the issuer could freeze the vault’s account and block redemptions of that asset. | | Token-2022 with only metadata extensions | Yes | | Token-2022 with issuer powers (permanent delegate, confidential transfers, scaled amounts) | Yes, in the current version — the same class of risk as a freeze authority, and marked the same way. This is what makes tokenized stocks possible. | | Token-2022 that can be paused, or whose new accounts are frozen by default | Only while it is not paused and new accounts are not frozen at the moment of the check. | | Token-2022 with a transfer hook | Only if no hook program is installed. | | Token-2022 with a transfer fee or any extension the program does not recognise | No | | Wrapped SOL | No — it collides with swap routing. Use a liquid staking token such as JitoSOL. | The check runs when an asset is added. An issuer can still pause or freeze later; that is the risk the marks describe. ## Finding tokens The asset picker of Launch a Fund has the same five tabs as [What’s Hot](https://app.dfm.finance/whats-hot) (All, Hot, Traded, RWA, Fun), all read from Jupiter. See [What’s Hot](https://app.dfm.finance/docs/whats-hot) for what each tab shows. Search finds any token by name, symbol or address, and a pasted address is checked on the spot. ## What the marks on a token mean - **Not eligible** — the vault program refuses this token; the reason is shown. - **No USDC route** — Jupiter cannot buy it with USDC right now, so a deposit could not buy it. - **Unverified** — the chain has not been read for this token yet; it is checked when you pick it. > **Open means open** > > Anyone can put any token that passes these checks in a fund. Passing them says nothing about whether a token is worth holding. Check its liquidity, holders and issuer before adding or buying it. --- # Trade _Buy and sell any token from your app wallet, without leaving DFM._ https://app.dfm.finance/docs/trade ## What it is Besides investing in funds, you can buy and sell single tokens directly in DFM. A trade converts one token your [app wallet](https://app.dfm.finance/docs/app-wallet) holds into another, and the result lands back in the same app wallet. ## Where you trade - **Buy on [What’s Hot](https://app.dfm.finance/whats-hot).** Every token in the table has a Buy column. Its two amounts are your quick-buy amounts (the same ones as the Marketplace’s quick deposit, editable with the pencil above the table): one click buys that much of the token with USDC, with no confirmation step. The arrows open the Swap panel to choose any other amount. - **Swap in [Portfolio](https://app.dfm.finance/portfolio) → App wallet.** Every token you hold, SOL included, has a Swap button. It opens the Swap panel with that token to sell, into USDC by default; pick any other token to receive instead. This is how you sell. ## How a trade is routed Liquidity comes from [Jupiter](https://jup.ag), which looks across Solana’s DEXs and picks the route with the best output for the amount. The Swap panel shows the quote before you confirm, and the server takes a fresh quote at the moment it builds the trade, so the fill can move within your slippage. - Slippage: 0.5% by default, up to 10%. Quick buys use the slippage set next to your quick-buy amounts. - Before anything is signed, the app wallet’s guard simulates the trade and refuses it unless the bought token lands in your own app wallet, for at least the quoted minimum. - Your app wallet signs it in the browser, with no wallet popup. If the trade cannot be completed (no route, not enough USDC), nothing is sent and the reason is shown. ## Fees Each trade pays a DFM fee of 0.2% of the amount. When one side of the trade is USDC, SOL or USDT, the fee is taken in that token inside the quote, so the amount shown to receive is the amount that arrives. For a pair with none of the three, the same rate is charged separately, in SOL. On top of it: Solana network fees, rent for a token account the first time you hold a token, and the price impact of the route, which is part of your slippage. --- # Marketplace _Every live fund on DFM, to compare and invest in._ https://app.dfm.finance/docs/marketplace ## What it shows The [Marketplace](https://app.dfm.finance/) lists every live fund. ALL ranks them by TVL, HOT by their move in the last 24 hours, and Newest by launch date. The sector row filters by FUN, RWA, AI, STOCKS, GAMING and DEFI, and search finds a fund by name, symbol or address. Two views: Gallery, one card per fund, and Table, to compare share price, age, holders and the 24h, 7d and all-time return side by side. Every column of the table sorts. ## Investing from it Each fund shows your quick-deposit amounts: one click deposits that much USDC from your app wallet, with the slippage set next to them. Click a fund for its page — basket, holdings, fees, holders and creator — and to deposit any other amount (see [Depositing](https://app.dfm.finance/docs/depositing)). --- # What’s Hot _The tokens moving right now, and how to read them._ https://app.dfm.finance/docs/whats-hot ## The tabs The tokens moving right now, in five tabs, all read from Jupiter: | Tab | What it shows | |---|---| | All | The top tokens by real activity in the last 24 hours (Jupiter’s organic score). | | Hot | The top tokens by price movement in the last 24 hours. | | Traded | The top tokens by volume in the last 24 hours. Volume includes bots; All does not. | | RWA | Every verified token Jupiter tags as a tokenized real-world asset: stocks, ETFs, commodities and pre-IPO shares, deepest market first. | | Fun | Memecoins from the activity ranking, then graduated pump.fun tokens. | Search finds any token by name, symbol or address, and the tabs never show tokens Jupiter itself flags as duplicates or deprecated. Click a row for the token’s details: holders, concentration, mint and freeze authority, and whether it can be part of a fund (see [Which tokens can be in a fund](https://app.dfm.finance/docs/asset-universe)). > **Check before you buy** > > Anything can be bought here, including tokens with a freeze authority or concentrated holders. The row’s details are there to check before you buy. ## Buying from it Every row has a Buy column: your two quick-buy amounts buy in one click, and the arrows open the Swap panel for any other amount. See [Trade](https://app.dfm.finance/docs/trade) for how a trade is routed and what it costs. --- # Social _The people on DFM: what they hold, how they rank and what they are doing now._ https://app.dfm.finance/docs/social ## What it shows [Social](https://app.dfm.finance/social) opens on the best-ranked profile. The panel on the left has a search box and two tabs: - **Search** — find a person by name, @handle or wallet, or a fund by name, symbol or address. - **Ranking** — fund operators and investors, ranked. - **Feed** — buys, sells and theses as they happen, from everyone or only from the people and funds you follow. ## A profile Every person has one profile: their value over time, open and closed positions with their P&L, their activity, the funds they run, their theses and their XP. Follow someone to see what they do in your Feed. --- # XP and referrals _What earns XP, how the season closes, and how referrals work._ https://app.dfm.finance/docs/xp ## What earns XP XP is a record of points per person. These are the amounts paid right now: The XP each action earns is read live: https://app.dfm.finance/docs/xp Points are whole numbers rounded down. Each point comes from an action completed onchain and is recorded next to the transaction that produced it, so it is paid once and can be audited. Your sign-in wallet and your app wallet count as one person. The ranking is on the [XP](https://app.dfm.finance/xp) page. ## What does not earn XP - Withdrawals. XP is earned going into a fund, not out of it; leaving never takes XP away. - Cancelled or failed deposits, and anything that did not complete onchain. - Funds that close or drop below the holding condition before it is met. - Activity from before the season started. ## The season and the snapshot - Season 0 started with every balance at zero. It has no announced end date. - At the close DFM takes a snapshot of every person’s XP, and announces the close after taking it. The snapshot is final; XP earned afterwards counts for the next season. A verifiable summary of it is published. - Before XP is used for anything, DFM may require a linked X account and a first deposit, count only deposits that stayed a minimum time, and exclude linked identities or activity meant to game the system. - XP cannot be transferred or sold, and DFM promises it no value or conversion. Any reward tied to a season is announced separately, with its own terms. ## Referrals - Your link is in [Referral](https://app.dfm.finance/referral). Someone who signs in through it is your referral — the first link a wallet uses is the one that counts, and it cannot be changed later. - You earn a share of the XP your referrals earn by depositing, on top of theirs. They lose nothing. - One level only: you earn on the people you refer, not on the people they refer. - Nobody can refer themselves, from any of their wallets. Referrals pay XP only, never cash. --- # App wallet _The wallet DFM creates for you, who signs what, and your controls._ https://app.dfm.finance/docs/app-wallet ## What it is A Solana wallet created for you at your first sign-in, which DFM’s server signs with on your behalf. It holds your USDC, your SOL and your fund shares, and every fund operation runs from it: launching, depositing, redeeming, rebalancing, editing a basket or a policy, cancelling a deposit. If you signed in with a wallet of your own, that wallet is your identity, never the account. ## Who signs what If you signed in with a wallet of your own, it signs exactly two things: 1. the sign-in message; 2. a transfer you choose to make into your app wallet. Everything else is signed by the app wallet, server-side. That is what lets the agent act for you. ## Money out Withdrawals go to a **withdrawal wallet** you save in [Settings](https://app.dfm.finance/account) → App wallet. Your sign-in wallet is never a withdrawal destination. Each asset in Portfolio is withdrawn to the saved wallet; SOL is sent down to what the account needs to stay open. ## Your controls - **Export the private key.** Take the key and use the wallet anywhere. Exporting is final: an exported key ignores every cap, and DFM keeps signing with the same wallet. - **Revoke.** A kill switch: DFM stops signing and sends your balance to you. - **Re-arm.** Turn the app wallet back on after a revoke. - **Caps.** Limits you set on what the server may sign. No caps means no limit. > **What this means for custody** > > The app wallet is a deliberate trade: no popups, and agents that can act for you — in exchange for DFM’s server holding the power to sign for that wallet. Keep in it what you are using, and use revoke or export whenever you want that power back. --- # Agent and MCP _The in-app agent, connecting your own agent, and automation._ https://app.dfm.finance/docs/agent ## The in-app agent The Agent panel answers about funds, prices and your portfolio, and can act: launch a fund, deposit, redeem, rebalance, change a basket or a policy, withdraw. It acts through your app wallet with the same rules as the buttons on screen. You can shape it in [Agent](https://app.dfm.finance/agent): its identity, its knowledge, its rules, what it remembers about you, and skills you import from a `skill.md` link. It runs on platform credits. It treats everything it reads — fund names, descriptions, web pages, token metadata — as data, never as instructions. Text inside a fund description cannot make it move money. ## Connecting your own agent [@dfm-fi/agent](https://www.npmjs.com/package/@dfm-fi/agent) is DFM’s MCP server. Any MCP client — Claude, Cursor and others — can run it: ``` npx -y @dfm-fi/agent install ``` Authenticate it with an API key from [Agent → Keys](https://app.dfm.finance/agent?tab=KEYS); a key can be revoked at any moment. Tools that move money also require `DFM_AGENT_WRITE_ENABLED=true` in the agent’s settings. Fund operations always run through your app wallet, never through a key on your machine. | Tools | What they do | |---|---| | `list_dtfs · get_vault · get_portfolio` | Read funds, a fund’s basket, weights, drift and fees, and your positions. | | `discover_tokens · get_token_price` | Find tokens and prices. | | `launch_vault · deposit · redeem` | Launch a fund, deposit USDC, redeem shares. | | `rebalance_to_targets · update_vault_assets · update_vault_policy` | Manage a fund you run. | | `app_wallet · app_wallet_fund · app_wallet_withdraw · withdraw_asset` | Read and move your app wallet’s balances. | | `zap_status · swap_quote · swap` | Follow a deposit or redemption; swap tokens in the app wallet. | The agent can also read DFM’s skill file at [skill.md](https://n2-api.dfm.finance/api/v2/agent/skill.md), which teaches it the product. ## Autonomous rebalancing 1. **Arm.** You sign the creation of a session key that can only rebalance your fund. It can never deposit, withdraw or move principal out of the basket, and it is bound by the delegated-key limits: at most 50% of a position per transaction, at least 5 seconds apart, at most 48 rebalances a day, only into the fund’s own assets. It expires after 30 days at most. 2. **Set up.** Choose one trigger: rebalance when drift passes a threshold, or on a schedule. 3. **Disarm.** Revokes and closes the key and pauses the automation. You can arm again at any time. --- # Security and trust _What the contracts guarantee, what the protocol can do, and the risks._ https://app.dfm.finance/docs/security ## What the contracts guarantee - Shares are minted only against tokens the vault receives, and in proportion to what it already holds. - A redemption pays a pro-rata slice of every token; it needs no price and no permission. - A deposit’s plan and minimums are fixed when it opens; a keeper cannot change them. - A rebalance can only move value between the fund’s own declared assets. - No instruction lets a creator send the vault’s tokens to a wallet. - Fees are the same for every fund and can never exceed 10% on entry or exit. ## What the protocol can do One protocol authority — a single key today, not a multisig — holds the platform’s emergency powers. The contracts let it: | Power | Effect | |---|---| | Pause one fund | Stops new deposits into that fund. Redemptions continue. | | Pause the whole platform | Stops every fund operation, redemptions included. | | Emergency recovery on a fund | Freezes redemptions, and lets the protocol withdraw all of that fund’s assets — basket included — to an address it controls. This is the custody switch for an incident. | | Close a fund | Winds it down and recovers its accounts’ rent; with holders still in, only under emergency recovery. | | Change platform fees and launch costs | For all funds at once, up to the 10% cap; launch costs only for future launches. | | Run the keeper | Executes the purchases and sales of deposits and redemptions, inside the plan each user signed. | The protocol cannot rebalance a fund: that power belongs to its creator. ## Guards switched off in this version The contracts contain a set of protections for depositors that are compiled out of the current version, which treats each fund as a tool its creator runs: - no waiting period on policy changes or basket edits; - no speed limits on a creator rebalancing directly (delegated keys stay limited); - tokens with a freeze authority or issuer powers are accepted, and marked. A future version for funds open to the public can switch them back on without moving any fund. ## Risks - **Smart contracts.** The programs have been reviewed and audited internally. That is not the same as being safe. - **Market.** The tokens in a fund can lose value, all of it. - **Creator.** A creator can choose badly, rebalance badly, or change the basket and the policy at any time. The contracts bound where value can go, not whether decisions are good. - **Issuers.** A token whose issuer can freeze, pause or move balances can block that asset in a fund. - **Liquidity.** An illiquid token can make deposits fail and redemptions pay in kind. - **Custody.** DFM’s server can sign for your app wallet (see [App wallet](https://app.dfm.finance/docs/app-wallet)). - **Displayed values.** Share prices, TVL and returns are offchain estimates; the onchain truth is the token balances. ## What DFM does not do - No price oracle in the contracts. - No management fee, no performance fee, no per-fund fees. - No automatic rebalancing unless a creator arms it. - No curation of tokens, no liquidity floors, no depositor allowlists. --- # Contracts and addresses _Program IDs on Solana mainnet and other references._ https://app.dfm.finance/docs/contracts ## Programs on Solana mainnet | Program | Address | |---|---| | `dtf_vault` | [`96garpVfmLBkvK33fh7f5edfe85UbhmZ6K67freykxsC`](https://solscan.io/account/96garpVfmLBkvK33fh7f5edfe85UbhmZ6K67freykxsC) | | `dtf_zapper` | [`HVvK9P3yqJAS5rsWPr9J7EHhYFSmoAi2V1HmiL75RQQQ`](https://solscan.io/account/HVvK9P3yqJAS5rsWPr9J7EHhYFSmoAi2V1HmiL75RQQQ) | | `dtf_rebalancer` | [`CpaZpZrugfc4MC4h3hoFRYrSZgd7G3puzqVZ8a4KMpGH`](https://solscan.io/account/CpaZpZrugfc4MC4h3hoFRYrSZgd7G3puzqVZ8a4KMpGH) | The program names keep the old name for a fund; the product calls them funds. ## Programs and tokens DFM uses | | Address | |---|---| | Jupiter v6 (every swap) | `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4` | | USDC | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` | ## For developers and agents - API: `https://n2-api.dfm.finance/api/v2` - MCP server: [@dfm-fi/agent](https://www.npmjs.com/package/@dfm-fi/agent) - Summaries for language models: [llms.txt](https://app.dfm.finance/llms.txt) and [llms-full.txt](https://app.dfm.finance/llms-full.txt) --- # Glossary _The words used across DFM._ https://app.dfm.finance/docs/glossary ## Terms | Term | Meaning | |---|---| | Fund | A basket of tokens with target weights, held by a vault, with its own share token. | | Basket | The assets of a fund and their target weights. | | Basis point (bp) | 0.01%. Weights add up to 10,000 bps. | | Share | The fund’s token. Each share is an equal claim on everything the vault holds. | | Basket supply | Shares in circulation, excluding the locked seed share. | | Seed | The amount paid at launch that mints a locked share, so the first depositor cannot move the price. | | In kind | Paid in the tokens themselves rather than in USDC. | | Escrow | The temporary program account a deposit or redemption runs through. | | Leg | One token’s purchase or sale inside a deposit or redemption. | | Keeper | The service that runs the legs. It cannot change what you signed. | | Drift | How far a fund’s holdings have moved from its target weights. | | Rebalance | Swapping between a fund’s own assets to bring holdings back to target. | | Cash sleeve | USDC declared in the basket, usually at 0%, used to settle redemptions. | | Policy | Limits a creator writes into the fund, checked by the contracts. | | Creator / admin | The wallet that launched a fund and manages it. | | App wallet | The wallet DFM creates for you and signs with on your behalf. | | Session key | A key limited to rebalancing one fund, used by automation. | | TVL | Total value locked: the dollar value of everything a fund holds. | | GAV | Gross asset value: the same, used in the share price formula. | | MCP | Model Context Protocol: the standard AI agents use to call DFM’s tools. |