fhevm 网关暂停机制环境变量完全指南:PAUSER_PRIVATE_KEY 与 DEPLOYER_PRIVATE_KEY 的配置与使用

发布时间:2026/11/8 15:33:06

fhevm 网关暂停机制环境变量完全指南:PAUSER_PRIVATE_KEY 与 DEPLOYER_PRIVATE_KEY 的配置与使用 fhevm 网关暂停机制环境变量完全指南PAUSER_PRIVATE_KEY 与 DEPLOYER_PRIVATE_KEY 的配置与使用【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm本文是 fhevm 开源仓库中 Gateway 网关合约「暂停机制」的环境变量配置指南。文章以 gateway-contracts/docs/getting-started/pausing/env_variables.md 为骨架结合 pauseContracts.ts、Pausable.sol、GatewayConfig.sol 及 .env.example 等仓库源码与配置系统讲解暂停/恢复网关所需的两个核心环境变量、它们的来源、被哪些 Hardhat 任务消费以及底层合约如何校验调用者身份。读完本文你将能够正确配置本地与生产环境的暂停相关变量并理解暂停权限与所有权转移之间的安全边界。为什么暂停机制需要专门的环境变量fhevm Gateway 协议允许「暂停者pauser」在紧急情况下暂停网关合约阻止新的请求输入证明、解密请求被处理网关只能被手动暂停和恢复。暂停能力由PauserSet管理暂停者地址与抽象合约Pausable提供暂停/恢复功能共同支撑详见 暂停机制文档 与 PauserSet 合约文档。暂停操作由 Hardhat 任务驱动见下文而任务执行时需要签名账户因此仓库约定通过两个环境变量注入密钥环境变量说明Solidity 类型默认值备注PAUSER_PRIVATE_KEY某个暂停者的私钥bytes32--DEPLOYER_PRIVATE_KEY部署者的私钥bytes32--这两个变量的取值示例均来自 .env.example用于本地测试其中列出的账户都是通过以下命令生成的、已注资的 Hardhat 账户make get-accounts该命令定义在 Makefile 中实际执行的是DOTENV_CONFIG_PATH$(ENV_PATH) npx hardhat get-accounts即以.env中的助记词批量推导账户地址与私钥。PAUSER_PRIVATE_KEY暂停者私钥PAUSER_PRIVATE_KEY0x3588ffb4f4d9bea785a012b895543fe68f2d580a9d449decc91a25878064079a # (bytes32)暂停者私钥是注册在PauserSet合约中的某个暂停者地址所对应的私钥。它被用于通过暂停类 Hardhat 任务暂停合约包括pauseAllGatewayContracts。每个运营商operator都应将该环境变量设置为自己的热钱包hot wallet中用作暂停者的账户私钥。在 .env.example 中的来源与对应关系在 .env.example 中暂停者相关配置如下# Pausers # The number of pausers must be lower or equal to the number of pausers address defined below NUM_PAUSERS2 # Pauser 1 PAUSER_ADDRESS_00x6591319B97979Acc59b7191A8B4Ec381375bFc92 # accounts[23] (address) # Pauser 2 PAUSER_ADDRESS_10xb19e21437c47A541842bB84b018d3955462B35De # accounts[24] (address) # The first pausers private key # This is required for local tests and running the pausing task. It must correspond to one of the pausers private key PAUSER_PRIVATE_KEY0x3588ffb4f4d9bea785a012b895543fe68f2d580a9d449decc91a25878064079a # accounts[23], private key (bytes32)关键对应关系PAUSER_PRIVATE_KEY必须与PAUSER_ADDRESS_0即accounts[23]匹配。注释明确说明它必须对应于某个暂停者的私钥。本地测试时.env.example 还提供了NUM_PAUSERS、PAUSER_ADDRESS_{i}等注册信息用于把暂停者地址写入PauserSet合约。暂停者数量与运营商的关系按照 部署环境变量文档 的说明NUM_PAUSERS注册的暂停者数量应等于协议中注册的运营商总数KMS 节点数量 协处理器数量。每个暂停者预期是协议运营商控制的热钱包PauserSet合约提供addPauser、removePauser、swapPauser与isPauser四个函数来管理这些地址见 PauserSet 合约文档。DEPLOYER_PRIVATE_KEY部署者私钥DEPLOYER_PRIVATE_KEY0x7136d8dc72f873124f4eded25f3525a20f6cee4296564c76b44f1d582c57640f # (bytes32)这是部署者账户的私钥用于部署合约详见 部署环境变量文档。如果GatewayConfig合约的所有权由部署者持有则它还可用于恢复unpause被暂停的合约详见 暂停机制文档。在 .env.example 中DEPLOYER_PRIVATE_KEY对应accounts[1]# Private keys DEPLOYER_PRIVATE_KEY0x7136d8dc72f873124f4eded25f3525a20f6cee4296564c76b44f1d582c57640f # accounts[1], private key (bytes32) NEW_OWNER_PRIVATE_KEY0x7ae52cf0d3011ef7fecbe22d9537aeda1a9e42a0596e8def5d49970eb59e7a40 # accounts[2], private key (bytes32)两个变量如何驱动暂停/恢复任务暂停与恢复操作通过 pauseContracts.ts 中定义的 Hardhat 任务完成。该文件是理解这两个环境变量如何被消费的最佳源码入口。暂停类任务task:pauseAllGatewayContracts暂停全部网关合约task:pauseInputVerification仅暂停InputVerification合约task:pauseDecryption仅暂停Decryption合约这些任务需要本地设置PAUSER_PRIVATE_KEY环境变量。恢复类任务task:unpauseAllGatewayContracts恢复全部网关合约task:unpauseInputVerification仅恢复InputVerification合约task:unpauseDecryption仅恢复Decryption合约重要限制这些恢复任务只有在GatewayConfig合约的所有权由部署者持有时才能执行因此要求本地设置DEPLOYER_PRIVATE_KEY。一旦GatewayConfig的所有权转移到多签multi-sig所有者这些任务将无法再恢复合约届时必须通过多签合约调用GatewayConfig的unpause函数来恢复。源码层面的密钥注入逻辑在 pauseContracts.ts 中getGatewayContract辅助函数通过getRequiredEnvVar(envVarPrivateKeyName)读取对应的环境变量并用它构造签名钱包async function getGatewayContract( name: string, ethers: HardhatEthersHelpers, useInternalAddress: boolean, envVarPrivateKeyName: string, ) { // Get the account (pauser for pausing OR deployer for unpausing) wallet const accountPrivateKey getRequiredEnvVar(envVarPrivateKeyName); const account new Wallet(accountPrivateKey).connect(ethers.provider); ... }暂停单个合约时传入PAUSER_PRIVATE_KEY恢复单个合约时传入DEPLOYER_PRIVATE_KEYasync function pauseSingleContract(name: string, ethers: HardhatEthersHelpers, useInternalAddress: boolean) { const { contract, proxyAddress } await getGatewayContract(name, ethers, useInternalAddress, PAUSER_PRIVATE_KEY); await contract.pause(); console.log(${name} contract successfully paused at address: ${proxyAddress}\n); } async function unpauseSingleContract(name: string, ethers: HardhatEthersHelpers, useInternalAddress: boolean) { // NOTE: this task wont work once ownership will be transferred from initial deployer to the multisig const { contract, proxyAddress } await getGatewayContract(name, ethers, useInternalAddress, DEPLOYER_PRIVATE_KEY); await contract.unpause(); console.log(${name} contract successfully unpaused at address: ${proxyAddress}\n); }getRequiredEnvVar定义于 loadVariables.ts若对应环境变量缺失会直接抛错从而保证任务不会被错误地静默执行。批量任务task:pauseAllGatewayContracts/task:unpauseAllGatewayContracts则经由GatewayConfig合约的pauseAllGatewayContracts()/unpauseAllGatewayContracts()函数间接操作全部可暂停合约签名账户的选择逻辑与上述一致暂停用PAUSER_PRIVATE_KEY恢复用DEPLOYER_PRIVATE_KEY。所有任务还支持一个可选参数useInternalProxyAddress为false默认时从.env中的GATEWAY_CONFIG_ADDRESS等变量读取代理地址为true时改用/addresses目录下的内部代理地址。底层合约如何校验密钥对应的身份环境变量只是把私钥交给任务脚本真正的权限校验发生在链上合约中。Pausable 抽象合约暂停/恢复的双重准入Pausable.sol 继承 OpenZeppelin 的PausableUpgradeable并定义了pause()与unpause()pause()仅允许「注册在PauserSet中的暂停者」或GatewayConfig合约本身调用否则 revertNotPauserOrGatewayConfig。unpause()仅允许「GatewayConfig的所有者」或GatewayConfig合约本身调用否则 revertNotOwnerOrGatewayConfig。这解释了为什么暂停用PAUSER_PRIVATE_KEY、恢复用DEPLOYER_PRIVATE_KEY两者分别对应isPauser校验与owner校验。当GatewayConfig所有权转移给多签后DEPLOYER_PRIVATE_KEY不再等于owner恢复任务自然失效。GatewayConfig批量暂停/恢复的编排与幂等保护GatewayConfig.sol 中pauseAllGatewayContracts()带onlyPauser修饰符内部调用PAUSER_SET.isPauser(msg.sender)校验会读取Decryption与InputVerification的paused()状态仅暂停当前未暂停的合约若两者都已暂停则 revertAllGatewayContractsAlreadyPaused。unpauseAllGatewayContracts()带onlyOwner修饰符仅恢复当前处于暂停状态的合约若两者都未暂停则 revertAllGatewayContractsAlreadyUnpaused。从源码结构看代码注释还指出CiphertextCommits与GatewayConfig目前技术上可暂停但尚无可暂停函数因此pauseAllGatewayContracts()不会暂停它们KMSGeneration合约目前未被使用也无需暂停。暂停后哪些函数会被阻断当合约处于暂停状态时触发其请求类函数的交易会被 revert而已发送请求的响应仍会被接受进行中的共识可以继续达成其余 view 函数也仍然可调用Decryption合约见 Decryption.solpublicDecryptionRequest、userDecryptionRequest、delegatedUserDecryptionRequest均带whenNotPaused修饰符暂停时被阻断。InputVerification合约见 InputVerification.solverifyProofRequest带whenNotPaused修饰符该文件第 190 行附近暂停时被阻断。也就是说暂停保护的是新请求入口而非已在进行中的请求流程这与 暂停机制文档 的描述完全一致。配置与使用的完整步骤本地测试环境从 .env.example 复制生成.env文件确认PAUSER_PRIVATE_KEY与PAUSER_ADDRESS_0accounts[23]对应确认DEPLOYER_PRIVATE_KEY对应accounts[1]运行make get-accounts生成并查看已注资的 Hardhat 账户在已部署网关合约的本地网络上执行暂停/恢复任务例如npx hardhat task:pauseAllGatewayContracts npx hardhat task:unpauseAllGatewayContracts npx hardhat task:pauseDecryption npx hardhat task:unpauseDecryption npx hardhat task:pauseInputVerification npx hardhat task:unpauseInputVerification生产环境每个运营商将PAUSER_PRIVATE_KEY设置为自己的热钱包暂停者私钥只要GatewayConfig仍由部署者或由部署者私钥控制持有所有权DEPLOYER_PRIVATE_KEY即可用于恢复所有权一旦移交多签恢复必须改走多签调用GatewayConfig.unpause的治理流程DEPLOYER_PRIVATE_KEY将不再具备恢复权限。安全要点总结暂停者预期是运营商控制的热钱包私钥泄露风险由运营商自行管理PAUSER_PRIVATE_KEY与DEPLOYER_PRIVATE_KEY权限不对称前者只能暂停后者作为所有者既能恢复也掌握GatewayConfig的全部管理职能所有权移交多签是安全模型的一部分此后即使持有部署者私钥也无法单独恢复合约防止单点故障两个变量的 Solidity 类型均为bytes32与账户私钥的 32 字节格式一致配置时必须带上0x前缀。如需深入了解暂停的完整工作流、PauserSet的暂停者管理函数或部署时其他环境变量的说明可继续阅读 暂停机制文档、PauserSet 合约文档、部署环境变量文档 与 本地部署指南。【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/9 1:04:50

