Launchpad hook on Ethereum
Uniswap v4 Hook Contract 0x34dc760b4cfdfe734b752cdbb2f4e0c0ef8320cc on Ethereum · Launchpad
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 2 (2 traders)
- Total swaps
- 2
What it does
This hook launches a token against the pool and charges a tax on swaps that is sent to a configurable recipient, so traders in the taxed direction pay more than they would on the plain pool, while liquidity providers are not charged by the hook.
How it works step by step
- Exposes a launch(string,string,uint256,string,uint256) entry point that deploys and launches a new token paired against the pool, indicating a token launchpad flow
- Stores the launched token address and pool key in fixed storage slots (slots 1 to 4) and reads them back through poolKey() and token()
- Gates liquidity additions and removals through beforeAddLiquidity and beforeRemoveLiquidity, which are present as pure stubs in the dispatcher
- Takes a tax on swaps via beforeSwap, afterSwap and return-delta permissions, with TAX_BPS, LP_FEE and taxRecipient exposed as readable parameters
- Uses the pool manager unlock flow (unlock, unlockCallback, take, settle, sync) to move currency and mint or burn ERC6909 claims during swaps and launch
- Exposes claim() and claimable() so accrued amounts can be withdrawn by the recipient
- Swap behaviour
- beforeSwap and afterSwap are active and both return deltas. The hook takes a tax, expressed in basis points by TAX_BPS, from swap amounts and routes it to taxRecipient through ERC6909 claims and the unlock/settle/take path. Exact direction-dependent rates cannot be confirmed from bytecode alone.
- Liquidity behaviour
- beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity are enabled in the dispatcher but their bodies appear to be pure checks, so the hook does not seem to take a fee on liquidity changes; this is inferred and not confirmed.
- Fee behaviour
- Swaps pay a tax set by TAX_BPS on top of the pool's LP fee (LP_FEE is exposed), with the tax accruing to taxRecipient. The split between LP fee and tax cannot be fully determined without source.
- Owner & admin controls
- setTaxRecipient(address) can be called to change where the tax is sent, and no pause or upgrade mechanism was observed in the dispatcher. Whether setTaxRecipient is restricted to an owner could not be confirmed from bytecode.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize and afterInitialize validate pool setup; beforeSwap and afterSwap apply the tax and handle claims; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of swap currency; liquidity hooks are present but appear to be pass-through.
Security & trust assessment
Risk level: high, estimated (decoded bytecode, low confidence).
Who controls it: A privileged key that can set taxRecipient, and possibly tune the tax if such a setter exists, can redirect all tax revenue and change the effective price paid by swappers.
Risk to user funds: The hook holds and moves swap currency through return deltas and the pool manager unlock flow, and claim() allows balances to be withdrawn; it can therefore take a share of trader funds and direct it to the recipient.
Security findings
- [high] Adjustable tax recipient: setTaxRecipient(address) changes the address that receives swap tax, and no access check could be confirmed from decoded bytecode, so an unrestricted or compromised caller could redirect all accrued tax.
- [medium] Return-delta currency capture: beforeSwapReturnDelta and afterSwapReturnDelta let the hook take currency from every swap, so the tax rate and recipient fully determine how much value leaves swappers.
- [medium] Launch flow moves value: launch() interacts with token minting and the pool, and claim() withdraws accrued balances, so the launch path and claim path both handle user-relevant funds.
- [info] Unverified source: No verified source is available, so the exact tax math, access checks and rounding behaviour are inferred from selectors and storage only.
Contract details
- Verified source
- No
- Bytecode size
- 16,533 bytes
- Upgradeable proxy
- No
- Detected patterns
- erc20, erc6909-claims, launchpad, moves-currency, return-delta, self-unlock, tax