# nTokens

The nTokens are ERC20 tokens, with a value pegged to a financial underlying asset and 1:\~1 in secondary markets due to accessible arbitrage opportunities.

## nTokens Info

### nTBILL1

The nToken $nTBILL1 is an ERC-20 token native to the Optimism Network that tokenizes the value of the iShares $ Treasury Bond 0-1yr UCITS ETF (IB01).

### nSP500

The nToken $nSP500 is an ERC-20 token native to the Optimism Network that tokenizes the value of the iShares Core S\&P 500 UCITS ETF (CSPX).

### nEM

The nToken $nEM is an ERC-20 token native to the Optimism Network that tokenizes the value of the iShares J.P. Morgan $ EM Investment Grade Bond UCITS ETF (IGAE).

### nICOM

The nToken $nICOM is an ERC-20 token native to the Optimism Network that tokenizes the value of the iShares Diversified Commodity Swap UCITS ETF (ICOM).

## nTokens contract overview

nTokens are built on top of the Open Zeppelin [ERC20 canonical](https://docs.openzeppelin.com/contracts/4.x/api/token/erc20#IERC20) implementation in combination with [LayerZero interoperability](https://layerzero.network/).

### How the nTokens works

The nTokens are a representation of a financial underlying asset, tokenized into an ERC20 that allows us to bring TradFi tools into the web3 ecosystem.

For example, a nToken is tied to a single underlying asset that is composed of the shares of a previously selected ETF (Exchange-traded Funds).

The nTokens allow Num Finance to bring the benefits of the robust, time-tested arena of TradFi into a growing industry like crypto, allowing users to access features like permissionless composability.

### Principal functions

* **mint**: The mint function works like any other ERC20. The user will transfer USDC into Num Platform and mint a nToken from the value in USDC selected.
* **reedem**: The redeem function works like any other ERC20. It allows the user to receive back the value in USDC of the nToken through a Burning process.

<figure><img src="https://3072199215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOUgGQuGsgX6IKKLpkeP6%2Fuploads%2FzI6Tk73MrrgNGEVsGCHH%2FProduct%20Flow.jpg?alt=media&#x26;token=ee1ccaaf-a16e-4faa-8d78-e2650789a0eb" alt=""><figcaption><p>This caption shows how nTokens works</p></figcaption></figure>

### Other functions

* **transfer**: The transfer function works like any other ERC20. Note that the transferred amount will be nTokens, not shares. This will match the user expected behavior, by sending *balanceOf* and not Shares.
* **deposit**: This function allows the user to deposit nTokens or USDC into Num Finance Platform.
* **withdraw**: This function allows the user to withdraw nTokens or USDC out of Num Finance Platform.

## Dependencies

The nTokens contract builds on top of widely used battle-tested components:

* OpenZeppelin Dependencies (v4.7.0)
* Implementation:
  * ERC20Upgradeable.sol
  * AccessControlUpgradeable.sol
  * ERC2771Context.sol
  * Proxy Structure
* LayerZero Dependencies (@layerzerolabs/lz-evm-oapp-v2 v2.0.2)
* OFTCore.sol
