Back to Documentation
> SDK_REFERENCE

SDK Reference

Complete API documentation for ZKPrime TypeScript and Rust SDKs

TypeScript SDK

ZKPrimeClient

Main client for interacting with ZKPrime privacy layer

class ZKPrimeClient {
  constructor(config: ClientConfig)
  
  // Transaction methods
  createPrivateTransfer(params: TransferParams): Promise<Transaction>
  submitTransaction(tx: Transaction): Promise<string>
  
  // Proof generation
  generateProof(params: ProofParams): Promise<Proof>
  verifyProof(proof: Proof): Promise<boolean>
  
  // State management
  getEncryptedBalance(address: string): Promise<EncryptedBalance>
  decryptBalance(encrypted: EncryptedBalance): Promise<number>
}

createPrivateTransfer()

Creates a confidential transfer transaction

const tx = await client.createPrivateTransfer({
  from: wallet,           // Sender wallet
  to: 'recipient_address', // Recipient public key
  amount: 1000,           // Amount in lamports
  memo?: 'Optional memo', // Optional transaction memo
  privacyLevel?: 'high'   // 'low' | 'medium' | 'high'
});

generateProof()

Generates a zero-knowledge proof for a statement

const proof = await client.generateProof({
  statement: 'balance >= 1000', // Statement to prove
  witness: { balance: 5000 },   // Private witness data
  circuit?: 'custom_circuit',   // Optional custom circuit
  hideWitness: true            // Hide witness in proof
});

getEncryptedBalance()

Retrieves encrypted balance for an address

const encrypted = await client.getEncryptedBalance(
  'address_public_key'
);

// Decrypt with private key
const balance = await client.decryptBalance(encrypted);
console.log('Balance:', balance);

Rust SDK

Native Rust SDK for high-performance integration with Solana programs

use zkprime_sdk::{ZKPrimeClient, PrivateTransfer};

// Initialize client
let client = ZKPrimeClient::new(Config {
    rpc_url: "https://api.mainnet-beta.solana.com",
    network: Network::MainnetBeta,
})?;

// Create private transfer
let transfer = PrivateTransfer {
    from: sender_keypair,
    to: recipient_pubkey,
    amount: 1000,
    privacy_level: PrivacyLevel::High,
};

// Submit transaction
let signature = client.submit_private_transfer(transfer).await?;
println!("Transaction: {}", signature);

Key Types

pub struct ZKPrimeClient { ... }
pub struct PrivateTransfer { ... }
pub struct Proof { ... }
pub struct EncryptedBalance { ... }

pub enum PrivacyLevel {
    Low,
    Medium,
    High,
}

pub enum Network {
    Devnet,
    Testnet,
    MainnetBeta,
}

API Reference

Common types and interfaces used across both SDKs

ClientConfig

interface ClientConfig {
  rpcUrl: string;
  network: 'devnet' | 'testnet' | 'mainnet-beta';
  defaultPrivacyLevel?: PrivacyLevel;
  proofCaching?: boolean;
  batchTransactions?: boolean;
  debug?: boolean;
}

TransferParams

interface TransferParams {
  from: Wallet | Keypair;
  to: string;
  amount: number;
  memo?: string;
  privacyLevel?: PrivacyLevel;
}

Proof

interface Proof {
  isValid: boolean;
  statement: string;
  publicInputs: any[];
  proofData: Uint8Array;
  privacyScore: number;
}

Code Examples

Private Token Transfer

import { ZKPrimeClient } from '@zkprime/sdk';
import { Wallet } from '@solana/web3.js';

const client = new ZKPrimeClient({
  rpcUrl: process.env.SOLANA_RPC_URL,
  network: 'mainnet-beta'
});

const wallet = new Wallet(secretKey);

async function sendPrivateTokens() {
  const tx = await client.createPrivateTransfer({
    from: wallet,
    to: 'recipient_address',
    amount: 1000000, // 1 token (6 decimals)
    privacyLevel: 'high'
  });
  
  const signature = await client.submitTransaction(tx);
  console.log('Sent private tokens:', signature);
}

sendPrivateTokens();

Verify Private Balance

async function checkPrivateBalance() {
  // Get encrypted balance
  const encrypted = await client.getEncryptedBalance(
    wallet.publicKey.toString()
  );
  
  // Decrypt with private key
  const balance = await client.decryptBalance(encrypted);
  
  // Generate proof of sufficient balance
  const proof = await client.generateProof({
    statement: 'balance >= 1000',
    witness: { balance },
    hideWitness: true
  });
  
  console.log('Has sufficient balance:', proof.isValid);
}

Next Steps