ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

fhEVM kms-connector Helm Chart 部署指南:连接网关链与 KMS 核心的完整实践

fhEVM kms-connector Helm Chart 部署指南:连接网关链与 KMS 核心的完整实践 fhEVM kms-connector Helm Chart 部署指南连接网关链与 KMS 核心的完整实践【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevmkms-connector 是 fhEVM 全栈框架中负责「桥接」的 Kubernetes 组件集合它监听网关链Gateway Chain上的合约事件驱动 KMS 核心完成密钥生成与解密等密码学操作再把结果以交易形式写回网关链。本文以 charts/kms-connector/README.md 为骨架结合 values.yaml、templates 模板 与 Rust 源码 实现系统讲解该 Chart 的组件构成、OCI 安装方式、链上合约地址预设机制与全部可配置参数使读者能够独立完成 kms-connector 在 devnet/testnet/mainnet 下的部署与调优。kms-connector 的定位与组件架构在 fhEVM 体系中KMSKey Management Service负责管理 TFHE 密钥材料而 kms-connector 是网关链、宿主链与 KMS 核心之间的调度与执行层。从 Chart 模板与 kms-connector/docs/architecture.md 的目录结构看一个完整的部署包含四个子组件组件Kubernetes 资源类型职责kms-connector-db-migrationJob执行数据库迁移初始化连接器所需的 schema对应 connector-db/migrations 下的 SQL 迁移文件kms-connector-gw-listenerDeployment监听网关链事件如解密、网关配置、KMS 生成等合约事件写入数据库待处理队列kms-connector-kms-workerDeployment从队列中消费任务与 KMS 核心KMS-Core通信完成密码学操作并查询各宿主链 ACL 权限kms-connector-tx-senderDeployment把 KMS 结果以交易形式提交回网关链四个组件共享同一套数据库commonConfig.databaseUrl与网络配置commonConfig因此 Chart 将网络信息集中管理避免各组件重复配置。与源码对应关系四个组件的实现分别位于 kms-connector/crates/gw-listener、kms-connector/crates/kms-worker、kms-connector/crates/tx-sender 等 crate 中各自还带有运行时配置文件 kms-connector/config/如gw-listener.toml、kms-worker.toml、tx-sender.toml。安装 ChartChart 以 OCI 制品形式发布支持两个镜像仓库。安装前需先执行helm registry login完成认证# 从 ghcr.io 拉取并安装 helm registry login ghcr.io/zama-ai/fhevm/charts helm install kms-connector oci://ghcr.io/zama-ai/fhevm/charts/kms-connector # 从 hub.zama.ai 拉取并安装 helm registry login hub.zama.ai helm install kms oci://hub.zama.ai/zama-protocol/zama-ai/fhevm/charts/kms-connectorChart 元信息名称kms-connector、版本号、关键词见 Chart.yaml。安装时可通过--set或自定义 values 文件覆盖下文所有参数。智能合约地址与链 ID 的网络预设机制kms-connector 需要同时连接多条链网关链Decryption、GatewayConfig、KMSGeneration合约宿主链 EthereumACL、KMSVerifierKMS Verifier 仅在 Ethereum 上存在、ProtocolConfig宿主链 PolygonACL另在 values.yaml 中支持可选的BNB Testnet宿主链ACL。这些地址与链 ID 由按网络打包的预设文件提供位于configs/contracts-network.yaml通过commonConfig.network选择。可选值为不加载预设、devnet、testnet、mainnet传入无法识别的值会导致模板渲染失败。各网络预设内容以仓库内实际的 contracts-devnet.yaml 为例gateway.chain_id: 10900 gateway.decryption.address: 0xA4dc265D54D25D41565c60d36097E8955B03decD gateway.gateway_config.address: 0x530749d571beBEc20980425557968cabc6328296 gateway.kms_generation.address: 0x7C3D362F3580d04Cacee616DD1ac7f40C4b88da8 ethereum.chain_id: 11155111 ethereum.acl.address: 0xBCA6F8De823a399Dc431930FD5EE550Bf1C0013e ethereum.protocol_config.address: 0x1aa1E8f03E6aC23EEd65305fF6C89A3Fc55f13a0 polygon.chain_id: 80002 polygon.acl.address: 0x21d5fcabee8260b8aC18A2f0cEe6869AE08cc44b bnb_testnet.chain_id: 97 bnb_testnet.acl.address: 0xe7281b288CE8F00D2E81993c6bfbf116Bc72E309testnet 预设contracts-testnet.yaml使用 Ethereum Sepoliachain_id11155111与 Polygon Amoychain_id80002网关链 chain_id 为10901mainnet 预设contracts-mainnet.yaml使用 Ethereum 主网1与 Polygon 主网137网关链 chain_id 为261131。覆盖规则与模板实现预设并非写死在commonConfig下显式设置某个值即可覆盖预设中对应条目非空覆盖优先于预设。当commonConfig.network: 时不加载任何预设此时所有合约地址与链 ID 都必须显式提供否则渲染直接失败。这一解析逻辑由 templates/_helpers.tpl 中的kmsConnector.contracts模板实现第 2752 行先校验network是否在允许列表中再用default (index $preset ...) .Values.commonConfig.xxx逐项做「预设为兜底、显式值为优先」的合并最后输出为扁平字典供各 Deployment 通过fromYaml消费。另一个值得注意的实现细节是kmsConnector.hostChainsJson模板第 6164 行kms-worker 的host_chains列表以 JSON 注入环境变量而链 ID 在运行时才由 Kubernetes 完成$(...)环境变量替换因此模板期是字符串该模板用正则把chainId:...中的引号剥掉保证替换后的值以无引号整数形式序列化能被下游反序列化为u64。完整配置参数表以下参数表继承自 README并合并了 values.yaml 中的实际默认值注意README 表格中的镜像 tag 为v0.9.0而当前仓库 values.yaml 中实际为v0.10.0下文以仓库实际值为准参数说明默认值commonConfig.databaseUrl连接器数据库连接串支持$(VAR)运行时替换postgresql://$(DATABASE_ENDPOINT)/connectorREADME 表格中为带$(DATABASE_USERNAME):$(DATABASE_PASSWORD)的形式二者按部署环境二选一commonConfig.network选择内置合约地址/链 ID 预设、devnet、testnet、mainnetvalues.yaml 实际值README 表格标注为devnetcommonConfig.gatewayUrl网关链 RPC 节点地址HTTPhttp://gateway-node:8546commonConfig.gatewayChainId网关链 ID设置后覆盖网络预设commonConfig.gatewayContractAddresses网关链合约地址decryption、gatewayConfig逐项覆盖预设{}commonConfig.ethereumUrlEthereum 宿主链 RPC 地址http://ethereum-node:8545commonConfig.ethereumChainIdEthereum 链 ID覆盖预设commonConfig.ethereumContractAddressesEthereum 合约地址acl、kmsGeneration、protocolConfig逐项覆盖预设{}commonConfig.polygonUrlPolygon 宿主链 RPC 地址http://polygon-node:8545commonConfig.polygonChainIdPolygon 链 ID覆盖预设commonConfig.polygonContractAddressesPolygon 合约地址acl覆盖预设{}commonConfig.bnbTestnetUrl/bnbTestnetChainId/bnbTestnetContractAddressesBNB Testnet 宿主链acl设置 URL 后该链才会被启用commonConfig.tracing.enabled是否启用分布式追踪falsecommonConfig.tracing.endpointOpenTelemetry Collector 端点http://otel-deployment-opentelemetry-collector.observability.svc.cluster.local:4317commonConfig.env注入所有容器的环境变量支持secretKeyRef、configMapKeyRef{}kmsConnectorDbMigration.enabled是否运行数据库迁移 JobtruekmsConnectorDbMigration.image.name/image.tag迁移 Job 镜像ghcr.io/zama-ai/fhevm/kms-connector/db-migration/v0.10.0kmsConnectorGwListener.enabled是否部署网关监听器truekmsConnectorGwListener.image.name/image.taggw-listener 镜像ghcr.io/zama-ai/fhevm/kms-connector/gw-listener/v0.10.0kmsConnectorGwListener.replicasgw-listener 副本数1kmsConnectorKmsWorker.enabled是否部署 KMS workertruekmsConnectorKmsWorker.image.name/image.tagkms-worker 镜像ghcr.io/zama-ai/fhevm/kms-connector/kms-worker/v0.10.0kmsConnectorKmsWorker.replicaskms-worker 副本数1kmsConnectorTxSender.enabled是否部署交易发送器truekmsConnectorTxSender.image.name/image.tagtx-sender 镜像ghcr.io/zama-ai/fhevm/kms-connector/tx-sender/v0.10.0kmsConnectorTxSender.replicastx-sender 副本数1kmsConnectorTxSender.awsKms.enabled是否启用 AWS KMS 签名器替代私钥签名falsekmsConnectorTxSender.awsKms.configmap.name/configmap.key存放 AWS KMS Key ID 的 ConfigMap 与键名mpc-party/KMS_CONNECTOR__TX_SENDER_AWS_KMS_KEY_IDREADME 表格写为KMS_CONNECTOR_AWS_KMS_CONFIG__KEY_ID以 values.yaml 为准kmsConnectorTxSender.wallet.secret.name/wallet.secret.key存放钱包私钥的 Secret 与键名kms-connector-tx-sender/kms-walletpodAnnotations/podLabels添加到所有 Pod 的注解与标签{}各组件配置与底层实现数据库迁移 Job迁移 Job 通过 Helm 钩子在pre-install, pre-upgrade阶段以负权重-1先于其他资源执行见 kms-connector-db-migration.yaml第 1214 行backoffLimit: 3命令默认为command: - sqlx - migrate - run - --source - /migrations即使用 sqlx 执行 connector-db/migrations 下的 SQL 迁移脚本并通过emptyDir卷默认storage.size: 2Gi承载迁移缓存。连接串通过DATABASE_URL环境变量注入可直接引用commonConfig.databaseUrl中的$(DATABASE_ENDPOINT)再由commonConfig.env中的secretKeyRef提供实际值——values.yaml 第 6884 行给出了DATABASE_ENDPOINT、PGUSER、PGPASSWORD从 Secret 注入的完整示例。网关监听器gw-listener监听器从网关链读取事件。其 Deployment 模板kms-connector-gw-listener-deployment.yaml会把解析后的合约地址注入环境变量KMS_CONNECTOR_GATEWAY_URL、KMS_CONNECTOR_GATEWAY_CHAIN_IDKMS_CONNECTOR_DECRYPTION_CONTRACT__ADDRESS、KMS_CONNECTOR_GATEWAY_CONFIG_CONTRACT__ADDRESSKMS_CONNECTOR_KMS_GENERATION_CONTRACT__ADDRESS即预设中的gateway.kms_generationKMS_CONNECTOR_ETHEREUM_URL、KMS_CONNECTOR_ETHEREUM_CHAIN_ID、KMS_CONNECTOR_PROTOCOL_CONFIG_CONTRACT__ADDRESS注意环境变量名使用双下划线__分隔层级对应 kms-connector/config/gw-listener.toml 中嵌套配置的映射规则。组件监听9100端口的/healthz提供 liveness/readiness 探针initialDelaySeconds分别为 10 与 5并支持 PrometheusserviceMonitor默认关闭。KMS WorkerKMS Worker 负责与 KMS-Core 交互并查询宿主链 ACL模板kms-connector-kms-worker-deployment.yaml注入的关键变量包括KMS_CONNECTOR_KMS_CORE_ENDPOINTSKMS 核心端点默认http://kms-core:50051gRPCKMS_CONNECTOR_HOST_CHAINS宿主链 JSON 列表来自kmsConnectorKmsWorker.config.hostChains默认包含 Ethereum 与 Polygon 两项每项含url、chainId、aclAddress且支持通过$(KMS_CONNECTOR_ETHEREUM_URL)这类占位符引用同 Pod 内的其他环境变量KMS_CONNECTOR_ETHEREUM_ACL_ADDRESS、KMS_CONNECTOR_POLYGON_ACL_ADDRESS、KMS_CONNECTOR_BNB_TESTNET_*仅当设置了bnbTestnetUrl时注入。从源码结构看ACL 查询与 KMS 调用的具体实现位于 kms-connector/crates/kms-worker 与 kms-connector/crates/proxy后者承担与 KMS 核心的代理通信。交易发送器tx-sendertx-sender 把 KMS 结果写回网关链签名方式有两种kms-connector-tx-sender-deployment.yaml 第 7890 行私钥签名默认从kmsConnectorTxSender.wallet.secret指定的 Secret 读取私钥注入KMS_CONNECTOR_PRIVATE_KEYAWS KMS 签名设置kmsConnectorTxSender.awsKms.enabled: true后改为从 ConfigMap默认mpc-party中键KMS_CONNECTOR__TX_SENDER_AWS_KMS_KEY_ID读取 AWS KMS Key ID注入KMS_CONNECTOR_AWS_KMS_CONFIG__KEY_ID此时不再读取私钥 Secret。需特别指出默认的commonConfig.env、各组件env均为空AWS KMS 签名所需的 AWS 凭证与区域等必须通过commonConfig.env或kmsConnectorTxSender.env显式提供。tx-sender 在 values.yaml 中默认开启 tracingtracing.enabled: true与其他组件默认 false不同。通用部署特性四个组件的模板共用以下特性均可在对应组件的 values 块中配置nameOverride自定义资源名称默认由_helpers.tpl按release-kms-connector-component拼接并截断至 63 字符updateStrategy默认RollingUpdatemaxSurge: 1、maxUnavailable: 0保证滚动更新不中断服务resources默认 requests100m CPU / 256Milimits500m CPU / 512MinodeSelector、affinity、tolerations调度控制serviceAccountName自定义 ServiceAccountports默认仅monitoring: 9100与serviceMonitor.enabled默认false指标暴露与采集所有 Deployment 均引用imagePullSecrets: registry-credentials拉取私有镜像。一份可落地的 devnet 部署示例综合以上内容面向 devnet 的完整 values 文件可参考commonConfig: network: devnet # 加载 contracts-devnet.yaml 预设 databaseUrl: postgresql://$(DATABASE_ENDPOINT)/connector gatewayUrl: http://gateway-node:8546 ethereumUrl: http://ethereum-node:8545 polygonUrl: http://polygon-node:8545 env: # 数据库凭据来自 Secret - name: DATABASE_ENDPOINT valueFrom: secretKeyRef: name: connector-database key: endpoint - name: PGUSER valueFrom: secretKeyRef: name: connector-database key: username - name: PGPASSWORD valueFrom: secretKeyRef: name: connector-database key: password kmsConnectorGwListener: replicas: 1 serviceMonitor: enabled: true kmsConnectorKmsWorker: replicas: 1 config: kmsCoreEndpoints: http://kms-core:50051 kmsConnectorTxSender: wallet: secret: name: kms-connector-tx-sender key: kms-wallet执行helm install kms-connector oci://ghcr.io/zama-ai/fhevm/charts/kms-connector \ -f my-kms-connector-values.yaml部署后应能看到一个迁移 Job 与三个 Deployment 相继就绪。若要针对 testnet/mainnet 部署只需把commonConfig.network切换为对应值testnet 会使用 Sepolia/Amoy 预设mainnet 使用 Ethereum/Polygon 主网预设若在完全自定义的链上部署则设network: 并显式补齐全部链 ID 与合约地址。小结kms-connector Chart 通过「网络预设 逐项覆盖」的设计把跨链合约地址与链 ID 的维护成本降到最低四个组件的职责边界清晰——迁移保证 schema、监听器采集事件、worker 执行密码学任务、sender 提交结果。部署时建议优先使用各网络的内置预设仅在需要接入自定义链或覆盖个别合约时再显式设置commonConfig下对应的*ChainId与*ContractAddresses字段并留意 tx-sender 的 AWS KMS 签名与 Secret 私钥签名两种模式的切换前提。【免费下载链接】fhevmFHEVM, a full-stack framework for integrating Fully Homomorphic Encryption (FHE) with blockchain applications项目地址: https://gitcode.com/GitHub_Trending/fh/fhevm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表