Documentation

docs_

Everything Hookr Vault does, in plain language. If something here and the contract disagree, the contract wins — the addresses are at the bottom.

1. What $BAIT is

BAIT is a fixed-supply ERC-20 on Robinhood Chain, deployed by Hookr's launcher: 1,000,000,000 tokens, no mint, no owner, no pause, no blacklist. Its market is one Uniswap v4 pool, BAIT/HOOKR, run by Hookr's hook. Its utility is the vault: a contract that receives everything the pool pays out and turns it into yield for stakers and a floor for holders.

In one line: a token whose sells pay its stakers and its team, with a reserve that buys and burns under backing.

The name is the thesis. Hookr is a hook; a hook needs bait. On every launchpad the first sellers win and the holders hold the bag. Hookr is the first pad on this chain that lets a pool tax the sell side, so the token is the bait and the vault is the other end of the line: every bite pays.

2. The Hookr pool

The pool opens at launch with 700,000,000 BAIT placed as a one-sided band at the opening price — the standard Hookr launch. There is no bonding curve and no graduation; it is a real v4 pool from the first block. The launch position is handed to Hookr's Launch lock with a forever unlock and the vault as beneficiary: nobody can ever withdraw that liquidity, and only the vault collects its fees.

Hookr's hook applies these rules, frozen at launch:

  • Base fee 1% on every trade, 100% to the liquidity — which is the vault's position. A dynamic surcharge lifts it toward 5% during fast moves.
  • Anti-snipe: a 10-minute guard window with a sell-free buy tax starting at 40% and decaying to 0 over 5 minutes, plus a per-block buy cap. 80% of that tax goes to the vault's position, 20% to Hookr.
  • LP Rewards 2% of each buy donated to in-range liquidity, with a 10% creator royalty on it paid to the vault.
  • Tax + Conversion: 2% buy tax (10% at launch, decaying over about an hour) and 5% sell tax, paid in HOOKR to the vault.

Hookr keeps 20% of the surcharges, anti-snipe tax, LP Rewards and taxes it collects. The base fee is untouched. Hookr's own documentation is at hookr.fun/docs.

3. Where the HOOKR comes from

Four streams, all landing in the same contract:

  1. Launch position fees — the base fee and the vault's share of anti-snipe and dynamic surcharges. The vault pulls them with HookrFamilyLock.collect(); it is the lock's beneficiary.
  2. Creator royalty — the vault's share of LP Rewards, claimed with HookrRules.claim(HOOKR).
  3. Taxes — Hookr's tax block settles and pays them out to the vault's address; anyone can trigger the payout on Hookr.
  4. Bonds — every HOOKR anyone bonds (section 8).

The first three arrive as HOOKR and, for the pool fees, partly as BAIT. BAIT that arrives as fees is burned on the next harvest: fewer tokens, higher backing.

4. The 50 / 30 / 20 split

harvest() can be called by anyone. It collects streams 1 and 2, measures all new HOOKR since the last harvest (which catches stream 3), burns any BAIT-side fees, and splits the HOOKR once:

  • 50% → ops, sent to the team wallet in the same transaction.
  • 30% → stakers, as a stream paid linearly over the next 24 hours.
  • 20% → Floor Reserve, kept.

Bond proceeds skip the split and go 100% to the reserve. If nobody is staked when a harvest happens, the stakers' 30% goes to the reserve rather than to nobody. The shares are immutable constructor values on the vault; there is no function to change them, and the code refuses a team share above 50% or a reserve share under 10%.

5. Staking

Stake BAIT; your principal is held by the vault and nothing can touch it but your own unstake. Two reward streams accrue per second, pro-rata to your stake:

  • HOOKR from every harvest, over 24 hours.
  • BAIT from emissions (section 6) and from exit fees.

There is no warm-up and no lock. Because rewards stream linearly, a wallet that stakes for one block earns one block's worth: there is nothing to flash. claim() pays both tokens at once, any time.

unstake(amount) stops that amount earning in the same block. 2% of it is kept and streamed over 24 hours to the stakers who stay; the other 98% waits 6 hours, then withdraw() sends it to your wallet. If you were the last staker, the 2% goes to the emission reserve instead.

6. Epochs and emissions

The vault holds an emission reserve of 200,000,000 BAIT. It is not minted; it is pre-existing supply that can only leave through emissions. Every 6 hours anyone calls tick():

  1. harvest() runs first.
  2. If the closing epoch collected at least 50 HOOKR of income (harvests + bonds) and someone is staked, 0.5% of the remaining reserve is streamed to stakers over the next 6 hours.
  3. Otherwise nothing is paid; the reserve waits. Epochs nobody ticked count as skipped.

