Asset deposits and withdrawals

Asset deposits and withdrawals

Applications may want to enable users to:

  • Deposit assets on L1 to L2 (note these pre-requisites)

  • Withdraw assets from L2 to L1

For more information and use cases, see our explanatory article, Deep dive into deposits and withdrawals.

Deposit pre-requisites:arrow-up-right

  • The user depositing the asset must be registered with XpansionChain

  • The user must own the asset on L1

  • The L1 smart contract holding the asset must be registered as a collection

📝GUIDES

  • Core SDK

  • API

  • Link SDK:

    • Deposits

    • Prepare withdrawal and complete withdrawal

1. Initialize the Core SDKarrow-up-right

In order to use the Core SDK, you need to initialize it.

2. Generate signersarrow-up-right

Enabling users to transfer assets requires a user's signature, so your application will need to create signers. See the guide on how to generate signers.

3. Deposit assets onto L2

  • Typescript Core SDK

📚SDK REFERENCE

  • deposit

The function below will deposit ETH from L1 to L2. If you wish to deposit a different asset, you can change type to either ERC20 or ERC721 and specify the asset address as an additional parameter.

Example responsearrow-up-right

  • Kotlin (JVM) Core SDK

📚SDK REFERENCE

  • Deposits API

  • Swift Core SDK

📚SDK REFERENCE

  • Deposits API

  • Golang Core SDK

📚SDK REFERENCE

  • ETH deposit:

    • NewETHDeposit

    • (*ETHDeposit) Deposit

  • ERC20 deposit:

    • NewERC20Deposit

    • (*ERC20Deposit) Deposit

  • ERC721 deposit:

    • NewERC721Deposit

    • (*ERC721Deposit) Deposit

4. Withdraw assets to L1arrow-up-right

  • Typescript Core SDK

📚SDK REFERENCE

  • prepareWithdrawal

  • completeWithdrawal

  • Kotlin (JVM) Core SDK

📚SDK REFERENCE

  • createWithdrawal

  • getSignableWithdrawal

  • Swift Core SDK

📚SDK REFERENCE

  • getSignableWithdrawal

  • createwithdrawal

  • Golang Core SDK

📚SDK REFERENCE

  • PrepareWithdrawal

  • Complete withdrawal for token types:

    • (*EthWithdrawal) CompleteWithdrawal

    • (*ERC20Withdrawal) CompleteWithdrawal

    • (*ERC721Withdrawal) CompleteWithdrawal

💻EXAMPLE

  • Withdrawal

  • Deposit

  • Withdrawal

To understand what is going on under the hood with asset deposits, please see this explainer.

Steps:arrow-up-right

  1. Get details of the deposit

  2. Generate signers

  3. Call contract method to deposit tokens

1. Get details of the depositarrow-up-right

💡ENDPOINT:

  • getSignableDeposit

Javascript example of depositing ETH from L1 to L2:

Example response:

The following response params are used in the depositEth contract method (see Step 3):

  • stark_key

  • vault_id

2. Generate signersarrow-up-right

Enabling users to deposit assets requires a user's signature, so your application will need to create signers. See the guide on how to generate signers.

3. Call contract method to deposit tokensarrow-up-right

To understand what is going on under the hood with asset withdrawals, please see this explainer.

Steps:arrow-up-right

  1. Get details of the withdrawal

  2. Generate signers

  3. Create withdrawal

  4. Call contract to complete withdrawal

1. Get details of the withdrawalarrow-up-right

💡ENDPOINT:

  • getSignableWithdrawal

Javascript example of withdrawing ETH from L2 to L1:

Example response:

Explanation:

Response param

Description

How is it used in the createWithdrawal request? (See Step 3)

amount

Amount of token to be withdrawn to L1

As amount in the request body

asset_id

ID of the asset this user is withdrawing (applicable only to ERC721 asset type)

As asset_id in the request body

nonce

Random number generated of this transaction to verify that specific values are not reused

As nonce in the request body

payload_hash

Encoded payload hash

Used to generate the stark_signature in the request body by using the Stark (L2) signer to sign the payload_hash.

signable_message

Message to sign with L1 wallet to verity withdrawal request

Used to generate the x-imx-eth-signature header by using the Ethereum (L1) signer to sign the signable_message

stark_key

Public stark key of the withdrawing user

As stark_key in the request body

vault_id

The ID of the vault the asset belong to

As vault_id in the request body

2. Generate signersarrow-up-right

Enabling users to withdraw assets requires a user's signature, so your application will need to create signers. See the guide on how to generate signers.

3. Create withdrawalarrow-up-right

💡ENDPOINT:

  • createWithdrawal

Javascript example of withdrawing ETH from L2 to L1:

4. Get the assetType valuearrow-up-right

This value is required in the next step to complete the withdrawal.

5. Call contract to complete withdrawalarrow-up-right

Last updated