Skip to main content

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.

Zcash deposits are live. Bitcoin and Dogecoin deposits are coming when those chains join the NEXUS execution layer.

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.
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.

Step 1: Get Your Vault Address

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

# 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

ChainConfirmationsBlock TimeWait
Zcash1075 sec~12.5 min
Bitcoin 🔄610 min~60 min
Dogecoin 🔄31 min~3 min
For deposits ≥ 1,000 ZEC, 15 confirmations are required (~18.75 min).

Step 4: Check Your vZEC Balance

// 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

// 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 for the full vault architecture and security model.