ChakramHook
RobinhoodChakramHook is a Uniswap v4 hook on Robinhood Chain. Brand new: its first pool went live today. Still in use: 6 trades in the last week, and 3 new pools this week.
- Contract name
- ChakramHook
How this hook works
Trading taxA trading tax hook. It takes a tax on trades, keeps rewards to claim and only lets approved callers create pools.
Takes a tax on trades
On top of the normal pool fee, it keeps part of each trade as a tax. The tax can be changed, but never above 3%. The tax builds up in the hook until it is collected.
The code that does this (beforeSwap):function beforeSwap(address sender, PoolKey calldata key, SwapParams calldata params, bytes calldata) external onlyPoolManager returns (bytes4, BeforeSwapDelta, uint24) { (address token, bool tokenIsZero_) = _match(key); if (token == address(0) || !_quoteIsSpecified(params, tokenIsZero_)) { return (this.beforeSwap.selector, toBeforeSwapDelta(0, 0), 0); } uint256 amount = params.amountSpecified < 0 ? SafeCast.toUint256(-params.amountSpecified) : SafeCast.toUint256(params.amountSpecified); bool isBuy = _isBuy(params, tokenIsZero_); uint256 fee = _charge(key, token, tokenIsZero_, amount, isBuy, sender); // Exact-in buy: pool receives amount - fee. Exact-out sell: pool pays amount + fee. _record(token, isBuy, isBuy ? amount - fee : amount + fee); return (this.beforeSwap.selector, toBeforeSwapDelta(SafeCast.toInt128(SafeCast.toInt256(fee)), 0), 0); }Rewards to claim
It keeps track of what people have earned, and they claim it themselves.
The code that does this (claimFees):function claimFees(address recipient, address quoteToken_) external nonReentrant { uint256 amount = claimable[recipient][quoteToken_]; if (amount == 0) revert Hook__NothingOwed(); delete claimable[recipient][quoteToken_]; _send(recipient, quoteToken_, amount); emit FeesClaimed(recipient, quoteToken_, amount); }Only approved callers create pools
New pools with this hook can only be created by approved callers, for example its own factory or launcher.
The code that does this (beforeInitialize):function beforeInitialize(address sender, PoolKey calldata key, uint160) external view onlyPoolManager returns (bytes4) { if (sender != factory) revert Hook__PoolNotAllowed(); (address token,) = _match(key); if (token == address(0)) revert Hook__PoolNotAllowed(); return this.beforeInitialize.selector; }
Who controls it: The hook developer can change the fee and the tax. The code never lets the fee go above 3%. Control can be passed on or given up. The code cannot be changed.
Based on the hook’s published code.What do these labels mean?
What it can do
Its code executes inside each trade in pools that use it.
It can take or add tokens during a swap. Fees, burns and custom curves work this way, and so do scams.
It runs when a pool is created, often to lock in that pool’s settings.
Hook history
Across all its pools, the hook paid out collected fees: $0.660.
- Paid out collected fees 1 time, worth $0.660
Latest transactions
- 0x937e074e…e7d9a4 block 113,349,092 · 0.000340 ETH
- Registered a token 4 times
Latest transactions
- 0x4709ca56…e1af1d block 113,447,210
- 0xf13a72a7…2059b4 block 113,346,163
- 0xfab8b513…c1e79c block 113,343,776
- 0x7d1462b4…fca999 block 113,335,796
- Took its fee from a trade 3 times
Latest transactions
- 0x3ea7bd10…afbe18 block 113,346,763 · 0.000100 papercat
- 0x3a9bdaa7…9870d2 block 113,345,150 · 0.000200 SBOOB
- 0x766ad688…dfb836 block 113,341,383 · 0.000340 CHK
Counted from what the hook recorded on-chain across all its pools, for every action in its published code, plus token transfers in and out of it. Dollar values count the amounts paid in ETH, stablecoins, BNB and BTC, at today’s prices.