Getting Started with DripPay

What is DripPay?

DripPay is a privacy-first on-chain payroll platform built on Fully Homomorphic Encryption (FHE). It lets organizations run payroll entirely on-chain while keeping salary amounts, balances, and disbursements fully encrypted. Nobody can see what anyone earns — not even the blockchain itself.

Built on Ethereum Sepolia with the Zama fhEVM coprocessor, DripPay performs real computations on encrypted data. Salaries are added, balances are updated, and budget checks are performed — all without ever decrypting the underlying values on-chain.

How It Works

The DripPay flow is straightforward:

1

Create Organization

Employer deploys a payroll smart contract, choosing ETH or ERC-20 payments.

2

Add Employees

Enter wallet addresses and salary amounts. Salaries are encrypted client-side with FHE before touching the chain.

3

Deposit Funds

Fund the contract with ETH or tokens to cover payroll.

4

Run Payroll

One click triggers batch payment. All arithmetic happens on encrypted values.

5

Employees Withdraw

Employees decrypt their balance with a wallet signature and withdraw real ETH/tokens.

Prerequisites

  • A browser wallet (MetaMask, Rainbow, Coinbase Wallet, etc.)
  • Sepolia ETH for gas fees and payroll funding
  • A modern browser with JavaScript enabled (Chrome, Firefox, Brave, Edge)
Need Sepolia ETH? Visit the Google Cloud Sepolia Faucet or the Alchemy Sepolia Faucet to get free test ETH.

Quick Links

For Employers

DripPay gives employers full control over private payroll operations. From creating an organization to exporting payment history, everything is designed to be simple while keeping salary data confidential.

Creating an Organization

Deploy a new payroll smart contract by clicking Create Organization on the employer dashboard. You will choose a name, select the payment currency (ETH or any ERC-20 token), and set a payroll cycle (weekly, bi-weekly, or monthly). A dedicated Organization contract is deployed on Sepolia, and you become its admin.

Adding Employees

Enter each employee's wallet address and their salary amount. The salary is encrypted client-side using Zama's fhevmjs library before the transaction is submitted. The plaintext salary never touches the blockchain.

Salaries are encrypted with FHE before leaving your browser. Even the RPC node and block explorers cannot see the amounts.

Depositing Funds

Fund your organization's contract with ETH or ERC-20 tokens. The contract balance must cover the total encrypted payroll before you can execute payments. A real-time USD estimate is shown based on current ETH prices.

Running Payroll

Trigger payroll with a single click. The contract iterates through all employees and performs encrypted addition on each balance: balance[emp] = FHE.add(balance[emp], salary[emp]). All arithmetic happens on ciphertext — no values are ever revealed during execution.

Revealing Salaries

As an admin, you can perform a bulk decrypt of all employee salaries with a single wallet signature. This uses Zama's re-encryption mechanism to decrypt values client-side, so you can review the payroll without exposing data on-chain.

Updating Salaries

Update any employee's salary at any time. The new amount is re-encrypted with FHE and submitted as an encrypted input. The old ciphertext is replaced, and the change takes effect on the next payroll run.

Budget Check

Before running payroll, DripPay performs an FHE comparison between the contract balance and the total payroll cost. This check happens entirely on encrypted values — the contract verifies it has sufficient funds without revealing any amounts.

Payroll Schedule

Configure your payroll cycle to weekly, bi-weekly, or monthly. The dashboard shows upcoming payroll dates and sends reminders. While payroll execution is still manually triggered, the schedule helps you stay on track.

Exporting History

Export your complete payroll history as a PDF report or CSV spreadsheet. Exports include timestamps, employee counts, transaction hashes, and decrypted amounts (if you have previously revealed them).

Payroll Receipts

Each payroll event generates a receipt that can be viewed in the dashboard and printed as a PDF. Receipts include the organization name, date, employee count, total amount (encrypted or revealed), and the on-chain transaction hash.

For Employees

Employees interact with DripPay through a simple portal. Connect your wallet, view your encrypted balance, and withdraw real funds — all while keeping your salary completely private.

Connecting Your Wallet

When you connect your wallet, DripPay automatically discovers all organizations that have added your address as an employee. No setup required — just connect and go.

Viewing Your Balance

Your accumulated payroll balance is stored as an encrypted value on-chain. To view it, you sign a message with your wallet that authorizes client-side decryption. The decrypted balance is displayed only in your browser and is never sent anywhere.

Decryption happens entirely in your browser using your wallet signature. No server or third party ever sees your balance.

Withdrawing Funds

Withdraw your accumulated balance as real ETH or ERC-20 tokens at any time. The contract decrements your encrypted balance and transfers the corresponding amount to your wallet. You can withdraw partial or full amounts.

Transaction History

View a complete history of all payroll credits and withdrawals associated with your address. Each entry shows the date, type (credit or withdrawal), amount (decryptable with your signature), and the transaction hash.

Payslips

