> For the complete documentation index, see [llms.txt](https://docs.caishen.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caishen.tech/using-agent-cash.md).

# Using Agent Cash

Caishen SDK provides the only wallets which support gasless stablecoin swaps, powered by Agent Cash.&#x20;

### 🏦 Cash Accounts

> **Cash** is a chain-abstracted, gasless stablecoin system designed to make stablecoin transfers seamless, fast, and free.

#### 🔍 What is Cash?

**Cash** is an internal ERC-20-compatible asset that abstracts away the complexity of stablecoins across chains. It enables instant, gasless transfers between wallets without needing users to worry about:

* Native gas tokens (e.g., ETH, MATIC)
* Stablecoin formats (e.g., USDC vs USDT)
* Blockchain networks (e.g., Arbitrum, Base, Solana)

#### 🧪 How It Works

* **Deposit**: Users deposit supported stablecoins (e.g., USDC, USDT) from chains like Arbitrum, Base, or Solana.
* **Issue**: The system issues equivalent **Cash** tokens 1:1, held in an abstracted balance.
* **Send**: These Cash tokens can be sent to any wallet address instantly with zero gas cost.
* **Withdraw**: When users withdraw, their Cash tokens are burned and they receive the original stablecoin on the selected chain.

> ⚠️ Different combinations of `agentId` and `userId` result in separate Cash balances.

#### ✅ Benefits

* 💸 Gasless transfers (no ETH/SOL required)
* ⚡ Cross-chain abstraction
* 🔄 Simple send/receive interface
* 🔐 Fully backed, 1:1 redeemable

***

#### 💱 Supported Stablecoins

| Chain    | Token | Symbol | Address          |
| -------- | ----- | ------ | ---------------- |
| Arbitrum | USDC  | USDC   | `0xaf88...5831`  |
| Arbitrum | USDT  | USDT   | `0xFd08...cbb9`  |
| Base     | USDC  | USDC   | `0x8335...2913`  |
| Solana   | USDC  | USDC   | `EPjFWd...TDt1v` |

> See `CASH_SUPPORTED_TOKENS` for full details.

#### 💰 Get Account Balance

Get current balance of all tokens for a specific account.

**Parameters**

| Name    | Type   | Description            |
| ------- | ------ | ---------------------- |
| account | number | The account identifier |

**Returns**

```
Promise<BalanceResponse>
```

**📘 Example**

```
const balance = await sdk.cash.getBalance({ account: 1 });
```

#### 💵 Deposit

Deposit a supported token into the account.

**Parameters**

| Name   | Type                | Description           |
| ------ | ------------------- | --------------------- |
| params | `DepositCashParams` | Token and amount info |

**Returns**

```
Promise<TransactionResponse>
```

**📘 Example**

```
await sdk.cash.deposit({
  account: 1,
  tokenAddress: '0x...',
  amount: '1000000000000000000',
});
```

#### 💸 Withdraw

Withdraw a supported token from the account.

**Parameters**

| Name   | Type                 | Description           |
| ------ | -------------------- | --------------------- |
| params | `WithdrawCashParams` | Token and amount info |

**Returns**

```
Promise<TransactionResponse>
```

**📘 Example**

```
await sdk.cash.withdraw({
  account: 1,
  tokenAddress: '0x...',
  amount: '1000000000000000000',
});
```

#### 🔁 Send

Send supported tokens between accounts.

**Parameters**

| Name   | Type                    | Description          |
| ------ | ----------------------- | -------------------- |
| params | `SendTransactionParams` | Token, to/from, etc. |

**Returns**

```
Promise<TransactionResponse>
```

**📘 Example**

```
await sdk.cash.send({
  fromAccount: 1,
  toAccount: 2,
  tokenAddress: '0x...',
  amount: '1000000000000000000',
});
```

#### 🪙 Get Supported Tokens

```
const tokens = await sdk.cash.getSupportedTokens();
```

***

### 🛠 Types

```
type TokenWithPrice = Token & {
  priceUSD: string;
};
```
