Search projects, hackathons, sponsors and tech

    ← All projects

    NULL

    Private distribution infrastructure for Ethereum. Distribute value, reveal nothing.

    Demo

    About

    A salary should arrive in someone's account without turning their income into a public spectator sport. On transparent blockchains, recurring payouts expose far more than transaction amounts: exact salaries, contractor rates, organizational hierarchies, and commercial relationships become permanently readable by anyone. Businesses require verifiable, audit-ready financial records. Contributors deserve personal financial privacy. NULL makes it possible to have both. NULL is an embeddable TypeScript toolkit and protocol that brings private, ENS-native payouts to Ethereum, with payroll and grant disbursements as its flagship use case. Instead of locking teams into a walled garden, NULL is built as an open developer toolkit. Available as an MIT-licensed npm package (@samarth208p/null-payouts), developers can embed private payouts directly into their own payroll platforms, DAO tooling, and enterprise treasury interfaces. For an organization, sending funds feels as intuitive as consumer banking: enter ENS names and amounts (manually or via CSV), verify the recipients, and authorize the payout. Each ENS name resolves to an onchain public encryption profile used to prepare that recipient's private allocation. The sender pays a human-readable ENS name; the recipient chooses their private exit wallet later. Behind the scenes, NULL compiles payments into funded distributions of eight fixed-size encrypted slots, padding unused positions so observers cannot infer team sizes or transaction structures. Larger rosters execute smoothly as consecutive batches with independent approvals, cryptographic receipts, and real-time progress tracking. Zero-knowledge proofs guarantee value conservation and authorization without ever exposing a plaintext payroll roster on chain. For recipients, NULL functions like a private payment inbox. Once users back up their local cryptographic keys and link their ENSv2 name, their browser scans public encrypted events. Recipients generate Noir UltraHonk zero-knowledge proofs to claim their funds against a global accumulator, completely hiding which batch their payout came from. Our latest deployment introduces private partial withdrawals: recipients can withdraw any exact amount to a fresh wallet while rolling the remainder into a newly generated private note. NULL is an unaudited testnet prototype on Sepolia. Senders naturally know what they paid, while deposits, exits, and ENS registrations remain public onchain events. Within those clear, practical boundaries, NULL eliminates public payroll surveillance on Ethereum.

    How it's made

    We built NULL as a high-performance TypeScript monorepo uniting a React and Vite reference application, modular SDK packages, Solidity smart contracts, five Noir zero-knowledge circuits, and dedicated services for governance and confidential compute. Our defining architectural decision was to build NULL from the ground up as an embeddable engine. The core SDK powers both external developer integrations and our reference web app, sharing a unified pipeline for name resolution, batch encryption, proving, and transaction reconciliation. ENSv2 serves as our identity and access-control backbone. Senders pay human-readable ENS names rather than unwieldy raw public keys. We leverage ENSv2's registry hierarchy and Permissioned Resolvers via authorizeTextRoles, empowering recipients to delegate editing rights for only their null.paymentProfile text record without risking domain ownership. The SDK continuously validates ownership, resolver health, and profile snapshots before batch compilation, approval, and broadcast. Noir and Barretenberg power our privacy layer. We engineered five specialized UltraHonk circuits on Ethereum Sepolia: shield, create_distribution, claim, withdraw, and withdraw_partial. Poseidon commitment trees track notes and distributions. The claim circuit proves membership in the global distribution accumulator without identifying the source distribution, while our partial withdrawal circuit mathematically proves that public exits and private change notes conserve total value. Chainlink CRE provides confidential payroll compute. Our TypeScript handlerInTee workflow retrieves payroll secrets, validates recipient allocations, and deterministically computes Poseidon commitment roots and encrypted delivery envelopes inside an enclave. Verified via CRE CLI simulation, the frontend strictly gates organization review until the enclave's exact output matches the local draft. Privy delivers institutional B2B treasury governance. The backend validates organization membership, wallet policies, and owner quorum before issuing an expiring, session-bound, single-use intent ticket. Privy server wallets execute raw secp256k1 digest signing over the verified payout intent, ensuring login identity is never conflated with spending authority. The Graph indexes public ciphertext events in real time. Matching and decryption happen entirely locally inside the recipient's browser worker using secp256k1, HKDF, and AES-GCM, verifying accumulator roots against the RPC before proving. Netlify Blobs provides atomic, lock-safe storage for single-use approval intents. Notable engineering highlights include our deterministic compiler mirroring: both the browser SDK and the CRE confidential handler share the exact same compiler logic, generating identical ciphertext roots from identical inputs so the client verifies confidential computation integrity without leaking plaintext payroll. Furthermore, NULL features fault-tolerant transaction reconciliation, inspecting onchain state to automatically recover from dropped connections without risking double-spends.