Doppler hooks and beforeRemoveLiquidity — is the liquidity actually locked?
6 min read
DopplerHookInitializer or beforeRemoveLiquidity does not, by itself, prove that liquidity is permanently locked. It tells you that hook-capable pool infrastructure is involved. The answer depends on the deployed hook’s permissions and code, who controls it, and the configured migration path.What is a Doppler hook?
Doppler is a token-launch and liquidity-bootstrapping protocol from Whetstone Research. Its EVM launch paths can use Uniswap v4 pools, where a pool is connected to a hook contract. The hook can run logic at selected moments in the pool lifecycle — before or after swaps, liquidity changes, or initialization.
During a Doppler dynamic auction, the hook manages price discovery and the liquidity positions used by the auction. Afterward, Doppler supports different migration paths. That means “uses Doppler” is a description of launch infrastructure, not a security verdict or one universal liquidity-lock policy.
Primary references: Whetstone’s Doppler SDK documents its auction and migration variants, while Uniswap v4’s hook implementation defines when permissioned callbacks run.
What does beforeRemoveLiquidity prove?
beforeRemoveLiquidity is a Uniswap v4 callback that may run before liquidity is removed when the attached hook has enabled that permission. The callback can inspect the request and may reject it by reverting. But the callback name alone does not tell you the rule it enforces. A particular implementation might block every withdrawal, allow an authorized migration, exempt a privileged caller, or impose only a temporary condition.Does DopplerHookInitializer mean liquidity cannot be pulled?
DopplerHookInitializer as a clue about how the pool was initialized, not proof of its final custody rules. Verify the actual hook address and enabled permissions, read the deployed implementation, identify any owner or upgrade authority, and inspect the migration configuration. Only those facts can show who may move the liquidity and under what conditions.The rug vector: liquidity removal
The three ways liquidity gets locked
1. LP tokens burned. The deployer’s claim on the pool (the LP position) is sent to an address nobody controls. Irreversible, easy to verify, and the strongest of the three — nobody can withdraw, including the team.
2. LP tokens locked in a contract. The position is held by a locker contract that releases it after a set date. Only as good as the contract and the unlock date — a “locked” badge with a 7-day unlock is a countdown, not protection.
3. Removal gated in code. Newer AMMs let a pool run custom logic on liquidity events. On Uniswap v4 this is what hooks are: a pool can attach code to lifecycle callbacks, and the one relevant here is beforeRemoveLiquidity — logic that runs before any withdrawal and can reject it. That callback is the mechanism behind “liquidity is locked at the protocol level” claims for hook-based launchpads.
Why a hook is not automatically a guarantee
beforeRemoveLiquidity hook can enforce a lock — but a hook is just code someone wrote. The same callback that can block withdrawals can be written to allow them for a privileged address, or be upgradeable, or be bypassable through another path into the pool. So “it uses a hook” answers how a lock would be enforced, not whether this particular deployment enforces one. The questions worth answering for any hook-gated pool are:- Is the hook contract verified, and is its source actually readable?
- Does it reject all removal, or exempt an owner/admin address?
- Is it upgradeable, or is the pool’s hook immutable once set?
- Is there a second route to the underlying liquidity that skips the hook entirely?
What a lock does not protect you from
- Supply concentration. If a handful of wallets hold most of the supply, they can dump into the locked pool and crash the price to near zero. The liquidity stays; your exit price does not.
- Mint authority. If new tokens can still be minted, the supply can be inflated against the pool.
- The team simply selling. A coordinated exit by insiders looks nothing like a liquidity pull and is far more common.
- The token just dying. On the launchpads we track, the overwhelmingly likely outcome is not a dramatic rug at all — it is silence.
How to verify instead of trusting a badge
What Soliscope measures (and what it does not)
We do not have outcome data for EVM launchpads or hook-based pools, so we do not publish risk verdicts for them — the mechanics above are general, but our numbers are Solana. Where we do have data, we say exactly how well each signal predicts and publish the validation, including the one signal we tested and deleted.
The short answer
beforeRemoveLiquidity hook that genuinely rejects withdrawals — removes the liquidity-pull rug. It removes nothing else. Verify the lock rather than trusting the badge, then judge the token on the risks a lock cannot touch: who holds the supply, who created it, and what that creator has done before. On Solana, you can check the creator’s record in the live feed.