How it works

How Veil works, in plain language.

Veil lets you borrow USDC on Stellar against collateral you keep on Ethereum. A zero-knowledge proof carries the one fact a lender needs, that you have enough, without ever revealing how much you hold or which wallet is yours.

The flow, end to end

Four steps across two chains.

Your money never bridges. It stays locked on Ethereum, and only a proof crosses to Stellar. Here is the whole path.

Collateral stays on EthereumLocked on Ethereum, never bridged
The proof is checked on StellarNo bridge, no relayer holds funds
1Step 1Ethereum

Lock collateral on Ethereum

You wrap ETH into WETH and lock it in a Veil contract on Ethereum, bound to a private note. It stays there the whole time. Nothing bridges, so you never hand your funds to a custodian.

2Step 2Off-chain

Prove it privately

A zero-knowledge proof, generated in your browser, shows your locked amount clears the bar without revealing the amount or your wallet. The witness never leaves your device; only the proof travels onward.

3Step 3Stellar

Stellar verifies and lends

Stellar checks the proof on-chain and, if it holds, sends you real USDC. The proof, not a relayer, is what releases the money, and the amount never appears on Stellar.

4Step 4Stellar

Spend your USDC; collateral stays put

Your borrowed USDC is real Circle USDC you can use across Stellar. Your WETH stays locked on Ethereum, backing the loan — it never bridges. Repay on Stellar and the pool releases your WETH back to your Ethereum address, verified by a shielded release proof. The shielded WETH pool and liquidation-release are the next milestone.

What stays private

What is hidden, and what is shown.

The point of Veil is the gap between these two columns. Stellar learns just enough to lend, and nothing more.

PrivateBehind the veil, never sent
Collateral lockedSealed

We prove it clears the threshold (amount stays hidden)

  • Your exact collateral amount. It sits behind the veil and is never sent to Stellar.
  • Your Ethereum wallet. The address that holds your collateral never appears on the Stellar side.
PublicWhat the ledger and lender see
  • A threshold floor. Everyone sees only that you cleared the required minimum, never the figure above it.
  • The proof. The 256 bytes Groth16 over BN254 proof that Stellar checks on its own, the three curve points A · B · C.
  • A note commitment. One public value that ties your Ethereum lock to the Stellar loan, revealing nothing about the amount behind it.

Why it matters: you can borrow without doxxing your net worth to a lender or to everyone reading the chain. They learn you are good for it, not how good for it you are.

[ 01 ]

The trust model, in full

Every trust boundary is named on purpose. The proof is cryptographic; these are the components around it, each doing exactly one job.

Axelar's validator set
The attestation that your ETH is really locked crosses to Stellar over Axelar's decentralized validator set, authenticated on-chain by the Axelar gateway. Veil runs no relayer of its own.
The price oracle
Reflector, a live oracle on Stellar, supplies the ETH price the vault uses to size your loan and decide liquidation.
The one-time pin
An admin pins the pool to the Ethereum lock contract once, after seeing Axelar's first message. Until then the pool is fail-closed.
The loan term
The vault carries a loan term and liquidation threshold. Repay-to-release is live; wiring default-to-claim enforcement into the shielded WETH pool is the next milestone.
Unaudited testnet code
The contracts are unaudited and run on test networks. This is demo-grade, not production money.

Naming what we trust is the credibility move. The privacy itself holds no matter how the Ethereum state reaches Stellar, and the collateral is always enforced on Ethereum, where it lives.

[ 02 ]

The tech, briefly

Five real pieces, each doing one job. The evidence for all of them lives on the proof page.

Circom + Groth16
The collateral check is a Circom circuit, proven with Groth16 by snarkjs in your browser in about a second. The witness never leaves the device.
Groth16 on Soroban
A Groth16 over BN254 proof, verified natively on-chain by Stellar using Protocol 27 BN254 host functions.
Real Circle USDC
The loan disburses genuine Circle testnet USDC, the same token standard used across Stellar.
Reflector price feed
A live on-chain oracle on Stellar supplies the ETH price that sizes your loan.
Sepolia WETH lock
Real WETH is locked in a Veil contract on Ethereum Sepolia, where the deposit opening proof is verified on-chain before anything crosses.
Axelar GMP
The (commitment, amount) attestation crosses via Axelar General Message Passing, authenticated by the Soroban gateway — no trusted relayer.

Now see it run.

Open the app and walk the same four steps live. The collateral amount never appears, by design.

Back home