Documentation
How VeilDrop works.
Everything you need to distribute tokens confidentially, or claim an allocation someone sent you. No prior crypto or FHE knowledge required.
Overview
VeilDrop distributes ERC-7984 confidential tokens. Recipient addresses are public like any normal transfer, but the amount each address receives is encrypted end to end using Fully Homomorphic Encryption (FHE). Nobody but the recipient can ever see how much they were sent, not other recipients, not block explorers, not VeilDrop itself.
This matters because public unlocks and distributions get front run. Across 5,000+ tracked token unlock events, prices dropped 7 to 15 percent within days of an unlock exceeding 1 percent of circulating supply, as traders position against the visible allocation before it settles. Encrypting the amount removes that signal entirely while keeping the transfer itself fully verifiable on-chain.
VeilDrop is a frontend for the TokenOps SDK and is built on Zama's FHE protocol. All contracts are pre-deployed and audited by OpenZeppelin, this app only talks to them.
How it works
Every amount is encrypted client-side, in your browser, before it ever leaves your device. The plaintext number never touches the network. On-chain, the smart contract only ever operates on ciphertext: it can add, subtract, and compare encrypted balances without decrypting them, using FHE.
Reading a balance works the same way everywhere in this app. You'll see a masked placeholder like this:
Until you click Decrypt. That does two things: a one-time wallet signature authorizing your own key to decrypt values on that contract (free, no gas), then a decrypt request scoped to only the ciphertexts you hold access to. Nobody else's signature can unlock your amount, and yours can't unlock anyone else's.
Distribution modes
VeilDrop ships three distribution mechanisms. The wizard picks a sensible default based on your use case, but you can override it under "Advanced" in step 1.
Disperse
A push model. You send everything in a single transaction, tokens land directly in each recipient's wallet. Recipients do nothing to receive them.
- + One transaction, any list size
- + Nothing required from recipients
- − You (the sender) pay all the gas
- − One time wallet registration before first use
Airdrop
A claim model. You fund a pool and authorize each recipient's allocation, they claim on their own schedule via a link, within a claim window you set.
- + Recipients pay their own claim gas
- + Good for public and opt-in campaigns
- − One wallet signature per recipient, upfront
- − Recipients must actively claim
Vesting
A time-locked claim model. You lock up allocations in a vesting contract. Allocations unlock linearly over a schedule you set.
- + Aligns long-term incentives
- + Linear time-based release
- − Admin pays contract deployment gas
- − Recipients must claim unlocked slices
Rule of thumb: for large recipient counts, Disperse is the better default. It's one transaction regardless of list size. Airdrop or Vesting make more sense for payroll, team incentives, and smaller, opt-in distributions.
Creating a distribution
- 1
Pick a use case
Payroll, DAO rewards, investor distribution, grants, or community airdrop. Each preconfigures a sensible mode and copy.
- 2
Configure
Name the distribution and confirm the token. For Airdrop, also set the claim window.
- 3
Add recipients
Drag in a CSV of address,amount rows, or add them by hand. Invalid addresses, duplicates, and bad amounts are flagged live.
- 4
Review and execute
A checklist confirms registration, approvals, and balance before the button enables. Nothing executes until every check is green.
- 5
Done
Get your transaction hash, or for Airdrop, a claim link per recipient to share however you like.
Need test tokens first? Head to the faucet. Minting CTTT there is open and instant on Sepolia.
Claiming an allocation
If someone sent you a VeilDrop claim link, here's the whole flow:
- 1
Open the link
It works on its own. No account, no prior connection to VeilDrop needed.
- 2
Connect your wallet
Must be the exact address the link was sent to. VeilDrop tells you clearly if you've connected the wrong one.
- 3
Decrypt
One free wallet signature reveals your amount, with a short animation as it resolves.
- 4
Claim
One transaction (you pay the gas) sends the tokens to your wallet.
Decrypting only reveals the amount to you, in your browser. It's never sent anywhere readable by VeilDrop or anyone else.
Vesting schedule
Vesting is a time-locked release mechanism designed for payroll, team incentives, and investor allocations. Unlike static airdrops, a vesting schedule allows allocations to unlock gradually and linearly over time.
Here is the typical lifecycle of a vesting schedule:
- 1
Deploy & Deposit
The admin deploys a vesting schedule contract for the distribution. The contract holds the total token allocation securely on-chain.
- 2
Cliff & Duration
The schedule begins with a cliff period (during which no tokens unlock) followed by linear unlocking over the vesting duration. For example, a 1-year cliff with a 4-year linear vesting schedule.
- 3
Decrypted Claiming
Recipients visit the vesting page, sign a free FHE decrypt request to reveal the currently unlocked portion, and submit a transaction to claim that portion to their wallet. The remainder stays locked on-chain.
Supported tokens
VeilDrop supports two Sepolia confidential test tokens. The primary branded option is VeilDrop Confidential Token, symbol vCTT. It is an ERC-7984 confidential token deployed from this repository for the VeilDrop project.
TokenOps' CTTT remains supported as a fallback for general testing, especially for users already familiar with the TokenOps ecosystem. Both tokens work with the same Disperse and Airdrop flows because the SDK accepts any compatible ERC-7984 token address.
vCTT demonstrates full smart contract ownership for VeilDrop. CTTT stays available as a familiar TokenOps test token. Keeping both options makes the demo useful for reviewers and for anyone testing against the broader TokenOps ecosystem.
FAQ
Is this on mainnet?
No. VeilDrop currently runs on Ethereum Sepolia testnet only. The faucet, and every distribution, use test tokens with no real value.
Where do I get the token?
CTTT (the confidential test token) is minted for free from the faucet. There's no purchase or bridging step.
What's TTT for?
TTT is the plain ERC-20 backing CTTT under the hood. You won't need it directly in this app, CTTT mints are already fully backed.
Can VeilDrop see my amount?
No. Amounts are encrypted in your browser before submission and only decryptable by a wallet signature from the holder. There's no backend that ever sees plaintext values.
Why did I get asked to sign or approve something before I could send?
Registration and operator approval are one time, per wallet prerequisites the underlying contracts require before they can move your confidential balance. After the first time, later distributions skip straight to execution.
Testnet software, not audited for production use with real funds. Use at your own risk.
Ready to try it? Start distributing or get test tokens.