# 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;
};
```


---

# 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.caishen.tech/using-agent-cash.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.
