• Hackathons
  • Features
  • Blog


zkCCIP aims to make ZK Verification in Ethereum less expensive by utilizing Chainlink CCIP. ZK Verification is executed in more scalable chains and the result is settled in Ethereum thanks to CCIP.

  • 0 Raised
  • 0 Juries


  • CCIP



The problem: Verifying zk-proofs in Ethereum Mainnet is expensive. Because Ethereum is congested most of the time, building zk-apps on Ethereum can be costly for the developers and users.

Our solution: The verification of zk-proofs could be executed in more scalable chains in order to reduce the cost in USD. A user can send their proof to the CCIP Router in Ethereum to a cheaper chain such as Avalanche. 

Where is Chainlink used?: 

ProofReceiverFuji.sol: https://github.com/egeaybars123/zk-ccip/blob/main/contracts/ProofReceiverFuji.sol#L201C26-L201C26

ProofSenderSepolia.sol: https://github.com/egeaybars123/zk-ccip/blob/main/contracts/ProofSenderSepolia.sol#L137  

Project flow: The proof is sent in the calldata in an Ethereum transaction to the CCIP Router. When the proof is received on Avalanche, the proof and the input is verified on a zk-verifier contract deployed in Avalanche. When it's verified, the result is sent back to Ethereum (true or false). We found out that users can save around 0.5-0.6 USD per tx.

In the case where blockchains are more congested and Chainlink CCIP is used heavily, we are expecting the net positive to increase because most of the costs originated from node fees in our solution, and the node fees could decrease when they are generating more revenue.

Some links:

Tech Stack: 

  • ZK: ZoKrates is utilized. A single constraint in the ZK circuit is used for this project as a proof-of-concept.
  • Contracts are written in Solidity, and transactions are sent from a JS script because Remix freezes when proof is sent in the calldata.

Github Repository: You can see the contract addresses here.