> For the complete documentation index, see [llms.txt](https://docs.trover.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trover.tech/engineering/token-economics.md).

# Trover token economics

Trover runs on one token, TROVER, launched on Pons (Robinhood Chain). There is no NFT collection any more: the planet collection, its renderer, the progression registry and the SeaDrop base were removed on 2026-09-08 and the public page at `/tokenomics` describes only what is below. This document is the source of truth for the numbers; the page reads its live counters from `GET /v1/token/economics`.

## The split

Every confirmed fee the protocol earns goes through `TroverRevenueRouter` and is split four ways at receipt. The split is stored per source (`Split{holderBps, leagueBps, burnBps}` for `nft_creator_earnings`, `token_fees`, `bot_fees`; treasury is the remainder) so it can be tuned with `setSplit`, but launch is uniform:

| Share | Contract                              | Purpose                                                |
| ----- | ------------------------------------- | ------------------------------------------------------ |
| 35%   | `TroverEthDistributor` (holder vault) | buys tokenized stocks and funds hourly holder tranches |
| 15%   | `TroverLeagueVault`                   | the twice-daily paper-trading league pool              |
| 20%   | `TroverBuybackBurn`                   | buys TROVER on-chain and sends it to `0x…dEaD`         |
| 30%   | treasury                              | infrastructure, providers, development                 |

Rules the router enforces: it never reverts a receipt (a rejecting recipient's share is credited to `owed[recipient]` and can be `withdrawOwed` or `reassignOwed`); `pause` defers everything instead of bouncing it; `sweep` returns only what exceeds `totalOwed`. Only received revenue is routed. Fee sources today: DEX swap and stock-trade fees, bot execution fees settled by `TroverAtomicFeeExecutor` in the same transaction, and any marketplace or referral income once actually received.

## Holders: stocks, weighted by balance

* **Snapshot**: hourly, on-chain balances of TROVER. Contracts and the treasury are excluded.
* **Minimum**: 100,000 TROVER. Below it a wallet is not in the tranche.
* **Weight**: balance only. `share = balance ÷ Σ eligible balances`. No multipliers, levels, NFTs or lockups; two wallets with the same balance get the same allocation.
* **Asset**: the holder share buys the configured stock tokens (the existing treasury target list) and funds a `TroverStockDistributor` tranche with the Merkle root of that hour's allocations.
* **Claim window**: seven days. Anyone may relay a claim; each proof fixes recipient and amount. Expired tranches `releaseExpired` then `recoverUnreserved` back to the treasury.

## Buyback and burn

`TroverBuybackBurn` holds the burn share as ETH. The worker job `buyback-burn` (`apps/worker/src/buyback-burn.ts`, every ten minutes, keeper = the claim-automation account) runs when all of these hold:

1. `BUYBACK_ENABLED=true` and `BUYBACK_BURN_ADDRESS` set on the server;
2. the sink's token is set (`setToken`, once, by the admin) and it is not paused;
3. the sink balance is at least `BUYBACK_MIN_ETH` (default 0.05).

It picks the deepest WETH/TROVER Uniswap v3 pool across the 0.01/0.05/0.3/1% tiers, quotes an exact-input swap through QuoterV2, applies `BUYBACK_MAX_SLIPPAGE_BPS` (default 300) to get `minTokensOut`, caps the spend at `BUYBACK_MAX_ETH_PER_RUN` (default 0.5), dry-runs `buyAndBurn`, then sends it. The contract calls the allowlisted router with the ETH, receives TROVER and transfers the whole amount to the dead address in the same transaction, incrementing `totalEthSpent`, `totalTokensBurned`, `burnCount`, `lastBurnAt`. Each run is recorded as a `buyback_burned` treasury ledger entry with the tx hash, pool, fee tier and ETH spent.

Guards: only allowlisted routers (`setRouterAllowed`); `setToken` reverts on a second call; `pause`; `sweep` for anything force-sent.

## League

Unchanged: two 12-hour epochs a day settling at 00:00 and 12:00 UTC, same paper portfolio and price clock for everyone, risk-adjusted return with drawdown and turnover penalties, ties split, invalid or empty epochs roll over. The 15% share funds each epoch; the manager publishes results to `TroverLeagueVault`, winners claim once; unclaimed prizes are recoverable 30 days after publication. Profitable settled epochs still earn the verified credits shown on the league page; they no longer unlock anything.

## Contracts

| Contract                                       | Role                                             | Rescue paths                                                     |
| ---------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------- |
| `TroverRevenueRouter`                          | four-way split at receipt, per-source `setSplit` | pause (defers), withdrawOwed, reassignOwed, sweep, setRecipients |
| `TroverBuybackBurn`                            | burn sink, `buyAndBurn` by keeper or admin       | pause, sweep, router allowlist, token set once                   |
| `TroverEthDistributor`                         | holder vault, ETH tranches                       | pause, cancelTranche, releaseExpired, recoverUnreserved          |
| `TroverStockDistributor` (live, `0x53f6…71CC`) | stock tranches                                   | pause, cancelTranche, releaseExpired, recoverUnreserved          |
| `TroverLeagueVault`                            | epoch pool and winner claims                     | pause, recoverUnclaimed (30-day grace), sweep                    |
| `TroverXClaimEscrow`                           | social claim escrow                              | pause, forceRelease (6× delay), cancelExpiredDeposit             |
| `TroverAtomicFeeExecutor`                      | bot fee in the swap transaction                  | pause, sweep                                                     |

Admin is a single signer for now (the platform fee wallet `0x61eAA89638B4425278EB4B6978c5C0d7bADacc9C`, as configured on the admin page); a Safe can take over later with the same role grants. Deploy from the admin page (`/internal`) or with `packages/contracts/scripts/deploy-stack.mjs`; rescue actions through `safe-rescue.mjs` (direct mode when the admin is an EOA). See `contracts-runbook.md`.

## Public data

`GET /v1/token/economics` (30 s cache): token address, split per source, sink totals and the last ten burns, holder tranche counts and the last tranche, league epoch pool, deferred router payouts. The website chat, X replies and the MCP server read the same route through the `token_economics` capability.

## Remaining inputs

* The TROVER token address after the Pons launch: `safe-rescue.mjs build burn.setToken <token>` (or the admin page once it exposes it), then `BUYBACK_ENABLED=true` on the server.
* The stock target list for the holder share (the existing treasury list).
* Mainnet addresses: treasury, league manager, voucher signer, fee wallet, router allowlist, keeper (the claim-automation account's address).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.trover.tech/engineering/token-economics.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
