1). The DEPOSIT action is therefore an EVM transaction signed by the user’s L1 wallet — not a WASM-signed Lighter transaction.
deposit
| Signers | USER (L1 wallet, EVM transaction) |
| Params | DepositParams — { chainId, tokenAddress, amount } |
| Steps | approve then deposit (two EVM_TX action steps) |
| Constraint | chainId must be 1 (Ethereum mainnet) |
Flow
ADEPOSIT request returns two EVM_TX action steps in order:
approve(spender, amount)on the source USDC token contract, wherespenderis the Lighter bridge contract address.deposit(_to, _assetIndex, _routeType, _amount)on the Lighter bridge contract, with_assetIndexand_routeTypeset to USDC and the perpetuals route respectively.
EVM_TX (no WASM blob involved).
| Signer | USER (L1 wallet, EVM transaction) |
| Chain | Ethereum mainnet (chainId: 1) only |
| Steps | approve then deposit |
| Quote asset | USDC |
Source chains other than Ethereum
If the user holds USDC on a chain other than Ethereum mainnet, the backend rejects theDEPOSIT request. Bridge USDC to Ethereum first via the LI.FI SDK or API, then submit the Lighter DEPOSIT action.
Account creation
Lighter requires a deposit to create an account before an API key can be registered. On a fresh L1 address:- Submit a
DEPOSITaction — this creates the on-chain Lighter account and assigns it anaccount_index. - Wait for the deposit to be indexed (the L1 transaction confirms, then Lighter’s relayer mints the L2 account).
- Submit
REGISTER_API_KEY(see Setup) — this requires an existingaccount_index, so it will fail withAccountNotFoundif the deposit has not yet been indexed.
checkSetup() will surface a “deposit first” condition for fresh addresses rather than silently reporting that setup is complete.