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

发布时间:2026/9/13 5:52:21

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/9/13 5:52:21

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

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

2026/9/13 5:52:21

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

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

2026/9/13 5:52:20

多智能体自适应编队控制:时变拓扑与Matlab实现

1. 项目背景与核心问题多智能体系统编队控制在无人机集群、自动驾驶车队等领域有着广泛的应用前景。传统编队控制方法往往假设通信拓扑是静态且全连通的,这在实际工程中很难满足——通信链路可能时断时续,网络拓扑会动态变化,且受限于硬件成本…

2026/9/13 8:07:25

OTFS大规模MIMO信道估计:从稀疏模型到Matlab仿真实现

简介:Matlab正交时频空间(OTFS)大规模MIMO系统信道估计源码包,面向无线通信方向的研究者与工程师,聚焦高速移动、多径衰落场景下OTFS调制与大规模MIMO协同工作时的信道状态获取问题。OTFS在时频域离散化信号以对抗多普…

2026/9/13 8:02:25

锂电池检测技术与储能安全解决方案解析

1. 项目背景与行业定位瑞能股份作为新能源安全领域的标杆企业,近期接受了深圳卫视的专题探访。这家成立于2014年的国家级高新技术企业,专注于锂电池检测及储能安全技术的研发与应用。在新能源行业爆发式增长的背景下,其自主研发的电池检测设备…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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