0.5% of what is left is a decaying schedule: roughly half the reserve is paid after about 140 paid epochs, and it tails off over months. Emissions therefore follow volume — a day with no trading prints nothing — and can never exceed the reserve.

7. The Floor Reserve and defend()

Reserve is the HOOKR the vault holds that is not owed to stakers. Circulating is total supply minus burned BAIT, minus the emission reserve, minus the bond inventory, minus BAIT still sitting in the pool's unsold launch band. Backing = reserve ÷ circulating, in HOOKR per BAIT.

When the pool's price is at least 1% below backing, anyone can call defend(hookrIn, minBaitOut). The vault spends up to 10% of the reserve, buys BAIT through Hookr's router and sends it to 0x…dEaD. One call per hour. The caller sets a minimum output, so a defend cannot be sandwiched into a bad fill.

This is not a hard floor in the OHMVAULT sense: a v4 pool with an external hook can trade wherever people trade it, and we do not control the hook. It is a funded buyer under the price that burns what it buys. Every time it fires, supply falls and backing per remaining token rises.

8. Bonds

The bond contract holds 100,000,000 BAIT of inventory. bond(hookrIn, minOut) prices BAIT at the pool's current spot minus 10%, promises you that many BAIT vesting linearly over 5 days, and sends your HOOKR straight into the vault's Floor Reserve. redeem() pays whatever has vested so far, any time.

  • Minimum 10 HOOKR.
  • One bond ≤ 0.5% of the inventory left.
  • One 6-hour epoch ≤ 3% of the inventory the epoch opened with.
  • Bonding again first pays out what has vested, then merges the rest with the new payout on a fresh 5-day clock.
  • When the inventory is gone, bonds are over. Anyone can top the inventory up; nobody can mint into it.

Bonds are the way the backing rises without a trade on the pool, and the discount is the price of the 5-day wait.

9. Supply

WhereBAITShare
Pool — launch band, locked forever, fees to the vault700,000,00070%
Vault — emission reserve, 0.5% per paid epoch200,000,00020%
Bond — inventory, sold at 10% off, 5-day vest100,000,00010%
Team, dev wallet, airdrops00%

The retained 30% leaves the deployer in two transactions right after launch, into the two contracts above. Both balances are public. There is no dev buy at launch; the team buys on the pool like everyone else.

10. Who presses the buttons

Four functions keep the system moving and all four are permissionless: harvest(), tick(), defend() and Hookr's tax payout. A keeper runs them on a schedule and the site triggers them when you use it, but anyone with gas can call them and the contracts never depend on us.

11. Trust assumptions

  • One wire. The deployer calls wire() once, before the first stake, binding the vault to the token, the pool and the bond. After that the vault has no privileged caller at all.
  • Hookr's contracts set the pool rules, hold the locked liquidity and pay the fees. They are immutable per pool and unaudited. Ours are short and unaudited too; the source is published.
  • The team's cut is 50% of everything the vault harvests, paid to one fixed wallet, readable on-chain. Bond proceeds never go to the team; they go 100% to the reserve.
  • Hookr's cut is 20% of surcharges and taxes. If Hookr ever stopped paying out taxes, the base fee and royalty would still flow.
  • The price can trade under backing. defend() makes that expensive for the seller, not impossible.
  • Bond pricing uses spot, bounded by the caps in section 8.

12. What changed from OHMVAULT

OHMVAULT (Ethereum)Hookr Vault (Robinhood Chain)
Marketown v4 hook, own poolHookr's hook, Hookr's launchpad
PairOHMHOOKR
Hard floorenforced by the hook: no swap settles below ita funded buyer: the reserve buys and burns under backing
Sell taxnone at the pool5% to the vault
Fee split3% ops / 2% floor of a 5% fee50% ops / 30% stakers / 20% reserve of all income
Staker yieldnew OHMV minted when the floor set a highHOOKR from fees every day + BAIT from a fixed reserve on earning epochs
Supplymintable by the protocolfixed 1B, nothing can mint
BondsOHM in, OHMV out, floor-cappedHOOKR in, BAIT out at 10% off, 5-day vest, inventory-capped
LoansCooler loansnone

What we could not rebuild on someone else's hook: a price that is mathematically unable to cross the floor, and emissions minted against backing growth. What we gained: a sell tax, yield paid in the chain's main token, and a launch that needs no seed capital and no trust in a deployer key.

13. Wallet & network

Robinhood Chain, chain id 4663, gas in ETH. Any EIP-1193 wallet works; the site asks yours to switch to the chain and adds it if missing. Reads go through the public RPC and work without a wallet.

14. Contracts