天气概率播报机器人:从数据源选型到推送链路全解析

CloddsBot 这个名字我第一眼看到就记住了——Clodds 是 clouds 和 odds 的合成词,云和概率拼在一起,基本就把这个项目的灵魂说清楚了:它不是一个只会报“今天 24 度、明天有小雨”的普通天气机器人,而是一个帮你判断“今天这事儿靠…

2026/11/9 0:34:45

GWO-SVR算法在工业预测中的应用与实现

1. 项目背景与核心价值灰狼优化算法(GWO)与支持向量回归(SVR)的结合在工业预测领域展现出独特优势。这个项目完整实现了从算法原理到GUI应用的全流程开发,特别适合需要处理小样本、非线性回归问题的场景。我在实际工业预测项目中多次采用这种组合方案,相…

2026/11/9 4:28:55

山地无人机路径规划:PSO与DWA混合算法实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/9 12:10:41

考电工证分等级吗良心建议别再怕考不过白交培训费

考电工证分等级吗良心建议别再怕考不过白交培训费 怕考不过白交培训费?别慌,考电工证分等级吗?这个问题很多人一上来就问,尤其是刚下定决心报名的你,心里没底、怕交了钱白搭。作为干了十年的应急管理行业老手,我得说句良心建议:…

2026/11/9 12:10:41

