Agent Only — Base TaxHarvest
LIVE — ROBINHOOD CHAIN

TaxHarvest

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.

Trade HARVEST The agent skill

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.

What the contract is

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.

The contracts

ContractAddressWhat 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.

How the hook works, step by step

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.

Step 0 — the hook identifies the trader

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.

A buy, step by step

  1. You buy with ETH — say 1.0 ETH — through any door: the trade page, the CLI, Bankr, a bot wallet. The swap enters the PoolManager, which calls the hook's beforeSwap first.
  2. The hook splits the input 50/50. Half — 0.5 ETH — continues into the pool and buys HARVEST at the curve price; the tokens land in your wallet. The other 0.5 ETH is diverted into escrow before the curve ever sees it.
  3. The escrow is held inside the PoolManager as the hook's ETH claim (an ERC-6909 balance), recorded against your wallet. It is segregated per wallet — your escrow can only ever be released by your own sells — and it is never lent, staked, or used as liquidity while it backs your position.
  4. The hook records your basis: the entry price of the tokens you just bought. If you already hold a position, the buy blends in — your basis becomes the quantity-weighted average of your entries, and your recorded quantity and escrow balance grow.
  5. In afterSwap, the hook updates its trailing price average (the EMA, defined below) with this trade, and the swap completes. Your position — tokens in your wallet, basis and escrow in the hook — is set.
YOU BUY 100 ETH-value 50 → TOKENS in your wallet, tradeable 50 → ESCROW held by the hook, at your entry SELL ON A DIP → 48 BACK + tokens' sale value · 1 pool · 1 treasury SELL EARLY → ESCROW TO POOL you keep the tokens' sale value; depth grows

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.

A sell, step by step

  1. You sell some or all of your HARVEST, through the same door or any other. The hook identifies you the same way (step 0) and loads your position: basis, recorded quantity, escrow balance, latch flag.
  2. The sale itself always executes at the pool price. The hook never refuses a sell and never blocks one. What it decides is the fate of the proportional slice of your escrow: sell half of your recorded position and half of your escrow is in play; sell all of it and all of it is.
  3. The hook compares its EMA to your basis:
    • EMA at or above your basis (no dip): the escrow slice forfeits — it moves into the pool's depth fund. You receive exactly what the token sale itself pays, nothing more.
    • EMA below your basis (a dip): your wallet's latch sets — permanently — and the slice resolves 96% refunded to you in ETH, 2% to the depth fund, 2% to treasury, on top of the sale proceeds.
    • Already latched: every sell resolves its slice at the same 96 / 2 / 2 refund split, at any price — including sells above your entry.
  4. In afterSwap, the hook settles the ETH (the refund to you, or the forfeit to the depth fund), reduces your recorded quantity and escrow by the slice, updates the EMA, and the swap completes.

When you can sell, drawn

PRICE TIME → 2× entry — green exit breaks even your basis (entry price) ABOVE YOUR ENTRY — sells work the escrow slice forfeits to pool depth UNLOCKED — forever every sell resolves 96 / 2 / 2 …or sell up here, at a profit ✓ THE DIP — latch sets harvest here — 96% of the escrow slice back in ETH YOU BUY — basis recorded

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.

The moving parts, defined

TermWhat 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.

How liquidity grows

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.

Tested live — the proof trades

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).

Holding the earlier HARVEST? Migrate 1:1

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 ↗

For agents — the skill

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.

Worked examples

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%.

The honest box. TaxHarvest is a live experimental token on a custom hook, unaudited beyond our own test suite and live proof trades: third-party scanners misread these mechanics (the escrow split reads as a buy tax). The 50/50 split, the 96/2/2 refund, and the ETH pairing are the shipped parameters — they are in the verified hook source linked above, and this page describes them; it does not promise returns. Size accordingly; this is not financial advice.

TaxHarvest — designed by rayblanco, built with fren. Live on Robinhood Chain.