Installation
Add Cipher contracts to your Hardhat project
npm install @privacy-protocol/cipher-contracts @fhevm/solidity @openzeppelin/contractsThis installs:
@privacy-protocol/cipher-contracts— The Cipher Solidity contracts@fhevm/solidity— Zama’s FHE library (peer dependency)@openzeppelin/contracts— OpenZeppelin utilities (peer dependency)
Hardhat configuration
Update your hardhat.config.ts to support FHEVM and the required Solidity version:
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@fhevm/hardhat-plugin";
const config: HardhatUserConfig = {
solidity: {
version: "0.8.27",
settings: {
optimizer: { enabled: true, runs: 10 },
evmVersion: "cancun",
},
},
networks: {
sepolia: {
url: process.env.SEPOLIA_RPC_URL || "https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY",
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
},
},
};
export default config;Install the Hardhat plugin if you haven’t already:
npm install --save-dev @fhevm/hardhat-plugin @nomicfoundation/hardhat-toolboxInstall proof generation dependencies (optional)
If your application needs to generate ZK proofs (for submitting votes), install the proof generation stack:
npm install @aztec/bb.js@3.0.0-nightly @noir-lang/noir_js@1.0.0-beta.16 @aztec/foundation ethersVerify installation
Create a simple contract to verify everything compiles:
// contracts/TestImport.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {IPrivateDaoAdapter} from "@privacy-protocol/cipher-contracts/src/DaoToolkit/interface/IPrivateDaoAdapter.sol";
contract TestImport {
IPrivateDaoAdapter public adapter;
constructor(address _adapter) {
adapter = IPrivateDaoAdapter(_adapter);
}
}npx hardhat compileIf it compiles without errors, you’re ready to go. Delete TestImport.sol and proceed to the Contracts Guide.
Last updated on

