$hooks is live0x07bc..7777Buy Chart

Docs · Robinhood Chain

The rCREDIT fee hook

pickhooks hooks on another chain: a Uniswap v4 hook on Robinhood Chain, the tokenized stock chain, built with Raeto. The pool's own fee is zero; the hook takes 0.3 % of every swap and splits it: a slice back to the trader as rCREDIT, a slice to pickhooks, the rest to the LPs by their share of the capital. No owner, nothing about the split can change after a pool opens, and nothing in the rebate path can block a swap.

Pilot: NVDA/USDG. Not audited yet.

How the fee splits

Of every swap, 0.30 % comes off the side the trader did not name, the way every fee taking hook works. Booked in USDG value, it splits like this:

  • 0.05 %back to the trader as rCREDIT, when the swap carries the Raeto app's signature
  • 0.02 %to pickhooks, always out of the LP side, never on top for the trader
  • 0.23 %to the LPs by their share of the pool's capital; without the app signature the trader's slice stays with them too

Fees taken in the stock are sold for USDG through the pool itself by the pickhooks keeper, with a slippage guard. Every payout is made from the USDG the hook holds, never more.

For traders

Trade NVDA/USDG through the Raeto app. Its signature in the swap earns the rebate: at least 25 USDG per trade, up to 20 rCREDIT per wallet and UTC day. The keeper mints it as rCREDIT once the amount clears 0.5 USDG. Trades through any other route go through exactly the same, without the rebate.

rCREDIT is Raeto's AI credit: 1 USDG mints 1 rCREDIT. It is redeemable into Raeto AI credits or sellable on Raeto's marketplace, not back into USDG.

For liquidity providers

Every pool has one tick range, fixed when it opens, and every position uses it: one unit of liquidity means the same capital for every LP, so the fee share by liquidity is a share by capital. Liquidity goes in and out through the factory, which books every position's owner with the hook.

The pilot pool's range is 144.05 to 325.74 USDG per NVDA. An LP picks USDG (the default) or rCREDIT for its payout with setRcredit on the hook; payLp pays what the liquidity earned, the keeper calls it every round.

factory.amountsFor(poolId, liquidity)                                    // what the deposit pulls at the pool's price now
factory.addLiquidity(poolId, liquidity, amount0Max, amount1Max, deadline)  // approve both tokens to the factory first; the caps hold the price you saw
factory.removeLiquidity(poolId, index)    // the whole position back to its owner
hook.payLp(poolId, lp)                    // what the liquidity earned, in USDG (default) or rCREDIT
hook.setRcredit(poolId, true)             // the LP's payout choice

For apps

An app that wants its traders rebated signs typed data for each swap and passes it as the swap's hookData. The hook checks the signer set for the pool, the expiry, the minimum trade and the daily cap; a signature that fails only skips the rebate.

domain  { name: "pickhooks rCREDIT rebate", version: "1", chainId: 4663, verifyingContract: <hook> }
type    Rebate(bytes32 poolId, address trader, uint64 expiry)
method  eth_signTypedData_v4
hookData = abi.encode(trader, expiry, signature)        // (address, uint64, bytes)

Addresses

The factory opens pools and holds every LP position; the hook takes the fee and pays out. Explorer: Blockscout for Robinhood Chain.

pilot pool NVDA/USDG (pool id)
0xaf72f89ac11ebc7554caf72d64b15b579892e3cf41eae8f0b76f90432c352a65

Status

This is a pilot with Raeto's liquidity and Raeto's app as the signer. The contracts are not audited yet; the code went through unit and fork tests against the real chain, a dress rehearsal on a fork and the same rehearsal on the real chain with a throwaway stock before the pool opened. The pickhooks keeper runs the payouts every two minutes. The pickhooks products on this site stay on BNB Chain.

SDK: the chain and the addresses ship as robinhoodChain and ROBINHOOD_MAINNET.