Skip to main content

Getting Started

This guide walks through the core integration flow: initialize the SDK, authenticate a wallet, and perform your first private transactions.
For a minimal copy-paste example, see the TypeScript Quickstart. This guide explains each step in detail.

Prerequisites

Step 1: Initialize the SDK

Configuration Options

Step 2: Authenticate

Connect a wallet and authenticate in a single call:

Using Browser Wallet (MetaMask, etc.)

When does credentialRequired fire? credentialRequired only fires when persistence with pin or password unlock is configured. For the simple case (no persistence), authenticate() always returns authenticated directly.
Using React? The React SDK provides createWalletAdapter() and authenticateWithWalletAdapter() which handle this for you. See the React Getting Started guide.

Authentication State

Step 3: Check Balance

Each token has two balances: a shielded balance (tokens inside the private pool, only visible to you) and a wallet balance (your public on-chain balance). Both are returned together in a TokenBalance object.

Step 4: Deposit Tokens

Move tokens from your public wallet into the shielded pool. Once deposited, your balance is private — only you can see it.

Deposit Steps

The deposit operation goes through several steps:
  1. wrapping - If depositing ETH, wrap to WETH
  2. approving - Approve token spending
  3. shielding - Execute the deposit transaction
  4. compliance - Wait for compliance check

Step 5: Send Private Transfer

Send tokens privately to another user’s privacy address. The recipient shares their privacy address with you (similar to sharing a bank account number). No on-chain observer can see the sender, recipient, or amount.
The recipient will see the tokens in their shielded balance after the transaction confirms.
For send() and unshield(), the returned txHash is a local placeholder until the canonical on-chain hash is available. Track status by requestId (e.g. sdk.transactions.getTransferStatus(requestId) / sdk.transactions.getUnshieldStatus(requestId)). For shield(), txHash is the real on-chain hash because the wallet signs and submits it directly.

Step 6: Withdraw Tokens

Move tokens out of the shielded pool to any public Ethereum address. This is how you “cash out” back to a regular wallet.

Step 7: Multi-Chain (Optional)

To operate on additional blockchains, create chain clients from the same SDK instance. Each chain client shares your identity but has independent auth, balances, and transactions:
See the Multi-Chain guide for patterns like parallel operations and cross-chain balance aggregation.

What’s Next

You’ve completed the core flow: init → auth → balance → deposit → send → withdraw. Here’s where to go from here:

Deposits

Deposit tokens into the shielded pool

Withdrawals

Withdraw tokens from the shielded pool

Private Transfers

Send tokens privately between users

Error Handling

Error codes and retry patterns

Multi-Chain

Operate across multiple blockchains

API Reference

Complete method signatures and type definitions
For cross-platform concepts (key management, auth methods, error codes), see the Setup section.