> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inco.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Confidential Token (cToken)

> Wrap any ERC-20 into a token with private balances and private transfer amounts

## What is cToken?

cToken turns any ERC-20 into a confidential token. Balances and transfer amounts are encrypted, only the holder can read them, and the token still moves on-chain like any other.

Four pieces work together:

| Piece          | Job                                                    |
| -------------- | ------------------------------------------------------ |
| WrapperFactory | Deploys one cToken per ERC-20                          |
| cToken         | The confidential token itself: wrap, transfer, unwrap  |
| CommonVault    | Holds the underlying ERC-20 backing the wrapped supply |
| Indexer        | Serves wallets, history, and prices to apps            |

## How it works

**Wrap.** Approve the cToken, call `wrap(to, amount)`. Your ERC-20 goes into the vault, you get an encrypted balance.

**Send.** Amounts travel encrypted. The transaction pays a small fee, and any extra is refunded.

**Unwrap.** Prove you have enough, burn confidentially, get the underlying back.

**Read.** Balances live on-chain as handles. You decrypt them off-chain, usually through a [session](/ctoken/sessions): one wallet signature, then silent reads.

## Networks

| Network      | `network`     | Indexer                                   | App                                                        |
| ------------ | ------------- | ----------------------------------------- | ---------------------------------------------------------- |
| Base         | `base`        | `https://api.ctoken.inco.org/api`         | [ctoken.inco.org](https://ctoken.inco.org)                 |
| Base Sepolia | `baseSepolia` | `https://api.ctoken.testnet.inco.org/api` | [ctoken.testnet.inco.org](https://ctoken.testnet.inco.org) |

Testing on Base Sepolia? Get USDC from the official [Circle faucet](https://faucet.circle.com/).

## Addresses

The SDK ships these, so you only name a network. v1 uses **the same addresses on Base and
Base Sepolia**:

| Contract                | Address                                      | Used for                            |
| ----------------------- | -------------------------------------------- | ----------------------------------- |
| `WrapperFactory`        | `0x6f9a0ECD77C3Dade8Dc14a507cAbABFD746575f8` | Resolving and creating cTokens      |
| `CommonVault`           | `0x35A38eFec618cD1924CBf4FB84bE187323Fa7E55` | Holds the wrapped ERC-20s           |
| `CTokenSessionVerifier` | `0x8D762303c41F822D3f38f8CE0f0fD1855d602c2A` | Scoped [sessions](/ctoken/sessions) |

```ts theme={null}
const client = CTokenClient.browser({ network: "base", walletClient });
```

Running your own deployment? Pass `contracts` and `sessionVerifier` to override.

<Info>
  Upgrade plumbing, for verification rather than integration: beacon
  `0xF9469C8e50bd8b8b2a764a52a7F9F9fEb7D63170`, cToken implementation
  `0x32B5E112474E609c885c50a46899B1e771B1A2D2`, factory implementation
  `0x593B6F3F2821ECB0cD8c62285aB771aa06ccA439`, vault implementation
  `0xD21b59e85072676D389Fd1af81588A666829F0A9`, session-verifier implementation
  `0x4B3e5e80D73a9A8cB53F301C2474f6e9bB2a3803`, timelock
  `0x63ae7B40592DD5fB9823BFafBe905f47656F01ff`.
</Info>

## Smart accounts

Safe and other ERC-1271 accounts work end to end: wrapping, sending, and reading balances through sessions.