Download encrypted payslips for each payroll cycle. Each payslip contains the organization name, pay period, and your encrypted salary amount. You can decrypt the salary directly on the payslip using your wallet signature, then save or print the document.

Joining an Organization

In most cases, organizations are automatically discovered when you connect your wallet. If an organization is not detected, you can manually join by entering its contract address. This is useful for newly deployed contracts that have not yet been indexed.

Smart Contracts

DripPay's on-chain layer consists of two core contracts deployed on Ethereum Sepolia, powered by Zama's fhEVM coprocessor for encrypted computation.

OrganizationFactory

The factory contract is the entry point for creating new organizations. It deploys individual Organization contract instances and maintains an index of all deployed organizations and their employees, enabling the auto-discovery feature.

Organization

Each organization is a standalone smart contract that manages its own employee list, encrypted salaries, encrypted balances, and payroll execution. All FHE operations (encrypted addition, comparison, and permission grants) happen within this contract.

Key Functions

FunctionDescription
createOrg(name)Deploy a new Organization contract via the factory
addEmployee(addr, encSalary)Register an employee with an FHE-encrypted salary
removeEmployee(addr)Remove an employee from the organization
updateSalary(addr, encSalary)Update an employee's encrypted salary
deposit()Fund the contract with ETH (payable)
runPayroll()Execute batch payroll on all encrypted balances
withdraw(amount)Employee withdraws accumulated funds
balanceOf(addr)Returns the encrypted balance handle for an employee
budgetCheck()FHE comparison: contract balance >= total payroll
revealSalary(addr)Admin re-encrypts an employee's salary for viewing

Contract Addresses (Sepolia)

The contracts are deployed on Ethereum Sepolia with the Zama fhEVM coprocessor. Key infrastructure addresses:

Zama ACL:0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D
Zama KMS:0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A
DripPay is a hackathon project and has not been audited. Do not use it with real funds on mainnet.

FHE Encryption

What is Fully Homomorphic Encryption?

Fully Homomorphic Encryption (FHE) is a cryptographic technique that allows computation on encrypted data without decrypting it first. The results, when decrypted, are identical to performing the same operations on the plaintext. Think of it as doing math inside a locked box — you get the right answer without ever opening the box.

How DripPay Uses FHE

DripPay leverages Zama's fhEVM, a coprocessor on Ethereum Sepolia that extends the EVM with FHE capabilities. The flow works in three stages:

  • Encrypt inputs: Salary amounts are encrypted client-side using fhevmjs before being sent to the contract.
  • Compute on ciphertext: The smart contract performs arithmetic (add, compare) on encrypted values using Zama's TFHE library.
  • Decrypt outputs: Only authorized users (the employee or admin) can request re-encryption and decrypt values client-side.

Client-Side Encryption

When an employer sets a salary, the plaintext amount never leaves the browser. The fhevmjs library encrypts it into an FHE-compatible ciphertext that can be processed by the Zama coprocessor:

typescript
1import { createInstance } from class="code-string">"fhevmjs";
2
3class=class="code-string">"code-comment">// Initialize the fhEVM instance
4const instance = await createInstance({
5 networkUrl: class="code-string">"https:class="code-commentclass="code-string">">//devnet.zama.ai",
6 gatewayUrl: class="code-string">"https:class="code-commentclass="code-string">">//gateway.zama.ai",
7});
8
9class=class="code-string">"code-comment">// Encrypt a salary amount(e.g., 5000)
10const input = instance.createEncryptedInput(
11 contractAddress,
12 userAddress
13);
14input.add64(salaryAmount);
15const encrypted = input.encrypt();
16
17class=class="code-string">"code-comment">// Send encrypted input to the smart contract
18await contract.addEmployee(employeeAddress, encrypted);

On-Chain Encrypted Math

Inside the smart contract, all salary and balance operations use Zama's TFHE library. The EVM never sees plaintext values:

solidity
1import class="code-string">"fhevm/lib/TFHE.sol";
2
3class=class="code-string">"code-comment">// Encrypted state variables
4mapping(address => euint64) private balances;
5mapping(address => euint64) private salaries;
6
7class=class="code-string">"code-comment">// Run payroll: add encrypted salary to encrypted balance
8function runPayroll(address[] memory employees) external {
9 for (uint i = 0; i < employees.length; i++) {
10 balances[employees[i]] = TFHE.add(
11 balances[employees[i]],
12 salaries[employees[i]]
13 );
14 TFHE.allow(balances[employees[i]], employees[i]);
15 }
16 emit PayrollExecuted(block.timestamp, employees.length);
17}

Client-Side Decryption

When an employee wants to view their balance, they sign an EIP-712 message that authorizes the Zama gateway to re-encrypt the value with a key only they hold:

