# 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