0x9cee…e8c4
RobinhoodThis is a Uniswap v4 hook on Robinhood Chain. Brand new: its first pool went live today. Still in use: 1 trade in the last week, and 73 new pools this week.
Launch a pool with this hookHow this hook works
Gated launch poolsVorta runs pools for its VORTA token and for pre-IPO markets, where traders get price exposure to private companies. This hook controls when each pool opens, charges a launch fee that drops over time, sends a cut of every trade to Vorta, and keeps a daily price record used to settle markets.
Trading opens on Vorta's schedule
A pool only works once Vorta has enrolled it and switched trading on, at a set launch time. Vorta can pause a pool, and trading stops for good once its linked market has settled.
The code that does this (_beforeSwap):function _beforeSwap(address sender, PoolKey calldata key, SwapParams calldata, bytes calldata hookData) internal view override returns (bytes4, BeforeSwapDelta, uint24) { PoolId poolId = key.toId(); Gate storage gate = _gates[poolId]; FeeSchedule storage schedule = _schedules[poolId]; if (!_launched(gate)) revert TradingNotOpen(); if (!_marketOpen(gate)) revert MarketClosed(); if (schedule.earlyAccessSeconds != 0 && block.timestamp < uint256(gate.launchTime) + schedule.earlyAccessSeconds) { _requireAllowlisted(sender, schedule.allowlistRoot, hookData); } uint24 fee = _feeNow(gate, schedule) | LPFeeLibrary.OVERRIDE_FEE_FLAG; return (IHooks.beforeSwap.selector, BeforeSwapDeltaLibrary.ZERO_DELTA, fee); }High launch fee that fades
Right after launch the trading fee can start high and slide down to a normal fee over a set time. This makes it costly for bots to grab tokens in the first moments.
The code that does this (_feeNow):function _feeNow(Gate storage gate, FeeSchedule storage s) internal view returns (uint24) { if (s.launchFee <= s.baseFee || !gate.tradingEnabled) return s.baseFee; uint256 elapsed = block.timestamp > gate.launchTime ? block.timestamp - gate.launchTime : 0; if (elapsed >= s.decaySeconds) return s.baseFee; uint256 remaining = s.decaySeconds - elapsed; return uint24(s.baseFee + uint256(s.launchFee - s.baseFee) * remaining / s.decaySeconds); }Early access for an allowlist
Pools can have a short early window where only addresses on an approved list can trade, and only through routers Vorta trusts. Before launch, only approved addresses can add liquidity.
The code that does this (_requireAllowlisted):function _requireAllowlisted(address sender, bytes32 root, bytes calldata hookData) internal view { if (!isTrustedRouter[sender]) revert UntrustedRouter(); address user = IMsgSender(sender).msgSender(); bytes32[] memory proof = hookData.length == 0 ? new bytes32[](0) : abi.decode(hookData, (bytes32[])); bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(user)))); if (!MerkleProof.verify(proof, root, leaf)) revert NotAllowlisted(); }Cut for Vorta and a price record
After each trade the hook takes a small fee (up to 10%) and sends it to Vorta's fee address. It also saves a daily price checkpoint, so markets can settle on an average price instead of one moment's price.
The code that does this (_afterSwap):function _afterSwap(address, PoolKey calldata key, SwapParams calldata params, BalanceDelta delta, bytes calldata) internal override returns (bytes4, int128) { PoolId poolId = key.toId(); uint256 feeAmount = _takeHookFee(poolId, key, params, delta); _touchOracle(poolId); return (IHooks.afterSwap.selector, feeAmount.toInt128()); }
Who controls it: The hook developer (Vorta) and the helpers it approves can enroll pools, change their fee settings within fixed limits, open trading and let addresses add liquidity early. Only Vorta can pause a pool, pick trusted routers, approve helpers and change where fees go. The code cannot be upgraded.
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.
Pools using it let the hook choose the swap fee instead of a fixed tier.
It checks every deposit before it goes in.
It runs when a pool is created, often to lock in that pool’s settings.
Hook history
- Opened a pool for trading 73 times
Latest transactions
- 0x9ca17f3f…5c806a block 114,282,132
- 0xfd40fffe…30287a block 114,281,995 · 6 times in this transaction
- 0xf2299b1f…42acde block 114,281,952
- Enrolled a new pool 72 times
Latest transactions
- 0xfd40fffe…30287a block 114,281,995 · 6 times in this transaction
- 0xf2299b1f…42acde block 114,281,952
- Saved the day's price checkpoint 1 time
- Took its fee from a trade 1 time
Latest transactions
- 0x26570697…d61058 block 114,282,611 · 435.5k VORTA
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.