typescript
1class=class="code-string">"code-comment">// Get the encrypted balance handle from the contract
2const balanceHandle = await contract.balanceOf(userAddress);
3
4class=class="code-string">"code-comment">// Generate a keypair for re-encryption
5const { publicKey, privateKey } = instance.generateKeypair();
6
7class=class="code-string">"code-comment">// Create and sign the EIP-712 authorization
8const eip712 = instance.createEIP712(publicKey, contractAddress);
9const signature = await signer.signTypedData(eip712);
10
11class=class="code-string">"code-comment">// Decrypt the balance(happens entirely client-side)
12const decryptedBalance = await instance.reencrypt(
13 balanceHandle,
14 privateKey,
15 publicKey,
16 signature,
17 contractAddress,
18 userAddress
19);
20
21console.log(class="code-string">"Your balance:", decryptedBalance);

Why FHE Over Other Privacy Tech?

There are several approaches to blockchain privacy — here is why DripPay chose FHE:

ApproachCompute on Encrypted Data?On-chain State?
FHE (Zama)Yes - full arithmeticYes - encrypted
ZK ProofsNo - only verificationYes - committed
MPCYes - distributedNo - off-chain

FHE is uniquely suited for payroll because it allows the smart contract to add encrypted salaries to encrypted balances and compare encrypted totals — operations that ZK proofs and MPC cannot perform directly on-chain.

Features

A comprehensive list of everything DripPay offers.

Encrypted Salaries

All salary amounts are FHE-encrypted before reaching the blockchain. No one can see what anyone earns.

Batch Payroll

Execute payroll for all employees in a single transaction. Encrypted addition across all balances.

Employee Auto-Discovery

Employees are automatically found when they connect their wallet. No manual configuration needed.

Salary Updates

Re-encrypt and update any employee's salary at any time. Changes take effect next payroll cycle.

Budget Check

FHE comparison verifies the contract has sufficient funds without revealing any amounts.

Reveal All Salaries

Admins can bulk-decrypt all salaries with a single wallet signature for review.

Encrypted Payslips

Employees download payslips with encrypted salary data and decrypt them client-side.

Export History

Export complete payroll history as PDF reports or CSV spreadsheets.

Multi-Currency USD Estimates

Real-time USD value estimates for ETH balances and transaction costs.

Payroll Scheduling

Set weekly, bi-weekly, or monthly payroll cycles with upcoming date tracking.

Interactive Demo

Try DripPay with mock data before deploying real contracts. Full end-to-end flow simulation.

Confetti on Payroll

Because running payroll should feel good. Celebratory confetti animation on successful execution.

Real-World Use Cases

DripPay isn't just a hackathon demo - it solves real problems for real people across the globe. Here's who benefits most from confidential on-chain payroll.

Emerging Markets with Capital Controls

In countries like Argentina and Nigeria, strict capital controls make it difficult to receive international payments. Companies already pay contractors in crypto to bypass these limitations. But on a public blockchain, every payment is visible - exposing salary data to governments, competitors, and the public. DripPay encrypts these payments so companies can pay globally while keeping compensation private.

Argentina has one of the highest crypto adoption rates in the world. Inflation above 200% drives demand for USD-denominated crypto payments. DripPay enables companies to pay Argentine contractors in ETH or stablecoins with full salary privacy.

Cross-Border Remote Teams

Distributed teams across different countries face a dilemma: pay on-chain for speed and transparency, but expose everyone's salary to each other. A senior engineer in the US earning $15k/mo and a junior developer in Southeast Asia earning $2k/mo shouldn't have to know each other's compensation. DripPay lets companies pay everyone on the same chain with the same contract - while keeping individual amounts confidential.

DAO Contributor Payments

DAOs often pay contributors through public on-chain proposals. This means every community member can see what every contributor earns - leading to compensation disputes, politics, and talent loss. DripPay lets DAOs run payroll where the total budget is verifiable but individual payments are encrypted. The treasury multisig executes payroll, and only each contributor can see their own allocation.

Freelancer and Contractor Payments

Freelancers working with multiple clients don't want Client A to see what Client B pays them. On public blockchains, any client can look up the freelancer's wallet and see all incoming payments. DripPay ensures that each payment from each organization is encrypted independently - only the freelancer and that specific employer can see the amount.

Compliance-Sensitive Industries

Industries like finance, legal, and healthcare have strict rules about compensation privacy. Public blockchain payroll is a non-starter in these sectors. DripPay bridges this gap - salaries are on-chain (auditable, trustless, automated) but encrypted (private, compliant). This opens up on-chain payroll for industries that previously couldn't consider it.

Our roadmap includes Verifiable Income Proofs - employees will be able to generate ZK attestations proving their salary falls within a range (e.g., "I earn above $X/month") without revealing the exact amount. This bridges FHE privacy with real-world needs like mortgage applications, visa proofs, and credit checks.

Frequently Asked Questions

Ready to get started?

Launch DripPay and experience private on-chain payroll.

Built with FHE by DripPay for PL Genesis: Frontiers of Collaboration Hackathon