@zksdk/evm-core
v0.1.1
Published
Base EVM contracts for ZKSDK CoProcessor integration
Downloads
85
Maintainers
Readme
ZKSDK EVM Co-Processor
Singleton co-processor contracts for FHE computations on EVM chains.
Overview
This package contains the EVM implementation of the ZKSDK Co-Processor, which:
- Receives encrypted computation requests from vault contracts
- Emits events for the off-chain listener to process
- Posts encrypted results back on-chain
- Callbacks to vault contracts with results
Contracts
| Contract | Description |
|----------|-------------|
| ZKSDKCoProcessor.sol | Singleton co-processor (deployed to same address on all chains) |
| CoProcessorClient.sol | Base contract for vaults to inherit |
| IZKSDKCoProcessor.sol | Interface for the co-processor |
| ICoProcessorCallback.sol | Callback interface for vault contracts |
Quick Start
# Install dependencies
npm install
# Compile contracts
npm run compile
# Run tests
npm testDeployment
Contracts are deployed using Hardhat Ignition with CREATE2 for deterministic addresses.
Deploy to Testnet
# Set up environment
cp .env.example .env
# Edit .env with your keys
# Deploy to Sepolia
npm run deploy:sepolia
# Deploy to other testnets
npm run deploy:polygon-amoy
npm run deploy:arbitrum-sepolia
npm run deploy:base-sepolia
# Verify all addresses match
npm run verify-addressesManual Deployment
npx hardhat ignition deploy ignition/modules/ZKSDKCoProcessor.ts \
--network sepolia \
--strategy create2 \
--parameters ignition/parameters.json \
--verifyIntegration Example
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@zksdk/evm-coprocessor/contracts/CoProcessorClient.sol";
contract MyVault is CoProcessorClient {
string public balanceBlobCid;
constructor(address coProcessor) CoProcessorClient(coProcessor) {}
function privateTransfer(
address receiver,
string calldata encryptedDataCid
) external returns (bytes32) {
bytes memory metadata = abi.encode(msg.sender, receiver);
return _submitRequest("cmux_token_v1_linear", encryptedDataCid, metadata);
}
function _onResult(bytes32, string calldata resultCid) internal override {
balanceBlobCid = resultCid;
}
function _onError(bytes32, string calldata) internal override {
// Handle error
}
}Architecture
Vault Contract → ZKSDKCoProcessor → Event Emitted → Listener → FHE Worker
↓
Vault Callback ← ZKSDKCoProcessor ← postResult() ← Listener ←Networks
Testnets
- Sepolia (Ethereum)
- Polygon Amoy
- Arbitrum Sepolia
- Base Sepolia
- Optimism Sepolia
Mainnets
- Ethereum
- Polygon
- Arbitrum
- Base
- Optimism
License
MIT
