# The deposit flow

<figure><img src="https://2540391201-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDp4xlYT3A4hNguxDyFzM%2Fuploads%2FqH2DGyW1x7eXSibmLoJM%2Fimage.png?alt=media&#x26;token=13e02ffd-163b-456d-aca8-3aafcd3166d5" alt=""><figcaption><p>Deposit flow archtiecture</p></figcaption></figure>

Before User can trade, they need to deposit funds into StarkEx via Brine. To do so, they first deposit funds to the on-chain Starkware contract deployed by Brine. The application should then send a corresponding off-chain deposit transaction, which updates the off-chain state.

### **1.** User deposits funds on-chain. <a href="#alice_deposits_funds_on_chain_spot" id="alice_deposits_funds_on_chain_spot"></a>

Alice executes an on-chain transaction to deposit funds. The deposit operation supports deposits of ETH, ERC-20, ERC-721, and ERC-1155.

The on-chain `deposit` function gets the following parameters:

| `starkKey`        | The public Stark key that corresponds to the vault id.                                    |
| ----------------- | ----------------------------------------------------------------------------------------- |
| `assetType`       | The asset identifier of the token to be deposited.                                        |
| `vaultId`         | The recipient’s off-chain account.                                                        |
| `quantizedAmount` | For ERC-20 and ERC-1155, the amount to be deposited. For ERC-721, this value must be `1`. |

<mark style="color:purple;">**NOTE**</mark> : *A user can deposit to any vault, even to one that they do not own.*