电工证分为哪三种官方报名入口在哪

电工证分为哪三种官方报名入口在哪 证书过期了不知道怎么复审延期?别慌,这事儿我见过太多人踩坑了。今天咱们就聊聊【电工证分为哪三种】这事儿,再顺带讲讲怎么通过【官方报名入口】搞定复审延期。如果你是洛阳涧西区转岗的从业者,这文章对你来说绝对有干…

2026/11/9 12:10:41

电工证手机怎么查看上岗必备的实操考试怎么准备

电工证手机怎么查看上岗必备的实操考试怎么准备 实操考试心里没底怕挂科,特别是对初次报考的人来说,电工证手机怎么查看、考试内容、题型安排这些信息都得提前搞清楚,不然一上考场就慌了。电工证是上岗必备的,很多工地、企业、工厂都要求持证上岗,没有证…

2026/11/9 12:10:41

唐河电工证考试时间官方报名入口怎么选?实操考试心里没底怕挂科

唐河电工证考试时间官方报名入口怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科,唐河电工证考试时间你搞清楚了吗?很多学员在报名前最担心的,就是不知道具体考试时间安排,怕错过节点,也怕考试内容不熟悉,一不小心就挂科。尤其是像三门峡的在职…

2026/11/9 12:05:41

郑州特种工培训厂商怎么转异地?保姆级教程帮你避开实操考试雷区

郑州特种工培训厂商怎么转异地?保姆级教程帮你避开实操考试雷区 实操考试心里没底怕挂科,这几乎是每个想考特种作业证的学员心头的“大石头”。特别是对于刚毕业的应届生,像鹤壁的工程类毕业生,第一次接触这类考试,担心操作失误、流程不熟,更是焦虑不已…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