资讯动态

FHEVM Gateway 智能合约套件完全指南:多链密文解密、KMS 编排与协议配置实战

发布时间:2026/9/12 9:43:14 来源:尧图企业网站定制
FHEVM Gateway 智能合约套件完全指南多链密文解密、KMS 编排与协议配置实战【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm本文以 fhevm 仓库中的 gateway-contracts/README.md 及其配套文档gateway-contracts/docs/SUMMARY.md为主体系统讲解 FHEVM Gateway 这一组部署在网关链上的智能合约它如何验证解密请求的合法性、集中管理来自多条 host chain 的密文与密文承诺、编排 KMS 密钥材料与协议支付并给出基于 Hardhat 与 Docker 的完整部署、环境变量配置和应急暂停操作指南。读完本文你将掌握 Gateway 六大合约的职责边界与内部原理能够独立完成本地/容器化部署并能正确配置阈值、操作者与 host chain 参数。FHEVM Gateway 在协议中的定位FHEVMFully Homomorphic Encryption Virtual Machine是一个将全同态加密与区块链应用整合的全栈框架用户在其他链host chain上提交加密密文由 coprocessor 在密文上执行同态计算最终由 KMS 完成解密。FHEVM Gateway 正是介于 host chain、KMS 与 coprocessor 之间的中间层合约集合部署在专门的网关链上。从 gateway-contracts/README.md 的定义看这些合约共同承担五类职责验证解密请求的合法性legitimacy of decryption requests集中管理多链密文访问centralizing multi-chain ciphertexts access集中管理多链密文承诺centralizing multi-chain ciphertexts commitments编排 KMS 材料orchestrating KMS materials编排协议支付orchestrating protocol payments从源码结构看这一设计体现在合约的继承关系上例如 Decryption.sol 同时继承EIP712Upgradeable用于响应签名校验、UUPSUpgradeableEmptyProxy可升级、GatewayOwnable网关所有权、GatewayConfigChecks从 GatewayConfig 读取配置并做权限检查、ProtocolPaymentUtils费用收取与Pausable暂停能力GatewayConfig.sol 则基于 OpenZeppelin 的Ownable2StepUpgradeable与UUPSUpgradeableEmptyProxy。这种模块化继承正是「Gateway 统一持有配置、各业务合约通过GatewayConfigChecks动态读取」的实现基础。智能合约总览合约职责核心能力CiphertextCommits存储来自所有 host chain 的密文承诺- 存储常规密文承诺regular ciphertext commitments- 存储 Switch 与 SquashSNS密文承诺Decryption解密 FHE 密文- 请求公开解密public decryption- 请求用户解密user decryption- 请求委托用户解密delegated user decryptionGatewayConfig管理协议配置- 注册 KMS 节点、coprocessor 与 host chain- 更新 KMS 节点、coprocessor 与 host chainInputVerification验证输入的零知识证明ZKPoK- 验证 ZKPoK- 拒绝 ZKPoKKMSGeneration编排 KMS 相关材料- 触发 FHE 密钥生成- 触发 CRSCommon Reference String生成ProtocolPayment编排协议支付- 定义操作价格- 将协议费用转移到FeesSenderToBurner合约PauserSet管理 pauser 角色- 注册、移除与交换 pauser 地址其中PauserSet与其他合约不同从源码看它部署为不可升级的不可变合约PauserSet.sol继承IPauserSet, GatewayOwnable其地址被存储在GatewayConfig合约中而其余业务合约均基于UUPSUpgradeableEmptyProxy实现 UUPS 可升级代理模式。每个合约都通过getVersion()、initializeFromEmptyProxy()等函数支持空代理初始化与版本升级完整的函数选择器清单见 gateway-contracts/selectors.txt。仓库在 gateway-contracts/test/ 下为每个合约都提供了独立的测试文件CiphertextCommits.ts、Decryption.ts、GatewayConfig.ts、InputVerification.ts、KMSGeneration.ts、PauserSet.ts、ProtocolPayment.ts是理解各合约行为边界的直接参考。GatewayConfig协议配置中心GatewayConfig是 FHEVM Gateway 的配置中枢详见 gateway-config 文档。除 host chain 之外绝大多数配置项都在合约部署时一次性写入之后只有部分配置可由 owner 更新。配置可分为四类协议元数据Protocol metadata、操作者Operators、治理Governance与Host chains。协议元数据包含两项展示用信息name协议名称website协议官网它们只在部署时设置之后无法更新。操作者KMS 节点与 Coprocessor操作者分为 KMS 节点与 coprocessor 两类每个操作者都必须先在GatewayConfig中注册才能参与 fhevm 协议。KMS 节点KMSKey Management Service本质上是一组节点共同运行的多方计算MPC协议用于去中心化地管理 FHE 密钥。KMS 节点的职责是根据Decryption合约的请求解密密文根据KMSGeneration合约的请求生成 KMS 公共材料每个 KMS 节点存储以下元数据txSenderAddress向 Gateway 发送交易的账户地址协议中通常称为KMS connectorsignerAddress用于签署发往 Gateway 结果的公钥对应地址ipAddressKMS 节点的 IP 地址storageUrlKMS 公共材料存储 URLcoprocessor 通过它下载 FHE 计算所需的公共材料FHEVM Gateway 只有一个 KMS 集合至少包含 1 个节点。当前节点在部署时设置部署后不能增删 KMS 节点。KMS 阈值MPC 阈值mpcThresholdKMS 节点执行 MPC 协议所需的密码学参数可通过getMpcThreshold视图函数读取。要求严格小于注册的 KMS 节点数量。部署时设置之后 owner 可在满足条件的前提下更新。解密阈值decryption thresholds决定Decryption合约中「达成解密共识所需的最少 KMS 有效响应数」publicDecryptionThreshold公开解密达成共识所需的最少有效响应数userDecryptionThreshold用户解密达成共识所需的最少有效响应数两者都必须非零且不大于注册的 KMS 节点数量。部署时设置owner 可后续更新。KMS 生成阈值kmsGenThreshold决定 KMS 公共材料FHE 密钥、CRS生成达成共识所需的最少有效响应数约束条件同上非零且不大于 KMS 节点数。关于解密阈值的取值部署文档env_variables.md给出了协议中的实践经验公式设t为 MPC 阈值公开解密阈值t 1用户解密阈值2*t 1CoprocessorCoprocessor 是一个多节点集合职责是在密文上执行 FHE 同态计算根据InputVerification合约的请求验证输入的 ZKPoK为所有已注册 host chain 处理密文的访问控制每个 coprocessor 存储的元数据txSenderAddress发送交易的账户地址signerAddress签名结果对应的地址s3BucketUrl密文存储的 S3 bucket URLKMS connector 通过它下载解密所需密文FHEVM Gateway 只有一个 coprocessor 集合至少包含 1 个 coprocessor同样在部署时设定、部署后不可增删。Coprocessor 阈值coprocessorThresholdGateway 达成 coprocessor 共识例如CiphertextCommits的密文承诺或InputVerification的输入验证所需的最少 coprocessor 同意数要求非零且不大于注册 coprocessor 数量。关于 drift auto-reversal 的告警需特别留意coprocessor 可以选择在自身状态偏离 Gateway 共识时自动回滚。由于这以共识为唯一事实来源只有当「少数故障方无法独立达成共识」时才安全——即至少注册 3 个 coprocessor 且coprocessorThreshold设为严格多数。切勿在 coprocessor 数量 ≤2 或非多数阈值下开启 drift auto-reversal。合约只强制约束1 ≤ threshold ≤ coprocessor 数量因此保证合理的 quorum 是 DAO 与操作者的责任合约本身并不替你做这个判断。Sender 与 Signer尽管上述两类操作者元数据不同但每个操作者都同时拥有一个交易发送者与一个签名者txSenderAddress向 FHEVM Gateway 发送交易的账户地址signerAddress用于签署发往 Gateway 结果的公钥对应地址可通过以下视图函数查询getKmsTxSenders()获取所有 KMS 节点的交易发送者getKmsSigners()获取所有 KMS 节点的签名者getCoprocessorTxSenders()获取所有 coprocessor 的交易发送者getCoprocessorSigners()获取所有 coprocessor 的签名者同一操作者的交易发送者与签名者允许相同。此外交易发送者地址被用作操作者的身份标识identity可作为以下视图函数的入参getKmsNode(address kmsTxSenderAddress)查询某个 KMS 节点的元数据getCoprocessor(address coprocessorTxSenderAddress)查询某个 coprocessor 的元数据治理角色协议由以下角色治理owner可执行受限操作的账户pausers可暂停合约函数的账户Owner最初为合约部署者可执行升级合约、更新 pausers、添加 host chain、触发 KMS 公共材料生成。Owner 由 OpenZeppelin 的Ownable2StepUpgradeable管理意味着部署者可通过两步流程将所有权转移给其他账户先transferOwnership提名再由新 owneracceptOwnership接受。Pausers详见 PauserSet 文档 与 暂停机制文档。Host chainsHost chain 是注册到协议中的宿主链只有在已注册 host chain 上生成的密文才允许被 coprocessor 验证、被 KMS 解密。每个 host chain 存储chainIdhost chain 的唯一标识。与常见链 ID 不同其值被限制在64 位uint64内源码中对应错误ChainIdNotUint64见 selectors.txtfhevmExecutorAddress部署在 host chain 上的FHEVMExecutor合约地址aclAddress部署在 host chain 上的ACL合约地址namehost chain 名称websitehost chain 官网Host chain不在部署时设置而是由 owner 通过addHostChain函数源码位于 GatewayConfig.sol#L454逐个添加当前不支持移除。不过在仓库的部署任务中还提供了disableHostChain/enableHostChain/removeHostChain等生命周期管理能力见下文「管理 host chain」。KMSGeneration编排 FHE 密钥与 CRSKMSGeneration合约详见 kms_generation 文档负责编排协议所需的公共 KMS 材料。所有非视图函数均仅限合约 owner 或 KMS 节点的交易发送者调用源码见 KMSGeneration.sol。生成 FHE 密钥KMS 会生成一个新的公钥同时以**私密共享key shares**的方式在各 KMS 节点间分散持有 FHE 私钥分片私钥分片用于 KMS 解密密文而公钥供 coprocessor 在密文上执行同态运算。触发方式owner 调用KMSGeneration合约的keygen函数。生成的公共 FHE 密钥以唯一的keyId标识。生成 CRSCRSCommon Reference String是 KMS 以安全方式生成的相关随机材料用于构造某些 ZKPoK特别是证明「知道某个在 FHE 密钥下加密的明文的明文知识」。触发方式owner 调用KMSGeneration合约的crsgen函数。生成的 CRS 以唯一的crsId标识。PauserSet 与暂停机制PauserSet 合约PauserSet管理被允许暂停部分 Gateway 合约的地址详见 pauser_set 文档。Pauser 通常是由协议操作者KMS 节点 / coprocessor控制的 hot wallet。PauserSet提供四个操作addPauser添加 pauserremovePauser移除 pauserswapPauser用另一个地址交换 pauserisPauser检查某地址是否为 pauser它部署为不可变合约地址存储在GatewayConfig合约中。暂停机制暂停机制详见 pausing 文档用于紧急情况暂停协议以阻止任何新请求输入证明、解密被处理。Gateway 只能手动暂停与恢复。涉及两个合约PauserSet管理 pauser 地址与Pausable抽象合约提供暂停/恢复功能。只有Decryption与InputVerification两个合约可被暂停。被暂停的合约意味着触发其请求request函数的任何交易都会被 revert。但已发送请求的响应仍会被接受进行中的共识可以继续完成其他视图函数仍可调用具体影响合约暂停时被 revert 的函数DecryptionpublicDecryptionRequest、userDecryptionRequest、delegatedUserDecryptionRequestInputVerificationverifyProofRequest暂停状态在源码层面通过 Decryption.sol 与 InputVerification.sol 继承的Pausable实现暂停/恢复事件为Paused(address)与Unpaused(address)。通过 Hardhat 任务暂停与恢复仓库提供了定义于 tasks/pauseContracts.ts 的 Hardhat 任务暂停任务pauseAllGatewayContracts暂停所有 Gateway 合约pauseInputVerification仅暂停InputVerificationpauseDecryption仅暂停Decryption执行暂停任务需要在本地设置PAUSER_PRIVATE_KEY环境变量即某个已注册 pauser 的私钥。恢复任务unpauseAllGatewayContracts恢复所有 Gateway 合约unpauseInputVerification仅恢复InputVerificationunpauseDecryption仅恢复Decryption重要恢复任务仅在GatewayConfig所有权仍由部署者持有需本地设置DEPLOYER_PRIVATE_KEY时才可用。一旦GatewayConfig所有权转移到多签multi-sigowner这些任务将无法恢复合约此时需要通过多签合约调用GatewayConfig的unpause函数来恢复。部署 FHEVM Gateway环境变量全景部署所需的环境变量完整清单定义在 env_variables.md 中。按类别整理如下Solidity 类型与默认值均以仓库文档为准环境变量说明Solidity 类型默认值备注PROTOCOL_NAME协议显示名称string--PROTOCOL_WEBSITE协议显示官网string--MPC_THRESHOLDMPC 阈值密码学参数uint256-必须严格小于注册的 KMS 节点数PUBLIC_DECRYPTION_THRESHOLD公开解密阈值uint256-非零且 ≤ KMS 节点数USER_DECRYPTION_THRESHOLD用户解密阈值uint256-非零且 ≤ KMS 节点数KMS_GENERATION_THRESHOLDKMS 材料生成阈值uint256-非零且 ≤ KMS 节点数COPROCESSOR_THRESHOLDCoprocessor 阈值uint256-非零且 ≤ coprocessor 数NUM_KMS_NODES注册的 KMS 节点数--至少为下方实际注册数KMS_TX_SENDER_ADDRESS_{i}KMS 节点i的地址address-i NUM_KMS_NODES时忽略KMS_SIGNER_ADDRESS_{i}KMS 节点i的签名者address-同上KMS_NODE_IP_ADDRESS_{i}KMS 节点i的 IPstring-同上NUM_COPROCESSORS注册的 coprocessor 数--至少为下方实际注册数COPROCESSOR_TX_SENDER_ADDRESS_{j}Coprocessorj的地址address-j NUM_COPROCESSORS时忽略COPROCESSOR_SIGNER_ADDRESS_{j}Coprocessorj的签名者address-同上COPROCESSOR_S3_BUCKET_URL_{j}Coprocessorj的 S3 bucket URLstring-同上NUM_HOST_CHAINS注册的 host chain 数--至少为下方实际注册数HOST_CHAIN_CHAIN_ID_{k}Host chaink的链 IDuint256-所有 host chain 的 chain ID 必须互不相同HOST_CHAIN_FHEVM_EXECUTOR_{k}Host chaink的 FHEVMExecutoraddress--HOST_CHAIN_ACL_ADDRESS_{k}Host chaink的 ACL 地址address--HOST_CHAIN_NAME_{k}Host chaink名称string--HOST_CHAIN_WEBSITE_{k}Host chaink官网string--NUM_PAUSERS注册的 pauser 数--建议等于 KMS 节点数 coprocessor 数PAUSER_ADDRESS_{l}Pauserl的地址address--INPUT_VERIFICATION_PRICE输入验证价格uint256-单位 $ZAMA18 位小数PUBLIC_DECRYPTION_PRICE公开解密价格uint256-单位 $ZAMA18 位小数USER_DECRYPTION_PRICE用户解密价格uint256-单位 $ZAMA18 位小数ZAMA_OFT_ADDRESSZamaOFT合约地址address-真实环境需已部署FEES_SENDER_TO_BURNER_ADDRESSFeesSenderToBurner合约地址address-真实环境需已部署DEPLOYER_PRIVATE_KEY合约部署者私钥bytes32--HARDHAT_NETWORK部署目标网络stringhardhathardhat/localGateway/staging/zwsDev/testnetCHAIN_ID_GATEWAY网关链 IDuint25631337需与HARDHAT_NETWORK一致MNEMONIC地址生成助记词string本地测试默认值-RPC_URLRPC 节点 URLstringhttp://127.0.0.1:8757-GATEWAY_CONFIG_ADDRESSGatewayConfig 地址address-仅生产环境使用PAUSER_SET_ADDRESSPauserSet 地址address-仅生产环境使用NEW_OWNER_PRIVATE_KEY新 owner 接受所有权的私钥bytes32-所有权转移任务使用不同网络的链 ID 约定hardhat→31337localGateway→123456staging→54321devnet→10900testnet→10901。关键配置示例本地测试值部署时写入GatewayConfig的值# 协议元数据部署后不可更新 PROTOCOL_NAMEProtocol # (string) PROTOCOL_WEBSITEhttps://protocol.com # (string) # KMS 阈值uint256 MPC_THRESHOLD1 PUBLIC_DECRYPTION_THRESHOLD3 USER_DECRYPTION_THRESHOLD3 KMS_GENERATION_THRESHOLD3 # Coprocessor 阈值uint256 COPROCESSOR_THRESHOLD2 # KMS 节点索引从 0 开始 NUM_KMS_NODES1 KMS_TX_SENDER_ADDRESS_00xc1d91b49A1B3D1324E93F86778C44a03f1063f1b # (address) KMS_SIGNER_ADDRESS_00x305F1F471e9baCFF2b3549F9601f9A4BEafc94e1 # (address) KMS_NODE_IP_ADDRESS_0127.0.0.1 # (string) KMS_NODE_STORAGE_URL_0s3://kms-bucket-1 # (string) # Coprocessor索引从 0 开始 NUM_COPROCESSORS3 COPROCESSOR_TX_SENDER_ADDRESS_00x6518D50aDc9036Df37119eA465a8159E34417E2E # (address) COPROCESSOR_SIGNER_ADDRESS_00xa5eE8292dA52d8234248709F3E217ffEBA5E8312 # (address) COPROCESSOR_S3_BUCKET_URL_0s3://coprocessor-bucket-1 # (string)部署后再通过单独脚本写入的值host chain 与 pauser# Host chains索引从 0 开始chain ID 必须互不相同 NUM_HOST_CHAINS1 HOST_CHAIN_CHAIN_ID_02025 # (uint256) HOST_CHAIN_FHEVM_EXECUTOR_00xbb8ab3d75fd306ce85c90e899a2db850490cd697 # (address) HOST_CHAIN_ACL_ADDRESS_00xabcdef1234567890abcdef1234567890abcdef12 # (address) HOST_CHAIN_NAME_0Host chain 2025 # (string) HOST_CHAIN_WEBSITE_0https://host-chain-2025.com # (string) # Pausers数量建议等于操作者总数 KMS 节点数 coprocessor 数 NUM_PAUSERS1 PAUSER_ADDRESS_00x6591319B97979Acc59b7191A8B4Ec381375bFc92 # (address)ProtocolPayment的初始价格单位 $ZAMA18 位小数owner 可后续更新INPUT_VERIFICATION_PRICE10000000000000000000 # 10 $ZAMA PUBLIC_DECRYPTION_PRICE1000000000000000000 # 1 $ZAMA USER_DECRYPTION_PRICE1000000000000000000 # 1 $ZAMA支付桥接的前提条件在真实环境部署前需要先在以下链上部署配套合约本地测试环境除外host chainZamaERC20$ZAMA 代币、FeesBurner用于销毁操作费用gateway chainZamaOFTLayerZero OFT 合约与ZamaERC20交互、FeesSenderToBurner带 LayerZero endpoint用于将费用发送至FeesBurner从源码看费用流转闭环在 ProtocolPayment.sol 中实现合约持有FEES_SENDER_TO_BURNER_ADDRESS、DECRYPTION_ADDRESS、INPUT_VERIFICATION_ADDRESS三个常量地址并直接以IERC20(zamaOFTAddress)形式操作 $ZAMA OFT 代币——即费用从Decryption与InputVerification收取后通过 $ZAMA OFT 转账给FeesSenderToBurner再由 LayerZero 跨链发送至 host chain 的FeesBurner销毁。本地部署Hardhat前置条件克隆仓库并安装依赖npm install本地部署的 Makefile 目标会自动将.env.example复制为.env并填入正确值。注意默认使用的账户已预充值若更换地址需自行保证账户有足够余额。第一步启动本地节点默认运行在端口 8757make start-local-node第二步部署合约使用localGateway网络make deploy-contracts-local该命令会完成两件事通过 tasks/deployment/contracts.ts 中的deployAllGatewayContracts任务部署全部合约通过 tasks/addHostChains.ts 中的addHostChainsToGatewayConfig任务将 host chain 注册到GatewayConfig第三步管理 host chain。host chain 注册后的生命周期管理由 tasks/manageHostChains.ts 中的三个 owner-only 任务完成。每个任务都使用DEPLOYER_PRIVATE_KEY签名并按与addHostChainsToGatewayConfig相同的方式解析GatewayConfig地址——默认读取GATEWAY_CONFIG_ADDRESS环境变量当传入--use-internal-proxy-address true本地/CI 流程时则从addresses/目录解析# 禁用某个已注册的 host chain保持注册但标记为禁用 npx hardhat task:disableHostChainOnGatewayConfig --chain-id id # 重新启用之前被禁用的 host chain npx hardhat task:enableHostChainOnGatewayConfig --chain-id id # 彻底移除 host chain必须先禁用 npx hardhat task:removeHostChainOnGatewayConfig --chain-id id每个任务都带有预检chain 是否注册 / 是否已禁用让操作者在提交本会 revert 的交易前就能得到清晰的错误提示。第四步运行测试make test-local测试使用--skip-setup标志以避免重复部署合约。Docker 部署仓库的 docker-compose.yml 提供容器化部署路径详见 docker_deploy 文档# 构建镜像 make docker-compose-build # 启动容器 make docker-compose-up启动后主要产生三个容器anvil-node本地以太坊网络链 ID54321端口8546deploy-gateway-contracts部署合约add-host-chains在合约部署完成后将 host chain 注册到GatewayConfig验证部署是否成功docker logs deploy-gateway-contracts若日志显示Contract deployment done!则合约部署成功。接着检查docker logs add-host-chains若日志显示Host chains registration done!则 host chain 注册成功。两个步骤都必须按顺序完成才能与合约交互特别是若 host chain 未正确注册会有大量交易预期地 revert。清理make docker-compose-down生产环境补充配置生产部署后还需要设置需在部署后动态获取实际地址GATEWAY_CONFIG_ADDRESS0xC7D45661a345eC5cA0e8521CFEF7e32FDA0Daa68 # (address) PAUSER_SET_ADDRESS0xc1D733116990ce3D9e54F9eCf48a1cdD441Af4f9 # (address) NEW_OWNER_PRIVATE_KEY0x7136d8dc72f873124f4eded25f3525a20f6cee4296564c76b44f1d582c57640f # (bytes32)GATEWAY_CONFIG_ADDRESS用于单独执行 add host chain 等任务PAUSER_SET_ADDRESS用于单独管理 PauserSet 中的 pauserNEW_OWNER_PRIVATE_KEY当所有权不直接转移给多签时新 owner EAO 用它接受网关合约的所有权暂停相关任务则需要设置 暂停环境变量PAUSER_PRIVATE_KEY0x3588ffb4f4d9bea785a012b895543fe68f2d580a9d449decc91a25878064079a # (bytes32) DEPLOYER_PRIVATE_KEY0x7136d8dc72f873124f4eded25f3525a20f6cee4296564c76b44f1d582c57640f # (bytes32)其中PAUSER_PRIVATE_KEY必须是已注册在PauserSet中的某个 pauser 的私钥用于执行暂停任务DEPLOYER_PRIVATE_KEY仅在所有权仍由部署者持有时用于恢复任务。深入源码请求-共识-响应的关键调用链将文档中的职责描述与源码对应起来可以勾勒出两条核心调用链解密调用链用户/合约调用Decryption.publicDecryptionRequest(bytes32[], bytes)Decryption.sol#L332或userDecryptionRequestDecryption.sol#L466、Decryption.sol#L670或delegatedUserDecryptionRequestDecryption.sol#L560发起请求各 KMS 节点通过publicDecryptionResponse/userDecryptionResponse提交签名响应Decryption依据GatewayConfig中读取的解密阈值getPublicDecryptionThresholdForContext/getUserDecryptionThresholdForContext统计有效签名达到阈值后即视为达成共识。EIP-712 签名校验与ctHandles的 host chain 归属检查错误如CtHandleChainIdDiffersFromContractChainId、KmsNodeAlreadySigned保证只有注册 KMS 节点的有效响应才能进入共识计数。密文承诺调用链coprocessor 调用CiphertextCommits.addCiphertextMaterial(bytes32, uint256, bytes32, bytes32)CiphertextCommits.sol#L123提交密文承诺并可通过getAddCiphertextMaterialConsensusTxSenders查询当前共识状态只有达到 coprocessor 阈值后承诺才生效。错误定义如CoprocessorAlreadyAdded、HostChainNotRegistered、HostChainDisabled表明该合约同时校验 coprocessor 身份与 host chain 注册状态——这正是「只有注册 host chain 上的密文才被接受」策略的具体实现。输入验证调用链InputVerification.verifyProofRequestInputVerification.sol#L184接收用户提交的 ZKPoK由注册 coprocessor 验证并签名达到 coprocessor 阈值后通过/拒绝。所有合约共用的权限原语可见于GatewayConfigChecks错误如NotKmsTxSender、NotKmsSigner、NotCoprocessorTxSender、NotCoprocessorSigner、KmsSignerDoesNotMatchTxSender等见 selectors.txt而合约升级通过UPGRADE_INTERFACE_VERSIONselector0xad3cb1cc、upgradeToAndCall与各reinitializeVX函数完成——selectors.txt中记录的reinitializeV6、reinitializeV7、reinitializeV9等即为历史升级版本号。结语与延伸阅读FHEVM Gateway 通过「配置集中、业务解耦」的合约架构把多链密文管理、KMS 共识、协议支付与紧急暂停统一收敛到网关链上GatewayConfig是唯一的配置事实来源Decryption/InputVerification/CiphertextCommits/KMSGeneration通过共享检查模块动态读取配置并校验调用者身份PauserSet提供应急暂停能力ProtocolPayment则打通了 $ZAMA 的费用闭环。无论你是要部署网关、接入新的 host chain还是审计解密共识逻辑本文梳理的配置项、阈值公式、任务命令与源码调用链都可以作为直接的实操参考。进一步阅读Gateway 文档总览GatewayConfig 合约详解KMSGeneration 合约详解PauserSet 合约详解暂停机制详解环境变量完整说明本地部署指南Docker 部署指南合约函数选择器清单【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价