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.
- hook deployer
- 0xc495af718853B4002528E70F7Dddd8df6602C5Af
- pilot pool NVDA/USDG (pool id)
- 0xaf72f89ac11ebc7554caf72d64b15b579892e3cf41eae8f0b76f90432c352a65
- Uniswap v4 PoolManager
- 0x8366a39CC670B4001A1121B8F6A443A643e40951
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.