Introduction

Veil

Privacy-preserving recurring payouts on Solana

Veil enables recurring token payouts where the recipient set, per-recipient amounts, and Merkle proofs stay off-chain while settlement state remains verifiable on Solana via MagicBlock Ephemeral Rollups.


Why Veil?

On-chain transfers are transparent by default. That is useful for settlement, but many payroll and payout flows do not want to publish the full recipient mapping on-chain.

Veil solves this by:

  • hiding recipient mapping - only Merkle roots and schedule totals are committed on-chain
  • running private execution - claims execute in TEE via MagicBlock ER
  • supporting recurring payouts - schedules with configurable cadence and reserved balances
  • shipping operational tooling - SDK, coordinator, docs, and employer dashboard

Key Features

  • Private recipient lists - Merkle tree-based recipient privacy
  • Scheduled payments - recurring payouts with configurable intervals
  • TEE execution - private execution via MagicBlock ER
  • On-chain settlement - final state committed to Solana
  • Employer dashboard - vault management, schedule creation, and execution history
  • Bulk recipient import - CSV and Excel uploads in the dashboard
  • Saved templates - reuse local schedule drafts per wallet in the dashboard

Quick Start

npm install @veil-dev/sdk
import { VeilClient } from "@veil-dev/sdk";
import { Connection, Keypair, PublicKey } from "@solana/web3.js";
import { Wallet, BN } from "@coral-xyz/anchor";
 
const connection = new Connection("https://api.devnet.solana.com");
const keypair = Keypair.fromSecretKey(/* your secret key */);
const wallet = new Wallet(keypair);
const tokenMint = new PublicKey("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU");
const client = new VeilClient({ connection, wallet });
 
await client.initVault(tokenMint);
 
await client.createScheduleFromRecipients({
  tokenMint,
  recipients: [
    { address: recipient1, amount: 100_000n },
    { address: recipient2, amount: 200_000n },
  ],
  intervalSecs: 86400,
  reservedAmount: new BN(10_000_000),
  perExecutionAmount: new BN(300_000),
});

Get Started →


Architecture

┌─────────────────────┐
│      Solana         │  ← Settlement layer
│    Base Layer       │  ← Vaults, schedules, Merkle roots
└─────────────────────┘

┌─────────────────────┐
│     ER Layer        │  ← Private execution in TEE
│      (TEE)          │
└─────────────────────┘

┌─────────────────────┐
│    Coordinator      │  ← Automation + off-chain proofs
│     (Server)        │
└─────────────────────┘

Learn more →


Use Cases

  • Payroll - recurring employee payouts
  • Vendor payments - hide supplier relationships
  • Subscriptions - recurring settlements without publishing the whole recipient set
  • Token distributions - private recipient batches

Next Steps


Resources