# SDK Reference

> Full reference for the @senddy/sdk TypeScript package.

Source: https://www.senddy.com/docs/developers/sdk
Last modified: 2026-08-01T23:49:54.000Z

---

## Installation

```bash
npm install @senddy/sdk
# or
pnpm add @senddy/sdk
```

## Core SDK

### SenddySDK

The main SDK class for interacting with the Senddy pool contract.

```typescript
import { SenddySDK } from '@senddy/sdk';

const sdk = new SenddySDK();
```

**Key methods:**

| Method | Description |
|---|---|
| `deposit()` | Deposit USDC into the pool |
| `depositBatch()` | Batch multiple deposits |
| `depositWithPermit2Sig()` | Deposit using Permit2 signature |
| `depositWithEIP3009()` | Deposit using EIP-3009 authorization |
| `quoteDepositShares()` | Get shares for a deposit amount |
| `quoteWithdrawAssets()` | Get assets for a share amount |
| `getIndex()` | Get current Merkle tree index |
| `getNullifierAccumulator()` | Get current nullifier accumulator |
| `getAssetConfig()` | Get asset configuration |
| `depositInfo()` | Get deposit details |
| `generateDepositId()` | Generate a deposit ID |

## Proof Generation

### proveShield

Generate a zero-knowledge proof to shield (privatize) a deposit.

```typescript
import { proveShield } from '@senddy/sdk';

const proof = await proveShield({
  // Shield circuit inputs
});
```

### proveSpend

Generate a zero-knowledge proof to spend (transfer or withdraw) private notes.

```typescript
import { proveSpend } from '@senddy/sdk';

const proof = await proveSpend({
  // Spend circuit inputs
});
```

## Attestor Client

### createAttestorClient

Create a client to communicate with the Senddy attestor service.

```typescript
import { createAttestorClient } from '@senddy/sdk';

const attestor = createAttestorClient({
  url: process.env.ATTESTOR_URL,
});

// Request a shield attestation
const shieldAttestation = await attestor.attestShield(proof);

// Request a spend attestation
const spendAttestation = await attestor.attestSpend(proof);
```

## Address Utilities

```typescript
import {
  isValidSenddyAddress,
  encodeSenddyAddress,
  decodeSenddyAddress,
} from '@senddy/sdk';

// Validate
isValidSenddyAddress('senddy1abc...'); // true/false

// Encode public key to Senddy address
const address = encodeSenddyAddress(publicKeyBytes);

// Decode Senddy address to public key
const { publicKey } = decodeSenddyAddress('senddy1abc...');
```

## Account Abstraction

Helpers for encoding calldata for smart wallet transactions:

```typescript
import {
  encodePoolV3DepositWithPermit2Calldata,
  encodePoolV3SpendCalldata,
} from '@senddy/sdk';

// Encode a deposit with Permit2
const depositCalldata = encodePoolV3DepositWithPermit2Calldata({
  amount,
  permit2Signature,
  permitData,
});

// Encode a spend transaction
const spendCalldata = encodePoolV3SpendCalldata({
  proof,
  publicInputs,
});
```

## Sync Engine

The sync engine monitors the blockchain for new commitments and nullifiers relevant to your keys.

```typescript
import { SyncEngine, TachyonSyncEngine } from '@senddy/sdk';

// Standard sync
const sync = new SyncEngine({ /* options */ });

// Tachyon sync — O(1) spent detection via precomputed nullifiers
const tachyon = new TachyonSyncEngine({ /* options */ });
```

## Solana Bridge

```typescript
import { CCTPBridge } from '@senddy/sdk';

const bridge = new CCTPBridge({
  // CCTP configuration
});
```

## Graph Client

Query the Senddy subgraph for on-chain data:

```typescript
import { Subgraph } from '@senddy/sdk';

const graph = new Subgraph();

// Query recent commitments, nullifiers, pool state, etc.
```

## Contract Addresses

```typescript
import { SHARED_CONTRACTS, V3_CONTRACTS } from '@senddy/sdk';

// Access deployed contract addresses
console.log(V3_CONTRACTS.pool);     // Pool contract
console.log(V3_CONTRACTS.verifier); // Verifier contract
```

## Key Derivation

```typescript
import { deriveKeysWithEIP712 } from '@senddy/sdk';

// Derive Senddy keys from an EIP-712 signature
const keys = await deriveKeysWithEIP712(signer);
```

## Memo Encryption

```typescript
import {
  encodeMemoEnvelopeV4_1,
  tryDecryptAsReceiverUnified,
} from '@senddy/sdk';

// Encrypt a memo for a recipient
const envelope = encodeMemoEnvelopeV4_1(memo, recipientPubKey);

// Decrypt a received memo
const memo = tryDecryptAsReceiverUnified(envelope, myPrivateKey);
```
