fhEVM Relayer SDK 初始化指南createInstance 与 SepoliaConfig 配置详解【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm本文围绕 fhevm 仓库中zama-fhe/relayer-sdk的初始化Setup阶段展开讲解如何通过createInstance实例化FhevmInstance并逐一拆解其 8 个核心配置参数的作用、所属链与取值依据。读完本文你将能够独立为 fhEVM 应用完成 SDK 装配、正确理解 Host Chain 与 Gateway Chain 双链配置并在此基础上衔接输入加密、用户解密等后续能力。fhEVM 与 Relayer SDK为什么需要初始化fhEVMFully Homomorphic Encryption EVM是一套将全同态加密与区块链应用结合的全栈框架。在 fhEVM 的架构中链上存在两类角色FHEVM Host Chain部署 ACL、KMS Verifier、Input Verifier 等合约的主链与Gateway Chain负责密钥管理、输入证明验证与解密服务的中继链。正如 Relayer SDK 总览 所述使用zama-fhe/relayer-sdk的客户端只需持有 FHEVM Host Chain 上的钱包所有与 Gateway Chain 的交互都会以 HTTP 调用方式交给 Zama 维护的 Relayer 完成并由 Relayer 在 Gateway Chain 上代为支付费用。这意味着客户端代码中不需要直接配置 Gateway RPC只需要一份认识这条链的元信息——这正是初始化阶段要解决的问题。FhevmInstance是 SDK 暴露给应用层的核心对象它持有与 fhEVM 交互所需的全部配置与方法加密输入、用户解密、公开解密等。初始化就是把这个对象造出来的过程。前置条件一个可在 FHEVM Host Chain如 Sepolia上交易的钱包/Signer目标 fhEVM 合约已部署且已获取对应的合约地址常量ACL、KMS Verifier、Input Verifier 等见下文参数可访问 Zama 维护的 Relayer 服务地址。方式一通过完整配置调用 createInstancecreateInstance是zama-fhe/relayer-sdk提供的工厂函数接收一个配置对象并返回PromiseFhevmInstance。官方文档给出了完整示例import { createInstance } from zama-fhe/relayer-sdk; const instance await createInstance({ // ACL_CONTRACT_ADDRESS (FHEVM Host chain) aclContractAddress: 0x687820221192C5B662b25367F70076A37bc79b6c, // KMS_VERIFIER_CONTRACT_ADDRESS (FHEVM Host chain) kmsContractAddress: 0x1364cBBf2cDF5032C47d8226a6f6FBD2AFCDacAC, // INPUT_VERIFIER_CONTRACT_ADDRESS (FHEVM Host chain) inputVerifierContractAddress: 0xbc91f3daD1A5F19F8390c400196e58073B6a0BC4, // DECRYPTION_ADDRESS (Gateway chain) verifyingContractAddressDecryption: 0xb6E160B1ff80D67Bfe90A85eE06Ce0A2613607D1, // INPUT_VERIFICATION_ADDRESS (Gateway chain) verifyingContractAddressInputVerification: 0x7048C39f048125eDa9d678AEbaDfB22F7900a29F, // FHEVM Host chain id chainId: 11155111, // Gateway chain id gatewayChainId: 55815, // Optional RPC provider to host chain network: https://eth-sepolia.public.blastapi.io, // Relayer URL relayerUrl: https://relayer.testnet.zama.cloud, });参数逐项解析配置参数所属链作用示例值aclContractAddressFHEVM Host Chain访问控制列表合约地址SDK 依赖它判断/查询密文的访问权限FHE.allow相关逻辑0x6878...79b6ckmsContractAddressFHEVM Host ChainKMS Verifier 合约地址用于校验 KMS 签发的证明与密钥材料0x1364...acACinputVerifierContractAddressFHEVM Host Chain输入验证器合约地址负责链上校验输入密文与证明0xbc91...0BC4verifyingContractAddressDecryptionGateway Chain解密请求验证合约地址用于校验 Relayer/网关链上解密流程涉及的 EIP-712 签名域0xb6E1...607D1verifyingContractAddressInputVerificationGateway Chain输入验证合约地址网关链侧对输入注册请求做签名域校验0x7048...a29FchainIdFHEVM Host Chain主链链 ID用于构造 EIP-712 domain 等链标识场景Sepolia 为1115511111155111gatewayChainIdGateway Chain网关链链 IDfhEVM 专用链Zama 维护的测试网网关链为5581555815networkFHEVM Host Chain可选指向主链的 RPC Provider 地址用于读取链上状态https://eth-sepolia.public.blastapi.iorelayerUrlRelayer 服务Zama 托管的 Relayer HTTP 服务地址后续加密/解密请求都发给它https://relayer.testnet.zama.cloud需要特别强调的是双链地址不要混淆前三个合约地址ACL、KMS、Input Verifier位于 FHEVM Host Chain而后两个验证合约地址位于 Gateway Chain。它们各自参与 EIP-712 域分隔符domain separator的构造用于确保请求只能由正确链上的正确合约签名认可——这就是chainId与gatewayChainId两个 ID 同时存在的原因请求可能同时面向两条链签名域必须互不串扰。关于网关链的补充事实从仓库的 Relayer 配置可以看到网关链的真实拓扑。relayer/config/local.testnet.yaml.example 中配置了网关链 RPChttps://rpc.testnet.zama.org/及其内部chain_id: 10901。这表明Zama 的测试网网关链是独立于以太坊 Sepolia 的一条专用链Relayer 以自身身份连接它而 SDK 侧通过gatewayChainId: 55815标识这条链用于对网关链上合约如verifyingContractAddressDecryption发起链级签名域校验。客户端并不需要直连网关链 RPC——这正是所有网关交互都由 Relayer 代理设计的具体体现。方式二使用内置的 SepoliaConfig 一行完成初始化如果目标网络就是 Zama 维护的 Sepolia 测试网含配套 RelayerSDK 提供了预置配置对象可直接作为完整配置传入import { createInstance, SepoliaConfig } from zama-fhe/relayer-sdk; const instance await createInstance(SepoliaConfig);SepoliaConfig内部封装了上文列出的全部地址与链 IDgatewayChainId固定为55815chainId即 FHEVM 链的11155111。这种写法等价于把完整配置对象原样传入适合快速原型验证而显式写法适合接入自定义网络或自建 Relayer 的正式环境。从仓库源码可以印证 fhEVM 生态中内置配置是一贯做法sdk/js-sdk/contracts/src/SepoliaConfig.sol 中提供了 Solidity 侧的SepoliaConfig库其getDevnetConfig()/getTestnetConfig()分别返回 ACL、Coprocessor、KMSVerifier 的链上地址常量供合约侧与 SDK 侧保持一致。SDK 侧的SepoliaConfig与之一脉相承把连哪条链、用哪些合约、走哪个 Relayer固化为一套可复用的常量避免各处硬编码出错。提示原文档同时将 Zama 维护的 Sepolia fhEVM 及配套 Relayer 的完整地址信息维护在SepoliaConfig对象内并可在协议文档的合约地址页contract addresses查询核对。仓库中 docs/solidity-guides/contract_addresses.md 也整理了 host-contracts 与 gateway-contracts 的地址清单可作为交叉比对的参考。初始化之后FhevmInstance 能做什么FhevmInstance一旦创建其方法即覆盖 fhEVM 客户端的主要交互场景它们都在初始化文档之后的系列指南中有完整讲解输入注册Input registration通过instance.createEncryptedInput(contractAddress, userAddress)构建缓冲区用add8/add16/add32/add64/add128/add256/addBool/addAddress按类型添加明文值再调用buffer.encrypt()完成加密、生成证明并经 Relayer 上传密文最终得到handles与inputProof供合约调用详见 输入注册指南。这与初始化配置中的inputVerifierContractAddress、verifyingContractAddressInputVerification、relayerUrl三个参数直接相关。用户解密User decryption调用instance.generateKeypair()生成一次性密钥对instance.createEIP712(publicKey, contractAddresses, startTimeStamp, durationDays)构造并签名授权最后instance.userDecrypt(...)经 Relayer 把 KMS 加密的密文重加密为用户公钥下的密文使数据在不上链暴露明文的前提下可被用户读取详见 用户解密指南。该流程依赖初始化中的kmsContractAddress、verifyingContractAddressDecryption与aclContractAddress。公开解密Public decryption对已公开的密文直接调用instance.publicDecrypt(handles)获取明文详见 公开解密指南。由此可以看出初始化的分量它一次性绑定了两条链上所有相关合约地址与 Relayer 入口后续所有加密、验证、解密调用都以这份配置为信任锚点。进阶提示向新 SDK 迁移时的初始化差异需要提醒的是zama-fhe/relayer-sdk的初始化模式initSDK()createInstance(config)属于 fhEVM 生态早期接口。仓库中新一代 SDKfhevm/sdk的迁移文档显示新接口已改为setFhevmRuntimeConfig()createFhevmClient({ chain, provider })以链定义对象如sepolia取代扁平配置对象并取消了/web与/node的入口区分。若你从零开始新项目建议直接采用新 SDK若维护既有代码本文所讲的createInstance模式依然是理解 fhEVM 双链配置模型的基石——新旧两代接口中ACL/KMS/InputVerifier 等链上依赖与双链参数语义保持一致。小结与排查建议最小可用配置托管测试网场景直接createInstance(SepoliaConfig)即可自定义网络必须显式提供全部 5 个合约地址、双链 ID 与relayerUrlnetwork为可选缺省时 SDK 无法直连主链读取状态依赖 Relayer 的场景仍可工作。常见错误将 Gateway 链地址误填到 Host Chain 参数或反之chainId与gatewayChainId颠倒relayerUrl指向与目标网络不匹配的 Relayer 环境。这些都会在后续签名域校验或请求转发时报错排查时应先回到初始化配置核对双链归属。更多阅读可继续阅读 Input 输入注册、用户解密、公开解密以及 Relayer 架构文档 了解 Relayer 在整体架构中的位置。【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考