Private payroll on Solana.

ZK-shielded payroll for onchain teams. Drop a CSV, sign once, run the cycle. The chain settles. The salary doesn’t.

Works with

  • SOL
  • USDC
  • USDT
usenori.xyz / payroll
mainnet

Cycle 2026-05-01 · 5 contributors

Run private payroll

USDC
RecipientAddressAmountStatus
  • Alice Cheng8xKjP…8H14,200.00ok
  • Ben Park3FzN1…4kQ3,150.00ok
  • Carla MendesAbqW9…vTm1,800.00queued
  • Dev fund · ops7gPw…nL9c5,200.00queued
  • Sasha Liu1xQs…vR2d5,600.00queued
Gross19,950.00 USDC
Fee59.85 + 0.005 SOL
Net19,890.15 USDC

One signature. Three-second proof.

~3sProof generated in your browser, before you sign.
0.30%Plus 0.005 SOL per payment. Paid to the protocol. No markup.
1Wallet signature per cycle, no matter how many contributors.

One call from your code.

Same flow whether you’re shipping a wallet, an app, or a payroll runner. Inputs in, proof out, transaction signed, recipient paid.

npm install @cloak.dev/sdk

pay.ts
import { transact, createUtxo } from "@cloak.dev/sdk";

await transact(
  {
    inputUtxos: [/* your shielded UTXOs */],
    outputUtxos: [await createUtxo(amount, owner, mint)],
    externalAmount: amount,
    depositor: wallet.publicKey,
  },
  { connection, wallet, relayUrl, programId },
);

Common questions.

Where does the proof run?
In your browser. Your wallet signs once. Inputs, amounts, and recipients never leave the laptop unencrypted.
Can my auditor see what they need?
Yes. A viewing key gives one auditor read-only access to your full ledger off-chain. Counterparties, amounts, timestamps. Revocable.
Does my team need a new wallet?
No. Phantom, Solflare, Backpack. Any Solana wallet. Recipients receive SOL, USDC, or USDT into their existing accounts.

Run private payroll.

Launch app