host-contracts/README.md
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:
prepareUpgradereinitializeV* calldataRun 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.solThe 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 \
--current-implementation previous-contracts/FHEVMExecutor.sol:FHEVMExecutor \
--new-implementation contracts/FHEVMExecutor.sol:FHEVMExecutor \
--verify-contract true
Notes:
--network selects where the implementation deployment transaction is sent.--current-implementation points to the old implementation source available on disk.--new-implementation comes from your current checkout.addresses/.env.host, add --use-internal-proxy-address truehardhat clean before recompiling so the implementation is not built from stale
artifacts compiled against another environment