---
# System prepended metadata

title: Deposit flow

---

# Deposit flow

1. Register Token

By registering the token your token will get assigned a token ID which can be later used to perform deposits and other rollup functionalities. This saves space as now an token address is just an int. 

Permissions: Control by the co-ordinator

2. Deposit

Users can specify an amount and token type while depositing, if the token exists thier deposit will be added to the queue of pending deposits. Operators can then at any point of time merge these pending deposits to the balance tree by using [this](https://ethresear.ch/t/batch-deposits-for-op-zk-rollup-mixers-maci/6883/2)

Permissions: Any user

3. Merge Deposit 

This function can be called to merge the deposit tree to the balances tree as indicated in the step above.
Operator calls the function defined [here](https://github.com/vaibhavchellani/BOPR-contracts/blob/master/contracts/rollup.sol#L275) along with the following data:
1. Merkle Proof 

As soon as the on-chain merging happens all the users get the funds on the rollup chain!

Permissions: Controlled by the co-ordinator


