← Back to home

zkFusion

ZK-powered Dutch auctions for fast, private, provable intent settlement - Extension for 1inch LOP

Problem Statement

DescriptionzkFusionreplaces the on-chain Dutch auction used in 1inch Fusion with an zero knowlege based approach which does not rely on downcounting by block but provides the same privacy and guarantees as an onchain Dutch AuctionProblemIn Fusion and Fusion+, 1inch currently runs a descending-price Dutch auction for every intent (maker order). This auction happens on-chain, and resolvers compete by waiting until the price falls far enough to bid. This creates three challenges:⚡️Latency: Block time limits the speed of the auction.🔒Privacy: Bids are visible or implied through transactions.❌Inefficiency: Higher-value bids may be missed due to timing or congestion.Our Solution: zkFusion✔️ Bidders submithashed commitmentsto their bid (price, amount, nonce) to an on-chain contract created by a known factory.✔️ Anoff-chain auction runnercollects revealed bids and selects the optimal set (e.g., highest price or maximum fill).✔️ The runner generates aZK proofthat:All revealed bids match prior on-chain commitments.The selected bids were the best available.No better bids were omitted.✔️ Anon-chain verifier contract:Verifies the proof using Groth16 (via Circom/SnarkJS).Confirms that each winning bidder’s commitment matches theirmsg.sender.Validates the commitment contract came from the knownfactory.Triggers a call tofillOrder()in the 1inch Limit Order Protocol to settle the trade.This architecture matches the security guarantees of on-chain Dutch auctions but executes faster, more privately, and more flexibly.We extend the LOP by theIAmountGetterinterface

Solution

How it's madezkFusionis implemented using zero-knowledge circuits (Circom) and Solidity smart contracts, integrating with the 1inch Limit Order Protocol (LOP).Technical StackCircom + SnarkJS (Groth16): ZK circuit proves that selected bids are optimal, valid, and committed.Soliditysmart contracts:CommitmentFactory: DeploysBidCommitmentcontracts, tracks origins.BidCommitment: Stores bidder-submitted Poseidon hashes of their bids, tied tomsg.sender.zkFusionExecutor: On-chain verifier and executor. Checks proof, validates commitments, calls LOP'sfillOrder().Hardhat + Ethers.js: For deployment, simulation, and bid reveal tooling.1inch LOP Integration: Uses standard LOP order format for maker intents.fillOrder()is triggered from verifier contract post-proof.ArchitectureCommit Phase: Bidders submit commitments on-chain. Only the real bidder (viamsg.sender) can submit a hash.Reveal & Proving Phase: After bidding closes, the auction runner collects revealed bids, checks them, and generates a proof that:Bids match commitmentsThe chosen set is optimal for the makerVerification & Settlement: The ZK proof is submitted on-chain. The verifier:Validates the proofChecks the commitment contract address came from the known factoryVerifies each winner’s bid matches the on-chain commitmentExecutes the trade viafillOrder()from LOPDesign Innovations✅Decouples from block time: Unlike Fusion’s price decay, this sealed-bid model is instantaneous once proof is ready.✅No information leakage: Only winning bids are revealed. All others remain private.✅Trust-minimized: Even though the auction runner sees revealed bids, they can't omit better ones without being caught.✅Composable: Could extend to Fusion+ HTLC setup with minor changes, since only the Dutch auction is replaced.Security ModelAll bids are tied tomsg.sender; the auction runner cannot forge entries.Only commitment contracts created via a known factory are accepted by the verifier.All on-chain checks are enforced before a fill is triggered.ZK proof binds the commitment contract, maker order, and winning selection.Future Enhancements🌲Merkle tree commitmentsfor larger bidder sets.🔐Encrypted bid commitmentsfor privacy even from the auction runner.🌐Cross-chain compatibilityvia HTLC extensions (zkFusion+).📦Universal proof verifiercontract for multiple auction formats.Key documents from the repo are:Log from demo run: https://github.com/hamiha70/zkFusion/blob/main/demo-output-2025-08-03T09-59-18-260Z.mdCirum Circuit: https://github.com/hamiha70/zkFusion/blob/main/circuits/zkDutchAuction.circomDemo Script: https://github.com/hamiha70/zkFusion/blob/main/demo-showcase.jsReact Front end: https://github.com/hamiha70/zkFusion/tree/main/frontendOnchain Contracts: 5 conracts deployed: https://github.com/hamiha70/zkFusion/tree/main/contractsA lot of testing at circuit, smart contract, integration and orchestration level: https://github.com/hamiha70/zkFusion/tree/main/test-circuits https://github.com/hamiha70/zkFusion/tree/main/test

Hackathon

ETHGlobal Unite

2025

Prizes

  • 🏆

    Expand Limit Order Protocol2nd place

    1inch

  • 🏆

    🏆 Unite DeFi 2025 Finalist

    ETHGlobal

Contributors