Getting Started
@cofhe/hardhat-plugin extends Hardhat with everything you need to build and test FHE-enabled contracts locally — mock contracts, a pre-configured CoFHE client, and test utilities.
What the plugin provides
- Mock contracts deployed automatically on every
npx hardhat test/npx hardhat noderun, simulating the full CoFHE coprocessor stack on the Hardhat network. hre.cofhe— a namespaced API for creating and connecting CoFHE clients with Hardhat signers.hre.cofhe.mocks— utilities for reading raw plaintext values and interacting with mock contracts directly in tests.- Pre-configured networks —
localcofhe,eth-sepolia, andarb-sepoliaare injected automatically.
Installation
Install the package
npm
npm install @cofhe/hardhat-pluginImport in your Hardhat config
hardhat.config.ts
import '@cofhe/hardhat-plugin';
export default {
solidity: '0.8.28',
};That's it. The plugin automatically deploys the mock contracts before every test run.
Configuration
The plugin adds an optional cofhe key to your Hardhat config:
hardhat.config.ts
import '@cofhe/hardhat-plugin';
export default {
solidity: '0.8.28',
cofhe: {
logMocks: true, // log FHE ops to the console (default: true)
gasWarning: true, // warn when mock gas usage is high (default: true)
},
};Pre-configured networks
The following networks are injected automatically. You can override any of them by defining the same key under networks in your config.
| Network | URL | Chain ID |
|---|---|---|
localcofhe | http://127.0.0.1:42069 | — |
eth-sepolia | Ethereum Sepolia public RPC | 11155111 |
arb-sepolia | Arbitrum Sepolia public RPC | 421614 |
For testnets, set PRIVATE_KEY (and optionally SEPOLIA_RPC_URL / ARBITRUM_SEPOLIA_RPC_URL) in your environment.
Auto-deployment
Mock contracts are deployed automatically before:
npx hardhat testnpx hardhat node
To skip auto-deployment (e.g., when running tests only against an external RPC):
COFHE_SKIP_MOCKS_DEPLOY=1 npx hardhat testNext steps
- Client — Create and connect a CoFHE client in tests
- Mock Contracts — Read plaintext values and interact with mock contracts
- Logging — Inspect FHE operations in test output
- Testing — End-to-end test patterns