Quick Start Guide

Get started with ZaphWork's escrow protocol in 5 minutes. This guide will walk you through creating your first escrow and settling payments.

Prerequisites
What you'll need before starting
Node.js 18+
For running the TypeScript SDK
Solana CLI
For interacting with devnet
Devnet SOL
Get from solana airdrop

1Installation

Install the required dependencies for your project:

npm
npm install @solana/web3.js @coral-xyz/anchor

2Initialize Connection

Set up your connection to Solana devnet and load the program:

import { Connection, PublicKey, Keypair } from '@solana/web3.js';
import { AnchorProvider, Program } from '@coral-xyz/anchor';

// Connect to devnet
const connection = new Connection('https://api.devnet.solana.com', 'confirmed');

// Program ID
const PROGRAM_ID = new PublicKey('3iKABSF5zoQjGPykxUQNxbm7eQADqs8DreuGupggc679');

// Load your wallet (for testing, generate a new one)
const payer = Keypair.generate();

// Create provider
const provider = new AnchorProvider(connection, wallet, {
  commitment: 'confirmed',
});

3Create an Escrow

Create an escrow with split-based payment distribution:

// Define payment splits (must sum to 10000 basis points = 100%)
const splits = [
  {
    recipient: workerPublicKey,
    bps: 9000, // 90% to worker
  },
  {
    recipient: platformPublicKey,
    bps: 1000, // 10% platform fee
  },
];

// Create escrow
const escrowId = new BN(Date.now());
const totalAmount = 100_000_000; // 100 USDC (6 decimals)

await program.methods
  .createEscrow(escrowId, splits, new BN(totalAmount))
  .accounts({
    payer: payer.publicKey,
    mint: USDC_MINT,
    // ... other accounts
  })
  .signers([payer])
  .rpc();

console.log('Escrow created!');

4Fund the Escrow

Transfer tokens into the escrow vault:

await program.methods
  .fundEscrow()
  .accounts({
    payer: payer.publicKey,
    escrow: escrowPDA,
    payerTokenAccount: payerTokenAccount,
    vault: vaultPDA,
    tokenProgram: TOKEN_PROGRAM_ID,
  })
  .signers([payer])
  .rpc();

console.log('Escrow funded!');

5Settle Payment

Distribute funds to all recipients according to the splits:

// Get token accounts for all recipients
const recipientAccounts = [
  workerTokenAccount,
  platformTokenAccount,
];

await program.methods
  .settleEscrow()
  .accounts({
    authority: payer.publicKey,
    escrow: escrowPDA,
    vault: vaultPDA,
    tokenProgram: TOKEN_PROGRAM_ID,
  })
  .remainingAccounts(
    recipientAccounts.map(account => ({
      pubkey: account,
      isWritable: true,
      isSigner: false,
    }))
  )
  .signers([payer])
  .rpc();

console.log('Payment settled!');
Complete Example
Full working code you can copy and run
import { Connection, PublicKey, Keypair } from '@solana/web3.js';
import { Program, AnchorProvider, BN } from '@coral-xyz/anchor';
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';

async function createAndSettleEscrow() {
  // Setup
  const connection = new Connection('https://api.devnet.solana.com');
  const payer = Keypair.generate(); // Load your wallet here
  const worker = Keypair.generate();
  
  const PROGRAM_ID = new PublicKey('3iKABSF5zoQjGPykxUQNxbm7eQADqs8DreuGupggc679');
  const USDC_MINT = new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr');
  
  // Define splits
  const splits = [
    { recipient: worker.publicKey, bps: 9000 },
    { recipient: platformAddress, bps: 1000 },
  ];
  
  // Create escrow
  const escrowId = new BN(Date.now());
  await program.methods
    .createEscrow(escrowId, splits, new BN(100_000_000))
    .accounts({ /* ... */ })
    .rpc();
  
  // Fund escrow
  await program.methods
    .fundEscrow()
    .accounts({ /* ... */ })
    .rpc();
  
  // Settle escrow
  await program.methods
    .settleEscrow()
    .accounts({ /* ... */ })
    .remainingAccounts(recipientAccounts)
    .rpc();
  
  console.log('✅ Escrow created, funded, and settled!');
}

createAndSettleEscrow();

Next Steps

MarketBrowse
Messages
Profile