# Tokenization

Deposit ticks can be optionally represented by an ERC20 token, offering users a basic ERC20 interface to their deposit position. This is enabled for a tick by an external actor calling `tokenize(uint128 tick)` on the [`Pool`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/Pool.sol), which deploys an ERC20 token bound to the specified deposit tick. Once an ERC20 token exists for a tick, all users of that tick are automatically minted and burned tokens for deposit and redeem operations on that tick.

The basic ERC20 interface (`balanceOf()`, `allowance()`, `approve()`, `transfer()`, `transferFrom()`, etc.) operates in terms of deposit tick **shares**, rather than currency value, allowing for a stable, non-rebasing unit of account. The ERC20 token is also extended with several convenience APIs, including `depositSharePrice()` and `redemptionSharePrice()` price getters, for converting the shares amounts to a currency value using one of the two tick valuation approaches discussed in the [Deposit Flow](https://docs.metastreet.xyz/technical-overview/protocol-design/deposit-flow) section.

Tokenized ERC20 deposits can be used with other protocols in DeFi, such as automated market makers, lending protocols, etc.

See the [`ERC20DepositTokenImplementation`](https://github.com/metastreet-labs/metastreet-contracts-v2/blob/master/contracts/tokenization/ERC20DepositTokenImplementation.sol) contract for more information and the exposed API.
