
GhostRoute
Secure ZK-layer anonymizing msg.sender for private, verifiable interactions with any smart contract
Demo
About
GhostRoute serves as a specialized privacy-preserving proxy layer designed to decouple user identity from on-chain actions. By utilizing Zero-Knowledge Proofs (ZKP), the protocol allows users to generate proofs of intent locally, ensuring that the msg.sender remains hidden from public observation. These proofs are then verified and executed via a secure relay, enabling seamless and anonymous interaction with Uniswap and other DeFi ecosystems. GhostRoute guarantees transaction integrity and cryptographic security without leaving a traceable link between the originator and the smart contract, effectively shielding the flow of capital across the blockchain.
How it's made
This project implements a privacy-preserving vault on the Ethereum blockchain. The core of the system is the PrivacyVault.sol smart contract, which leverages zero-knowledge proofs (ZKPs) to break the on-chain link between deposits and withdrawals, ensuring user privacy. The architecture is built on several key technologies: - Solidity & Foundry: The smart contracts are written in Solidity and developed using the Foundry framework for compiling, testing, and deployment. - Noir Language: The zero-knowledge circuits, which are the foundation of the privacy mechanism, are created using the Noir programming language. These circuits, located in the /circuits directory, are used to generate proofs that a user owns a valid deposit without revealing which one. - Merkle Trees: A Merkle tree is used to store commitments of the deposits. When a user deposits, a unique commitment is added to this tree. To withdraw, they must prove membership of their commitment within the tree without revealing the commitment itself. - Permit2: The system integrates Uniswap's Permit2 library (Permit2Lib.sol). This enhances user experience by allowing for gasless token approvals. Instead of a separate approve transaction, users can sign an off-chain message, which the PrivacyVault uses to pull the funds in a single, efficient transaction during the deposit. The workflow is as follows: a user deposits assets and a commitment is added to the Merkle tree. To withdraw, the user generates a ZK-proof off-chain using the Noir circuit, proving they own a valid, unspent deposit. They submit this proof to the PrivacyVault contract, which verifies it. If the proof is valid, the contract transfers the funds to a new address, severing the link to the original depositor. This combination of technologies creates a robust system for confidential transactions on a public ledger.