# Hyperbeat USDC

### General Vault Information

* **Vault Name:** Hyperbeat USDC
* **Vault Token Symbol:** hbUSDC
* **Chain:** hyperevm
* **Chain ID:** 999
* **Vault Token (hbUSDC):** `0x057ced81348D57Aad579A672d521d7b4396E8a61`
* **Decimals:** 18
* **Custom Feed:** `0xc82CAd78983436BddfcAf0F21316207D87b87462`
* **Data Feed:** `0xb013A5956f8b838B7E668DFbdf1efA978Ccc7a23`
* **Insurance Contract (for Deposits):** `0xd202CF41a607627cd1A31f650D13599b588eBd1c`
* **Redemption Contract (for Withdrawals):** `0xBb820D0c85C0B5D1B0dC8C6D3541fbb1AB4C7a60`

### Token Information

**Accepted Tokens:**

* **USDC:**
  * Address: `0xb88339CB7199b77E23DB6E890353E22632Ba630f`&#x20;
  * Decimals: 6

### Useful Links

* **Vault Token on Explorer:** [View on hyperscan](https://hyperevmscan.io/address/0x057ced81348d57aad579a672d521d7b4396e8a61)
* **Insurance Contract on Explorer:** [View on hyperscan](https://hyperevmscan.io/address/0xd202CF41a607627cd1A31f650D13599b588eBd1c)
* **Redemption Contract on Explorer:** [View on hyperscan](https://hyperevmscan.io/address/0xBb820D0c85C0B5D1B0dC8C6D3541fbb1AB4C7a60)
* **Vault Logo:** [Brand kit](https://www.hyperbeat.org/brand)

## Actions

### Depositing Tokens

To deposit tokens (e.g., USDC) into the hbUSDC vault, you must interact with the **Insurance Contract**.

**Steps:**

1. **Approve Spending**
   * Approve the Insurance Contract (`0xd202CF41a607627cd1A31f650D13599b588eBd1c`) to spend the deposit token (e.g., USDC).
   * Call `approve(address spender, uint256 value)` on the deposit token contract.
   * Parameters:
     * `spender`: Insurance Contract address.
     * `value`: Amount to approve, in the token’s native decimals (e.g., 6 for USDC).
2. **Perform Deposit**
   * Once approved, call `depositInstant` on the Insurance Contract.
   * `depositInstant(address tokenIn, uint256 amountToken, uint256 minReceiveAmount, bytes32 referrerId)`
   * **`tokenIn`:** Address of the token being deposited.
   * **`amountToken`:** Expressed in **18 decimals**, regardless of the input token’s decimals.
     * For USDC (6 decimals): `amountIn18Decimals = amountIn6Decimals * 10**12`.
   * **minReceiveAmount:** Minimum hbUSDC to receive. Can be 0.
   * **referrerId:** Bytes32 referrer ID. Use `0x0...0` if none.

***

## Withdrawing Tokens

Withdrawals are done through the **Redemption Contract** (`0xBb820D0c85C0B5D1B0dC8C6D3541fbb1AB4C7a60`). Two methods exist: **Instant** and **Classic**.

**Step 1 (Required for both methods): Approve**

* Approve the Redemption Contract to spend your hbUSDC.
* Call `approve(address spender, uint256 value)` on the hbUSDC Vault Token contract (`0x057ced81348D57Aad579A672d521d7b4396E8a61`).
* `spender`: Redemption Contract.
* `value`: Amount in 18 decimals.

**Step 2 (Option A): Instant Redeem**

* Immediate withdrawal, subject to a **0.5% fee**.
* **Call** `redeemInstant(address tokenOut, uint256 amountMTokenIn, uint256 minReceiveAmount)`
  * **tokenOut:** Address of the token to receive (e.g., USDC).
  * **amountMTokenIn:** Amount of hbUSDC to withdraw, in 18 decimals.
  * **minReceiveAmount:** Minimum amount to receive. Can be set to `0`.

**Step 2 (Option B): Classic Redeem**

* Withdrawals processed within **48 hours**, **no fee**.
* Call: `redeemRequest(address tokenOut, uint256 amountMTokenIn)`
  * **tokenOut:** Address of the token to receive (e.g., USDC).
  * **amountMTokenIn:** Amount of hbUSDC to withdraw, in 18 decimals.

## Additional Information

* **Token Balance (balanceOf):**
  * For deposit tokens, call `balanceOf(address)` on that token’s contract.
  * For hbUSDC balance, call `balanceOf(address)` on the hbUSDC vault token.
* **Withdrawal Processing (Classic):**
  * Classic withdrawals are processed in **\~48 hours**.
  * Assets are automatically sent upon processing.
* **Checking Withdrawal Status (Classic):**
  * Off-chain API via Midas (same format as hbUSDT).
  * Endpoint: `GET https://api-prod.midas.app/api/data/requests/pending?address=<USER_ADDRESS>&networkId=999`
  * Replace `<USER_ADDRESS>` with the wallet address.
  * The API will return a JSON object containing a `redemptions` array. Each object in this array represents a pending withdrawal request and includes details like the amount, creation date, and status (`pending`, `ready`, or `expired`).
