Built for the WTF!! Hackathon · iExec Nox
🔒 noxsend.edycu.dev
Confidential transfers · ERC-7984 · Intel TDX TEE

NoxSend🔒

Private send for the wallet you already have.

Ordinary ERC-20 transfer
transfer(0xLandlord, 1,850.00 USDC)
NoxSend confidential transfer
confidentialTransfer(0xLandlord, 0x7f3a…c1e9)
Next.js 14 · wagmi v2 148 tests green 100% contract coverage Live on Ethereum Sepolia · zero mock
The one line

Etherscan sees
32 bytes.
Your landlord sees nothing.

Every ERC-20 transfer is a public payslip — salary, rent, settlements, donations, naked forever. NoxSend encrypts the amount end-to-end and reveals it to exactly whom you choose.

calldata after a private send = one euint256 handle · no number, ever
The 2am problem

Alice pays her
contractor. The
whole world
gets
the receipt.

Wallets made keys usable — but amounts stay naked. Her landlord, her ex, and every block-explorer stalker now know what she earns and pays.

The usual fixes force a new chain, a mixer with regulatory stigma, or a new wallet. Normal people won't switch wallets to get what banks give them by default.

sepolia.etherscan.io/address/0xAlice
TOKEN TRANSFERS (ERC-20)
→ 0xLandlord  2,400 USDC rent
→ 0xClinic     180 USDC visible
→ 0xEmployer 6,000 USDC salary
→ 0xExchange 500 USDC cash-out
◉ Anyone can read every number, forever.
The solution

Wrap once.
Send privately.
Reveal on your terms.

NoxSend adds a private-send flow to the wallet you already use, on the token you already hold — without modifying either.

01Wrap USDC → confidential cUSD (ERC-7984, 1:1, redeemable)
02Send with the amount encrypted inside Intel TDX
03Reveal to the recipient, an auditor if you say so, no one else
noxsend.edycu.dev/send
Private send
TO
0xLandlord…4F2a
AMOUNT (encrypted end-to-end)
1,850.00 cUSD
Send privately →
calldata written on-chain = 0x7f3a…c1e9 · a 32-byte handle
How it works · one flow, deep

Your wallet & USDC stay unmodified. Privacy lives inside cUSD.

BROWSER · YOUR DEVICE wagmi injected connector MetaMask / Rabby — untouched @noxsend/core · HandleClient encryptInput · decrypt · viewACL add private send in ~10 lines /verify · judge page live events + ACL inspector · no mock iEXEC NOX · HANDLE GATEWAY Intel TDX TEE amount encrypted end-to-end fromExternal proof validation ERC-7984 viewer ACL self-serve · no account · no API key ETHEREUM SEPOLIA USDC · unmodified ERC-20 the token already in your wallet cUSD · ERC20ToERC7984Wrapper wrap · confidentialTransfer unwrap → finalizeUnwrap (proof-gated) SendLinkEscrow claim links · expiry + reclaim encrypt proof
2 thin contracts · protocol never modified · no backend — the only server code is static hosting, nothing to mock
Live demo · noxsend.edycu.dev

The one flow — with depth

Recorded live on Sepolia
01💵

Wrap

5,000 USDC → cUSD, 1:1 and redeemable.

ERC20ToERC7984Wrapper
HERO MOMENT
02🔒

Private send

1,850 cUSD. Calldata = a 32-byte handle. No amount, anywhere.

0xb03d69a2…
03👁️

Recipient decrypt

Signs EIP-712. Only the owner & viewers see the balance.

viewer-gated · decrypt
04🔀

Branch out

unwrap · claim-link for wallet-less recipients · auditor-grant.

addViewer · escrow · finalizeUnwrap
wrapprivate sendrecipient decrypt → ( unwrap | claim-link | auditor-grant )  ·  one unified npm run e2e, single pass, zero mock
Works end-to-end · NO mock data · 3★

Every step proven on live Sepolia

8 real txs · one e2e pass
Proof transactions · sepolia.etherscan.io/tx/…
Wrap 5,000 dUSD → cUSD0x83e5e9db…
Private send 1,850 cUSD0xb03d69a2…
Auditor grant · addViewer0x387fdc2f…
Claim-link create0x93d639c9…
Claim · wallet-less Bob0x18cfc9fa…
Reclaim · post-expiry refund0x110b56c6…
Unwrap burn0xe5645f66…
finalizeUnwrap · proof-gated0x205905ec…
Deployed & verified contracts
cUSD wrapper
0x82C281D7403e44d61968c2F49751a56877468991
SendLinkEscrow
0xF1Df763b425e20c16c039d80Ef1309c5a4A47f62
Selective disclosure — proven
isViewer(auditor) → true
isViewer(stranger) → false

You grant one auditor a view. Everyone else stays blind.

Why only iExec Nox

Selective disclosure is a one-call primitive.

ERC-7984 confidential balances + the allow / addViewer / viewACL ACL make governed reveal a single call. ZK can hide — it cannot reveal on demand.

Remove Nox and you rebuild
an FHE coprocessor + a KMS + a relayer + a disclosure registry — four systems, none composable with the USDC already in your wallet.
🔐

ERC-7984 + Intel TDX

Amounts encrypted end-to-end in a TEE; fromExternal proofs keep inputs out of calldata.

👁️

Viewer ACL

Recipient always; auditor only if you call addViewer. Anyone else: blind.

Proof-gated redemption

unwrap → finalizeUnwrap binds USDC release to a TEE decryption proof — the 1:1 peg holds.

Honest limitations · what we do NOT claim

Amount privacy.
Not address privacy.

Sender and recipient addresses stay public; wrap/unwrap amounts are visible at the wrapper boundary. Privacy lives inside cUSD — and we say so, out loud, in the demo.

Beta SDK, pinned @iexec-nox/handle@0.1.0-beta.13. TEE trust = Intel TDX + gateway liveness.

Private
The amount — encrypted end-to-end, revealed only to viewers you name.
Still public
The addresses and wrap/unwrap totals at the boundary.
Logged
15 findings in feedback.md — every SDK friction, including the one that changed our architecture (#2).
What shipped · real numbers
148
Tests passing

122 core + 26 Hardhat contract

100%
Contract coverage

stmts · branches · funcs · lines

8
On-chain proof txs

one unified e2e, zero mock

522ms
encryptInput p50

decrypt p50 821ms · live bench

Real deliverables — 100% built during the hackathon
✅ 2 thin contracts, protocol unmodified
@noxsend/core — private send in ~10 lines
✅ Next.js 14 dApp + wagmi injected
✅ Node/CLI surface (NoxSendClient)
/verify live events + ACL inspector
✅ Claim links for wallet-less recipients
✅ 7-stage CI: quality→security→e2e→release
✅ CodeQL · Dependabot · TruffleHog · Lighthouse
7-stage CI pipeline
Quality → Security → Build →
E2E → Performance →
Deploy Gate → Semantic Release
● All green
NoxSend 🔒 · WTF!! Hackathon · iExec Nox
MIT · © 2026 Edy Cu
The ask

Click one hash.
Watch privacy happen.

Open the live demo, hit the /verify page, and see real Sepolia traffic where the amount is a 32-byte handle — no number, no mock, nothing to trust us on.

demo     https://noxsend.edycu.dev
code     github.com/edycutjong/noxsend
chain    Ethereum Sepolia · cUSD 0x82C2…8991
scan → noxsend.edycu.dev
Same wallet. Same USDC. Etherscan sees 32 bytes. Your landlord sees nothing.
01 / 11
← → navigate · P presenter · ESC overview · C contrast · ⌘P → PDF