# How to roll in tokens

## **ERC20 tokens**

The most outstanding advantage of Cycle is that it allows assets from multiple chains to be deposited into Cycle, which is named Rollin in our scenario. The most common scene is rolling erc20 tokens to Cycle, which is supported by SDK. Here we show an example of how to rollin ERC20 token from Sepolia to Cycle.

```typescript
async function getZkEvmClient(
    privateKey: string,
    userAddress: string,
    network: string = 'testnet',
    version: string = 'starfish'
) {
    const zkEvmClient = new ZkEvmClient()
    return zkEvmClient.init({
        log: true,
        network,
        version,
        child: {
          name: 'cycle',
          provider: new HDWalletProvider(privateKey, RPC_CYCLE),
          defaultConfig: {
            from: userAddress,
          },
        },
        parent: {
          name: 'sepolia',
          provider: new HDWalletProvider(privateKey, RPC_SEPOLIA),
          defaultConfig: {
            from: userAddress,
          },
        },
    })
}

async function rollin(
    tokenId: number,
    amount: BigNumberish,
    receiverAddress: string
) {
    const client = await getZkEvmClient()
    const erc20Token = client.customERC20(tokenId, true)
    const result = await erc20Token.deposit(amount, receiverAddress)
    const txHash = await result.getTransactionHash()
    const receipt = await result.getReceipt()
}
```

{% hint style="info" %}
Currently, we only have a test ERC20 token named 'CYCLE' used to present Cycle's capacity of all-chain assets management whose tokenId is 1. Soon we will have more origin tokens issued on Cycle and wrap tokens whose original tokens are already issued on Security Layer/Extend Layers.

Soon, we will provide a query-API listing all the tokens' information including token address and token id.
{% endhint %}

{% hint style="info" %}
When a new kind of ERC20 token is rolling-in from the origin layer to Cycle for the first time, the rollin smart contract will automatically deploy a wrapped ERC20 token contract that corresponds to the origin token deployed on the origin layer.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cyclenetwork.io/cycle-network-docs/quick-start/how-to-roll-in-tokens.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
