This node package contains the core Solidity host contracts needed to deploy an FHEVM instance on a host EVM blockchain.
run
npm install
To run forge tests:
npm run forge:soldeer
npm run test:forge
Use task:prepareUpgradeFHEVMExecutor when you need to deploy a new FHEVMExecutor
implementation without upgrading the proxy yet.
This task is meant for DAO-driven upgrades:
- it imports the existing proxy into the OpenZeppelin manifest
- it deploys the new implementation with
prepareUpgrade - it prints the implementation address and
reinitializeV*calldata - it does not mutate the proxy
Run it from a checkout containing the exact new host-contract code you want to deploy. For a backport hotfix, that means the checked-out branch/tag should match the new release.
The task still needs the current deployment addresses on disk because
contracts/FHEVMExecutor.sol imports addresses/FHEVMHostAddresses.sol.
Generate them first with the existing setter tasks.
If you are switching environments, restart from task:setACLAddress so both generated files
are rewritten from scratch before the remaining addresses are appended:
npx hardhat task:setACLAddress --address <acl>
npx hardhat task:setFHEVMExecutorAddress --address <executor-proxy>
npx hardhat task:setKMSVerifierAddress --address <kms>
npx hardhat task:setInputVerifierAddress --address <input-verifier>
npx hardhat task:setHCULimitAddress --address <hcu-limit>
npx hardhat task:setPauserSetAddress --address <pauser-set>Those commands generate:
addresses/.env.hostaddresses/FHEVMHostAddresses.sol
The values to feed into those setter tasks should come from the currently deployed
environment you are upgrading. A practical source of truth is the verified source bundle of
the implementation currently behind the proxy, specifically addresses/FHEVMHostAddresses.sol.
Then run:
npx hardhat task:prepareUpgradeFHEVMExecutor \
--network sepolia \
--upgrade-from-ref v0.11.1 \
--new-implementation contracts/FHEVMExecutor.sol:FHEVMExecutor \
--verify-contract trueNotes:
--networkselects where the implementation deployment transaction is sent.--upgrade-from-refis only used to load the old implementation source for OZ validation.--new-implementationcomes from your current checkout.- if you want the proxy address from
addresses/.env.host, add--use-internal-proxy-address true - the task runs
hardhat cleanbefore recompiling so the implementation is not built from stale artifacts compiled against another environment