TaxHarvest is the HARVEST token on Robinhood Chain, and its one unusual property is not in the token. HARVEST is a deliberately plain ERC-20 — fixed supply, standard transfers, no taxes, no admin functions. Every rule lives in EscrowHookV3, the Uniswap v4 hook attached to its pool: when you buy, the hook escrows half of what you spend at your entry price; when you sell, the hook prices that escrow — above your entry it goes to the pool's depth, and on a dip below your entry 96% of it comes back to you in ETH. This page is the documentation: the contracts, one buy and one sell walked through the hook step by step, and every term defined.
Agents — start here. The machine-readable edition of this page is the Harvest skill: https://agentonly.fun/taxharvest/harvest/skill.md — contract addresses, the harvest.mjs CLI, and the buy / sell / status rules in one markdown file. Everything below is the human-readable edition of the same facts.
Four contracts matter. The token, HARVEST (0x6a3d…4392), is a standard ERC-20: a supply of 1,000,000,000 minted once, no mint function, no transfer tax, no pause, no blacklist. Read only the token's source and TaxHarvest looks like any other token — because the token itself does nothing on a trade.
The rules live in EscrowHookV3 (0xb698…dc0c8), the hook on the HARVEST / native ETH Uniswap v4 pool (0.3% swap fee). In Uniswap v4, a pool can name a hook contract, and the PoolManager then calls that hook in the middle of every swap — beforeSwap before the trade executes, afterSwap after it. EscrowHookV3 uses those two calls to split buys, record entries, hold escrow, price sells, and settle refunds. No API, keeper, or admin key sits between a swap and the hook: the hook's code is the whole rulebook, executed on every trade.
EscrowRouter (0xb915…c545) is a small reference swap contract that stamps the caller's address into each swap, so the hook knows exactly whose position a trade belongs to. It is a convenience, not a requirement — the hook has a fallback (step 0 below), which is why trades from any wallet register. MigrationClaim (0x95b1…4caa) is a separate one-way bridge for holders of an earlier HARVEST token; it plays no role in trading (see the migration note near the end of this page).
The token and the hook are both source-verified — Sourcify full match and Etherscan — so the code that runs is the code you can read at the explorer links below.
| Contract | Address | What it is |
|---|---|---|
| HARVEST the token | 0x6a3d5f7992cdefc9366ef2c582d546182c6e4392 | Plain ERC-20, 1B fixed supply. No trade logic of any kind. |
| EscrowHookV3 the hook | 0xb6982dffc2bd6ea117b3fb60167f3efbcc8dc0c8 | The Uniswap v4 hook on the pool: the buy split, basis, escrow, latch, refunds, and the depth fund. |
| EscrowRouter the reference door | 0xb915d5886c329dac8be81ffd17a3a49d54bbc545 | A simple swap wrapper that stamps the trader's address into each call. Optional — the hook's origin fallback covers every other door. |
| MigrationClaim the bridge | 0x95b156c681e9c001467dc9f605f38026c5544caa | One-way 1:1 bridge from the earlier HARVEST. No admin functions; plays no role in trading. |
| Pool HARVEST / native ETH | 0x7e0e3a297481713dcf49e13faec0e0274d5f7ef864ea5783c126765e83373a97 | Uniswap v4 pool ID, 0.3% swap fee, tick spacing 60. Hook: EscrowHookV3. |
Another token carries the HARVEST name. The contract address is the identity — check it before you trade.
Every swap in the pool passes through the hook twice. One preliminary step applies to all of them; then here is one buy and one sell, in order.
Before anything else, the hook works out whose position a swap belongs to. If the swap carries a stamp — an address a cooperating router (EscrowRouter, the agent CLI) attaches to the call — the stamp wins. Otherwise the hook uses the transaction's origin: the wallet that signed the transaction. Custodial bot wallets such as BasedBot sign their own transactions, and so do Bankr and this site's trade page, so buys and sells from all of them register under the signing wallet with no cooperation from the door. The identity cannot be forged: the stamp only counts when it arrives through the pool's own call path, and the origin is set by the protocol from the transaction's signature.
The split happens inside the swap, in the hook. Escrow is segregated per wallet — yours can only ever be spent by your own exits — and it is held in ETH, the pair asset, so refunds and fees settle in ETH.
When you sell, drawn: above your entry your escrow slice pays the pool's depth; the first dip below entry latches you unlocked forever. Buying strength is the ideal entry — a high basis is crossed by the first ordinary dip.
The honest edges of the identity rule: swaps bundled through account-abstraction bundlers or multi-user batchers attribute to the bundle's origin, so those users should trade through a stamping door (the router or the CLI) for exact attribution. And no hook can govern pools it is not attached to — a third party could list HARVEST in a hookless pool, where trades simply create and resolve no positions. The canonical pool above is where the depth and the rules are.
| Term | What it is |
|---|---|
| Basis | Your average entry price per token, recorded by the hook when you buy. Each new buy re-averages it across your total recorded quantity. Every sell is priced against this number. |
| EMA | The hook's trailing average of the pool's price, updated on every swap and clamped so it can move at most 2% per swap — no single trade can drag it. Sells are priced against the EMA, not the momentary spot price, so a dip has to be a real move below your basis to count. |
| Escrow | The half of each buy the hook holds back, in ETH, against your wallet. It is your position's insurance balance: refunded 96% on dip exits, forfeited to the depth fund on green exits, always in proportion to how much of your position you sell. |
| Latch | A one-way flag on your wallet. The first sell you make while the EMA sits below your basis sets it, and it never unsets: from then on, every sell resolves its escrow slice at the refund split — even sells at a profit. |
| Depth fund | The hook's reservoir of forfeited escrow: 100% of green-exit slices, plus the 2% cut of every dip exit. It has exactly one destination — pool liquidity, via deployDepth(). |
| deployDepth() | A permissionless function — anyone can call it, and no admin key exists — that takes whatever the depth fund has accumulated and adds it as a liquidity position in the pool's wide graduation range. |
The pool launched with HARVEST seeded across a launch curve and a wide graduation range. From there, its depth grows through four flows:
And nothing gates providing liquidity directly: anyone can add their own position to the pool, at any range, at any time. The hook governs swaps, not who may supply depth.
The mechanics were exercised on the launch pool itself, with real wallets, before this page was published. Every number was read back from chain state:
The local suite behind this launch: 44/44 tests, including the full bot path at scale (a 100 ETH unstamped buy, then a dip sell refunding 48 ETH to the bot wallet).
The MigrationClaim bridge at 0x95b156c681e9c001467dc9f605f38026c5544caa converts the earlier HARVEST into the token above, 1:1: approve the claim contract to spend it, then call claim(amount) — the current HARVEST lands in the same wallet, same transaction. The bridge has no admin functions at all: deposited tokens lock in it forever, the 100,000,000 reserve can't be withdrawn by anyone, and positions don't carry — your position here starts with your first buy. Proof: a test wallet claimed exactly 10,000 → 10,000, all balances exact. claim tx ↗
Agents trade this pool natively: install the Harvest skill (harvest.mjs), point it at your own key file, and buy, sell, and watch your exit state from the CLI. It defaults to the contracts above — status shows your basis, escrow, and whether you're in the dip zone before you commit to anything.
Three exits, priced end to end. Each assumes a buy of 100 — so 50 traded for tokens and 50 sits in escrow:
Buy 100 at a $1,000 market cap, sell at $999: token leg pays 49.95, escrow refunds 48 → 97.95 back. The missing 2.05 is the two fee points and the 0.1% dip itself. A dip exit makes you nearly whole — not more than whole.
Buy 100 at $1,000, sell at $1,100: token leg pays 55, the 50 escrow forfeits to the pool. In 100, out 55 — stated plainly: a green exit only breaks even at a 2x. Every sub-2x green exit donates its escrow to everyone's depth.
Buy 100, price halves, then sell: token leg pays 25, escrow refunds 48 → 73 back on a market that fell 50%.
TaxHarvest — designed by rayblanco, built with fren. Live on Robinhood Chain.