Waypoint — standalone pool recovery

One file. No server, no bundler, no build step, no network calls other than your own RPC. Empties a Waypoint executor (Kernel v3.3 smart account) back into the wallet that owns it, by self-bundling an ERC-4337 UserOperation through EntryPoint.handleOps. Read the HTML comment at the top of this file before trusting it.

1 · Wallet

not connected
chain:
RPC override (optional — leave blank to read through MetaMask):

Reads go through the RPC override if you set one, otherwise through MetaMask. Signing and sending always go through MetaMask. Any chain works if you override the RPC — the chain-switch buttons are a convenience, not a restriction.

2 · Executor (the pool address)

Or derive it from the owner + the delegation's account index, exactly the way Waypoint does: KernelFactory.getAddress(initData, bytes32(index)) on the canonical Kernel v3.3 factory. This is a pure on-chain view call — it needs no server. You still need the index, which the Waypoint console shows next to the pool.

3 · Gas deposit at the EntryPoint

EntryPoint balance of executor:
ETH

The EntryPoint charges the ACCOUNT for gas, so it must hold a deposit before it will run your recovery UserOperation. Estimated worst case per sweep: . Leftovers stay credited to the executor and are retrievable later via EntryPoint.withdrawTo.

4 · Tokens held by the executor

tokenaddressexecutor balance

"Sweep home" builds execute(SINGLE, executor→token.transfer(you, fullBalance)), asks MetaMask for one personal_sign over the userOpHash, then sends one plain transaction calling EntryPoint.handleOps with you as the beneficiary.

5 · Standing allowances (your wallet → executor)

PULL-mode grants leave ERC-20 approvals on your own EOA pointing at the executor. Those are not funds the executor holds — they are funds it may still pull. Zeroing them is an ordinary approve(executor, 0) transaction sent by you; no smart-account machinery is involved at all.

tokenallowance you granted

Log