Hey Zama team
I’m currently working on a confidential voting dApp based on FHEVM, and I’m trying to deploy the FHEPrivateVoting contract using the Relayer SDK from a Hardhat script (Node.js).
However, I’m running into an issue with the SDK when used in a Node (CommonJS) context.
When I try importing the SDK like this:
import { createInstance, SepoliaConfig } from “@zama-fhe/relayer-sdk”;
or even
import { createInstance, SepoliaConfig } from “@zama-fhe/relayer-sdk/web”;
I get the following error:
ReferenceError: self is not defined
at @zama-fhe/relayer-sdk/lib/web.js:40:16
This happens because the web
build expects a browser or WebWorker environment (where self
is defined), but Hardhat uses Node.js runtime (CommonJS).
When I try using:
import { createInstance, SepoliaConfig } from “@zama-fhe/relayer-sdk/node”;
it only works under pure ESM projects — but Hardhat scripts use CommonJS, so it fails to import.
My question:
Is there a CommonJS-compatible entry point (like /lib/node.cjs) or a recommended way to use the relayer SDK from Hardhat or Node.js deployment scripts?
Environment:
- Node.js v22
- Hardhat 2.22.x
- @zama-fhe/relayer-sdk 0.2.0
- Target network: Sepolia (using relayer.testnet.zama.cloud)