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

# Vault Deposits

> Deposit ZEC to NEXUS — live on Zcash today

<Info>
  Zcash deposits are **live**. Bitcoin and Dogecoin deposits are coming when those chains join the NEXUS execution layer.
</Info>

## Overview

Deposit ZEC into a NEXUS vault to get vZEC on NEXUS. Use vZEC in WASM smart contracts, AMMs, and DeFi. Your ZEC remains on Zcash — 1:1 backed, publicly auditable.

<Warning>
  Your wallet **must be mnemonic-based**. Vault creation requires a renewal key derived from your mnemonic (BIP-32 path `m/86'/133'/0'/1/0`). Without it, `getVaultAddress()` will throw. Always generate your wallet with `Wallet.generateMnemonic()` and back up the phrase.
</Warning>

## Step 1: Get Your Vault Address

```typescript theme={null}
import { NexusClient, Wallet } from '@yattacorp/nexus-sdk';

// Must be mnemonic-based — renewal key is derived from it
const wallet = Wallet.fromMnemonic(
  process.env.MNEMONIC!,
  'mainnet',    // 'mainnet' | 'regtest'
  undefined,    // use default BIP-32 path
  'zcash'
);

const client = new NexusClient(
  { rpcUrl: 'https://api.yattacorp.xyz', network: 'mainnet', chain: 'zcash' },
  wallet
);

// Returns: { vaultAddress, l2Address, redeemScriptHex, protocolKey, timelock }
// Internally calls nexus_deriveVaultFromPubkey with your pubkey + renewal key pair
const vault = await client.getVaultAddress(); // default: 16,128-block timelock (~2 weeks)
console.log('Deposit ZEC to:', vault.vaultAddress);
// regtest → "tmXxx..."   mainnet → "t1xxx..."
console.log('Your NEXUS address:', vault.l2Address);
```

## Step 2: Send ZEC to Your Vault

```bash theme={null}
# regtest / local testing
zcash-cli sendtoaddress "<VAULT_ADDRESS>" 1.0

# mainnet: use any Zcash-compatible wallet (ZecWallet, Nighthawk, zcashd)
```

Your vault address is a standard Zcash transparent address (t-addr). Any Zcash wallet can send to it.

## Step 3: Wait for Confirmations

| Chain       | Confirmations | Block Time | Wait           |
| ----------- | ------------- | ---------- | -------------- |
| **Zcash** ✅ | **10**        | 75 sec     | **\~12.5 min** |
| Bitcoin 🔄  | 6             | 10 min     | \~60 min       |
| Dogecoin 🔄 | 3             | 1 min      | \~3 min        |

For deposits ≥ 1,000 ZEC, 15 confirmations are required (\~18.75 min).

## Step 4: Check Your vZEC Balance

```typescript theme={null}
// Returns zatoshi as number (1 ZEC = 100,000,000 zatoshi)
const balance = await client.getBalance();
console.log('vZEC balance (zatoshi):', balance);
console.log('vZEC balance (ZEC):', balance / 1e8);
```

## Vault Security

Every vault has three spending paths:

```
Your Vault (Zcash P2SH t-addr)
├── Path 1 (Normal):  you + NEXUS co-sign — used for instant withdrawals
├── Path 2 (Renewal): renewal key + NEXUS — for key rotation
└── Path 3 (Escape):  you alone, after 16,128 blocks (~2 weeks)
    → Broadcast your pre-signed exit tx — no permission required
```

Your ZEC on Zcash always equals your vZEC on NEXUS — 1:1, verifiable by anyone.

## Withdrawal

```typescript theme={null}
// Withdraw vZEC back to a Zcash transparent address
// Returns: { success, txid, status, path, confirmed? }
const result = await client.withdrawFunds(
  't1abc...',     // destination Zcash t-address (mainnet) or 'tm...' (regtest)
  10_000_000,     // amount in zatoshi (0.1 ZEC)
  { waitForConfirmation: true }
);
console.log('Withdrawal txid:', result.txid);
console.log('Status:', result.status); // 'AwaitingUserSignature' | 'Broadcast' | 'Queued'
```

Withdrawals are processed via co-signing (Path 1) or autonomous batch (Path 2). vZEC is burned immediately; ZEC arrives after the transaction is confirmed on Zcash.

See [Vaults](/concepts/vaults) for the full vault architecture and security model.
