SDK signer through a WASM blob; the user’s wallet is not prompted. The same normalized flow applies to lighter and lighter-rh, while each instance owns its asset catalogue, collateral, endpoints, and signing configuration.
Discover valid selections
CallgetWithdrawableBalances() and render exactly the rows it returns:
/assets, filters zero and sub-minimum rows, and attaches each asset’s decimals, L1 address, and minWithdrawalAmount. Do not sum the same asset across perps and spot; the selected route is part of the signed transaction.
Submit the selected row
Pass the selected row’s
asset.id and route together. amount stays in human-readable asset units; the backend loads the authoritative asset precision and minimum, validates the amount, and the provider signer scales it exactly.
route defaults to perps and the asset defaults to that deployment’s quote collateral (USDC for lighter, USDG for lighter-rh). New UIs should use discovery rather than rely on those defaults.
Destination constraint
The backend rejects a destination that differs from the L1 account owner. The destination chain follows the deployment: mainnet Lighter exits through its Ethereum path, whilelighter-rh uses the Robinhood deployment configuration.
Standard and fast paths
The backend chooses settlement after it has resolved the selected asset and route:
The optional fast-path probe never blocks withdrawal. An unavailable probe or build failure falls back to the standard step.
TRANSFER remains internal and is not advertised as a directly callable public action.
The returned successful ActionResult can include txHash and explorerLink when that deployment has a configured explorer.