Withdrawals from Lighter are submitted via the SDK’s withdrawal flow with provider: 'lighter' (see SDK / Actions and the high-level withdraw() helper). The withdrawal blob is signed by the registered API key (WASM blob, not the L1 wallet).
withdrawal
| |
|---|
| Signers | API_KEY (WASM blob) |
| Params | WithdrawalParams — { destination, amount } |
| SDK methods | withdraw() |
Unlike Hyperliquid — where withdrawals require an explicit L1 wallet signature — Lighter withdrawals are signed by the registered API key, the same signer used for trading actions. No per-withdrawal wallet popup is triggered.
Destination constraint
Lighter withdrawals must go to the account owner address
The backend rejects withdrawal requests where destination differs from the L1 account owner. Withdrawals always settle to the user’s own L1 Ethereum address.
| |
|---|
| Signer | API_KEY (WASM blob signed by the registered Lighter API key) |
| Destination | L1 Ethereum mainnet (the account owner address only) |
| Quote asset | USDC |
Standard vs fast withdrawal
Lighter supports two settlement paths. The SDK and the request shape are the same in both cases — callers always submit WithdrawalParams. The backend transparently selects the path:
| Path | Settlement | When used |
|---|
Standard (WITHDRAWAL) | Multi-hour ZK-rollup exit | Fallback when the fast path is unavailable, or for amounts above the operator’s per-tx ceiling |
Fast (internally rewritten to TRANSFER) | Minutes (operator-relayed) | When the relayer reports it is currently available and the requested amount fits within the operator’s per-tx and remaining-pool USDC ceilings |
The action step’s action field reflects which path was selected (WITHDRAWAL or TRANSFER) — both dispatch through the same WASM signer. Public callers do not need to handle the distinction.
The fast path is a relayer-side optimisation; if the probe reports it is unavailable (insufficient operator balance, throttling, or build-time error) the backend falls back to the standard path with a logged warning. The public flow never regresses — a withdrawal request always succeeds on at least the standard path.
Internal note: TRANSFER
TRANSFER is an internal-only Lighter action type used by the fastwithdraw flow. It is not surfaced by GET /providers and is not callable directly via the public action API — exposing it would let callers transfer arbitrary balances between Lighter accounts, which is out of scope for this provider. Always request WITHDRAWAL; the backend rewrites internally as needed.