EtchifyHook on Robinhood Chain

Uniswap v4 Hook Contract 0x22b05d6ee0df99340b8037f4f0a585d0e457e8cc on Robinhood Chain · Launchpad · Verified contract

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
0

What it does

Every trade on an Etchify pool pays a fixed fee in ETH of at most 2%, taken on the ETH side of the swap and sent to the launchpad, while liquidity is added once at launch and locked permanently.

How it works step by step

  • Only the launchpad can create a pool using this hook; beforeInitialize rejects any pool the launchpad did not register first
  • Stores a fixed per-pool fee in basis points (capped at 200, i.e. 2%) set once through register()
  • Blocks all liquidity additions except one seeding pool id opened by the launchpad during its launch transaction (setSeeding), via beforeAddLiquidity
  • Charges the pool fee in ETH on every swap: beforeSwap takes it when ETH is the named amount, afterSwap takes it otherwise, and both send it to the launchpad with poolManager.take
  • Calls onSwap on the launchpad after each swap with trade details so the launchpad can split the fee between the coin creator and Etchify
  • Has no owner, no upgrade path and no adjustable settings; fees and launch gating are fixed after registration
Swap behaviour
Every swap pays the pool's fixed fee in ETH, of at most 2%. When ETH is the named amount (buying with exact-input ETH or selling for exact-output ETH), the fee is taken in beforeSwap on that amount. Otherwise the fee is taken in afterSwap as an unspecified-amount delta on the ETH received. Buys and sells pay the same percentage; the fee is not direction-dependent beyond which side ETH sits on.
Liquidity behaviour
Liquidity can only be added by the position manager and only while the launchpad has opened the seeding slot for that pool id, which happens once during the launch. No removal callbacks are enabled, so liquidity added at launch is not removable through the hook; positions are described as owned by 0x...dEaD, which makes them effectively permanent.
Fee behaviour
Each pool's fee is stored in basis points at registration (capped at 200) and cannot be changed afterwards. The fee is taken by the hook through return deltas and sent to the launchpad with poolManager.take, and the launchpad decides how it is split between the coin creator and Etchify.
Owner & admin controls
No owner or admin functions. The launchpad address is immutable and is the only caller allowed to call register and setSeeding. No pausing, no upgradeability and no parameter changes after registration were found.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize gates pool creation to the launchpad with a registered fee. beforeAddLiquidity restricts liquidity additions to the position manager during the seeding window. beforeSwap and afterSwap take the ETH fee and report it to the launchpad. beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to return the fee as a delta that reduces the swapper's amount.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: No owner key exists on the hook. The launchpad, which is immutable, controls registration of pools, the seeding window and receipt of all fees. Those powers are bounded by the hook's 2% fee cap and immutable addresses.

Risk to user funds: The hook holds no balance of its own; it takes the ETH fee from swaps and forwards it to the launchpad in the same transaction. It cannot move coin balances beyond what the trade specifies, and LP positions it seeds are locked and not removable by the hook.

Security findings

  • [info] Hook takes fees via return deltas: beforeSwap and afterSwap return deltas that move ETH out of the trade and send it to the launchpad, so the hook directly affects swapper amounts. The fee is capped at 2% by MAX_FEE_BPS, enforced in register().
  • [medium] Launchpad controls fee recipient and seeding: The immutable launchpad receives all fees and is the only caller that can register pools and open the seeding window. If the launchpad contract is compromised or misbehaves, it controls the fee split and the pool setup, although it cannot change the hook's fee cap or stored fees.
  • [info] Liquidity is permanently locked: No remove-liquidity callbacks are enabled and seeding can only happen once per launch, so user liquidity cannot be withdrawn through the hook. This is intentional but means LPs have no exit from these positions.
  • [info] Swaps not blocked by hook: No callback can revert a swap based on admin state, so buys and sells cannot be paused by the hook itself.

Contract details

Verified source
Yes (EtchifyHook)
Compiler
solc 0.8.30+commit.73712a01
Bytecode size
3,073 bytes
Upgradeable proxy
No
Detected patterns
launchpad, moves-currency, return-delta

Pools using EtchifyHook