> For the complete documentation index, see [llms.txt](https://docs.lighter.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lighter.xyz/evm/interop/tokens/token-transfers/l1-and-core.md).

# L1 and Core

Transfers between Ethereum L1 and Core move ETH or an asset with an active L1 representation. For an L1-native asset, this path becomes available after Core registration. For an EVM-native asset, its L1 wrapper must also be enabled. Core-native assets cannot be transferred to L1.

See [Token linking](/evm/interop/tokens/token-linking.md) for setup and [amounts](/evm/interop/tokens/token-transfers.md#amounts) and [routes](/evm/interop/tokens/token-transfers.md#routes) for Core transfer conventions.

## L1 to Core

Call [`L1InteropManager.sendToCore(...)`](https://github.com/elliottech/lighter-contracts/blob/lighter-evm-devnet/contracts/interop/L1InteropManager.sol) on L1. The recipient is a Core master account identified by its controlling L1 address. If it does not exist, the deposit path allocates the account index and Core creates the account when processing the deposit.

```solidity
function sendToCore(
    uint32 assetIndex,
    address to,
    uint256 amount,
    RouteType routeType
) external payable;
```

`amount` is in the L1 token's smallest units and must be a nonzero multiple of the asset's L1 `tickSize`. Read the L1 configuration from `L1InteropManager.getAssetConfig(assetIndex)`. The deposit credits `amount / tickSize` [Core base units](/evm/interop/tokens/token-transfers.md#amounts) to the selected perps or spot route, subject to Core acceptance.

1. For an ERC-20, approve `L1InteropManager` to spend `amount` of the configured L1 token.
2. Call `sendToCore(...)` with the recipient's controlling L1 address. For ETH, use `assetIndex = 1` and send exactly `amount` as `msg.value`. For an ERC-20, send no ETH with the call.
3. Confirm the deposit's processing and credited amount in Core. A successful L1 receipt only confirms submission.

L1-native tokens are escrowed on L1. An EVM-native asset's L1 wrapper is burned through its selected mint gateway. `L1InteropManager` submits the deposit through `L1CoreMessaging`; applications do not call `registerDeposit(...)` directly.

This deposit path targets L1-controlled masters, not subaccounts or EVM-controlled masters. Use a supported internal Core transfer to move funds into a subaccount after depositing.

### Unaccepted deposits

If Core does not accept the full deposit, the unaccepted amount is returned to the original deposit destination through a Core-originated [**L1 Call**](/evm/interop/message-passing.md). It belongs to `to`, which may differ from the address that paid for the deposit. Follow [Core message execution on L1](/evm/interop/message-passing/l1-and-core.md#executing-core-messages-on-l1) to complete delivery once the call is ready.

## Core to L1

### Initiating a Core withdrawal

A withdrawal to L1 can be initiated in three ways, depending on the account's controller.

* **From Core.** Submit one of the following [signed transactions](/evm/signing-core-transactions.md).
  * **Withdraw (`txType = 13`).** L1-controlled Core accounts can withdraw to their controlling L1 address using only an API-key signature. No controller ECDSA signature is required.
  * **Withdraw to L1 Address (`txType = 132`).** L1-controlled or EVM-controlled Core accounts can specify an L1 recipient. This requires both an API-key signature and the EOA controller's ECDSA signature, even when withdrawing to the controller's own address.
* **From L1.** The controlling L1 address calls [`L1CoreMessaging.withdraw(...)`](/evm/interop/message-passing/l1-and-core.md#supported-requests) to withdraw to itself, or [`L1CoreMessaging.withdrawToL1Address(...)`](/evm/interop/message-passing/l1-and-core.md#supported-requests) to specify a recipient.
* **From EVM.** The controlling EVM address calls [`EvmToCoreEntrypoint.withdrawToL1Address(...)`](/evm/interop/message-passing/evm-and-core.md#evm-initiated-withdrawal-to-l1).

A contract controller cannot supply an ECDSA signature and must use its native-domain call for the explicit-recipient option. The debit account may be the controller's master account or one of its subaccounts, subject to Core authorization.

### Finalizing a Core withdrawal

Once Core accepts the withdrawal and its batch has been [executed on L1](/evm/technical-architecture.md#batch-lifecycle-and-finalization), follow [Executing Core messages on L1](/evm/interop/message-passing/l1-and-core.md#executing-core-messages-on-l1) to retrieve the call data and execute the call.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.lighter.xyz/evm/interop/tokens/token-transfers/l1-and-core.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
