Code Examples

Real-world integration examples for different use cases and platforms.

Freelance Marketplace

Create an escrow for a freelance project with 90% to freelancer, 10% platform fee.

import { calculateTaskSplits } from '@/lib/blockchain/split-calculator';
import { PublicKey, Keypair } from '@solana/web3.js';

async function createFreelanceEscrow(
  client: Keypair,
  freelancer: PublicKey,
  projectAmount: number
) {
  const PLATFORM_ADDRESS = new PublicKey('...');
  
  // Calculate splits (10% platform fee)
  const { splits, totalAmount } = calculateTaskSplits(
    freelancer,
    PLATFORM_ADDRESS,
    projectAmount
  );
  
  // Create escrow
  const escrowId = Date.now();
  await program.methods
    .createEscrow(
      new BN(escrowId),
      splits,
      new BN(totalAmount)
    )
    .accounts({
      payer: client.publicKey,
      // ... other accounts
    })
    .signers([client])
    .rpc();
  
  console.log('Escrow created: ' + escrowId);
  console.log('Freelancer receives: ' + (projectAmount / 1e6) + ' USDC');
  console.log('Platform fee: ' + ((totalAmount - projectAmount) / 1e6) + ' USDC');
  console.log('Client pays: ' + (totalAmount / 1e6) + ' USDC');
  
  return escrowId;
}

Complete Integration Example

Full workflow from creation to settlement:

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

async function completeEscrowWorkflow() {
  // 1. Setup
  const connection = new Connection('https://api.devnet.solana.com');
  const payer = Keypair.generate();
  const worker = Keypair.generate();
  const platform = new PublicKey('...');
  
  const PROGRAM_ID = new PublicKey('3iKABSF5zoQjGPykxUQNxbm7eQADqs8DreuGupggc679');
  const USDC_MINT = new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr');
  
  // 2. Calculate splits
  const workerAmount = 100_000_000; // 100 USDC
  const splits = [
    { recipient: worker.publicKey, bps: 9000 },
    { recipient: platform, bps: 1000 }
  ];
  const totalAmount = 110_000_000; // 110 USDC
  
  // 3. Derive PDAs
  const escrowId = new BN(Date.now());
  const [escrowPDA] = PublicKey.findProgramAddressSync(
    [Buffer.from('escrow'), payer.publicKey.toBuffer(), escrowId.toArrayLike(Buffer, 'le', 8)],
    PROGRAM_ID
  );
  const [vaultPDA] = PublicKey.findProgramAddressSync(
    [Buffer.from('vault'), escrowPDA.toBuffer()],
    PROGRAM_ID
  );
  
  // 4. Create escrow
  await program.methods
    .createEscrow(escrowId, splits, new BN(totalAmount))
    .accounts({
      payer: payer.publicKey,
      escrow: escrowPDA,
      mint: USDC_MINT,
      vault: vaultPDA,
      systemProgram: SystemProgram.programId,
      tokenProgram: TOKEN_PROGRAM_ID,
    })
    .signers([payer])
    .rpc();
  
  console.log('✅ Escrow created');
  
  // 5. Fund escrow
  const payerTokenAccount = await getAssociatedTokenAddress(USDC_MINT, payer.publicKey);
  
  await program.methods
    .fundEscrow()
    .accounts({
      payer: payer.publicKey,
      escrow: escrowPDA,
      payerTokenAccount,
      vault: vaultPDA,
      tokenProgram: TOKEN_PROGRAM_ID,
    })
    .signers([payer])
    .rpc();
  
  console.log('✅ Escrow funded');
  
  // 6. Approve escrow (optional)
  await program.methods
    .approveEscrow()
    .accounts({
      authority: payer.publicKey,
      escrow: escrowPDA,
    })
    .signers([payer])
    .rpc();
  
  console.log('✅ Escrow approved');
  
  // 7. Settle escrow
  const workerTokenAccount = await getAssociatedTokenAddress(USDC_MINT, worker.publicKey);
  const platformTokenAccount = await getAssociatedTokenAddress(USDC_MINT, platform);
  
  await program.methods
    .settleEscrow()
    .accounts({
      authority: payer.publicKey,
      escrow: escrowPDA,
      vault: vaultPDA,
      tokenProgram: TOKEN_PROGRAM_ID,
    })
    .remainingAccounts([
      { pubkey: workerTokenAccount, isWritable: true, isSigner: false },
      { pubkey: platformTokenAccount, isWritable: true, isSigner: false },
    ])
    .signers([payer])
    .rpc();
  
  console.log('✅ Escrow settled');
  console.log('Worker received: ' + (workerAmount / 1e6) + ' USDC');
  console.log('Platform received: ' + ((totalAmount - workerAmount) / 1e6) + ' USDC');
}

More Examples

Find more examples and integration guides in our GitHub repository:

View on GitHub
MarketBrowse
Messages
Profile