Wagmi 的 dangerous_secp256k1 连接器:面向 Secp256k1 EOA 的测试专用私钥连接器详解 📅 发布时间:2026/9/18 3:44:16 👁 浏览次数: Wagmi 的 dangerous_secp256k1 连接器面向 Secp256k1 EOA 的测试专用私钥连接器详解【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi本文围绕 Wagmi 仓库中 Tempo 模块的dangerous_secp256k1连接器展开讲解如何通过wagmi/tempo入口将一条 Secp256k1 私钥暴露为外部账户EOA并接入 Tempo 链同时重点说明它的安全边界明文存储私钥、绑定存储会话时长、严禁生产使用与端到端测试等典型适用场景。读完本文你将掌握该连接器的安装方式、wagmi.config.ts配置写法、privateKey等参数的完整语义以及它在源码层面如何被包装为 Wagmi Connector 的底层实现原理。连接器是什么一个把私钥变成 EOA 的 Tempo 连接器dangerous_secp256k1是 Wagmi 为 Tempo 提供的一组连接器Connectors之一负责连接一个 Secp256k1 椭圆曲线算法生成的外部账户EOA。在 site/tempo/connectors/index.md 中Tempo 支持的连接器被描述为「对根accounts包的一层薄封装thin Wagmi wrappers around the rootaccountspackage」一共有三个tempoWalletTempo Wallet 弹窗连接器webAuthnWebAuthn EOA 连接器dangerous_secp256k1基于私钥Secp256k1的 EOA 连接器。与另外两个连接器不同dangerous_secp256k1不需要用户交互弹窗、不需要生物识别只需要一条私钥或由连接器自行生成并持久化一条私钥即可完成签名与交易。它主要在 Tempo 这条「专为支付场景设计」的 Layer 1 链详见 site/tempo/getting-started.md上用于测试工作流例如端到端测试。安全警告为什么名字里带 dangerous官方文档在连接器说明开头就给出了醒目的警告块这是使用本连接器前必须首先理解的内容不推荐用于生产环境NOT RECOMMENDED FOR PRODUCTION USAGE。该连接器以明文形式存储私钥且私钥的生命周期与所用存储的会话时长绑定。请仅在测试工作流如端到端测试中使用本连接器。也就是说dangerous_secp256k1的安全模型有三个关键限制明文存储私钥以明文clear text形式写入存储没有加密保护会话绑定私钥的有效期与所用存储的会话session长度绑定存储失效则私钥一并失效生产禁用任何面向真实用户、真实资产的生产环境都不应使用它。这一警告同样体现在源码注释中。packages/core/src/tempo/Connectors.ts 的函数注释原文即为/** * Connector for a Secp256k1 EOA. * * WARNING: NOT RECOMMENDED FOR PRODUCTION USAGE. * This connector stores private keys in clear text, and are bound to the session * length of the storage used. */正是因为私钥以明文保存连接器在命名上直接使用了dangerous_前缀避免开发者在生产代码中误用。安装以可选 peer 依赖引入accounts包dangerous_secp256k1是accounts包之上的封装因此使用前需要同时安装 Wagmi或其 React / Core 封装与accounts包。在 packages/connectors/package.json 中accounts被声明为可选 peer 依赖版本约束为~0.14即0.14.0 1.0.0范围内peerDependencies: { accounts: ~0.14, ... }, peerDependenciesMeta: { accounts: { optional: true }, ... }由于是可选依赖只有实际使用 Tempo 连接器时才需要显式安装。根据官方文档可按包管理器选择安装命令pnpm add accounts~0.14npm install accounts~0.14yarn add accounts~0.14bun add accounts~0.14Tempo 全量接入还需要保证 Viem 版本满足2.55.2具体安装组合可参考 site/tempo/getting-started.md 中的 Setup 章节。基本用法在 wagmi.config.ts 中注册连接器安装完成后在wagmi.config.tsReact 场景或wagmi/core的配置文件中导入并注册dangerous_secp256k1。官方文档给出的最小配置如下import { createConfig, http } from wagmi import { tempo } from wagmi/chains import { dangerous_secp256k1 } from wagmi/tempo // [!code focus] export const config createConfig({ connectors: [dangerous_secp256k1()], // [!code focus] chains: [tempo], multiInjectedProviderDiscovery: false, transports: { [tempo.id]: http(), }, })其中几个配置项的作用分别是connectors: [dangerous_secp256k1()]注册连接器实例不传任何参数时连接器会在首次连接时自动生成并持久化一条私钥chains: [tempo]声明连接的目标链为 Tempowagmi/chains导出multiInjectedProviderDiscovery: false关闭多注入 Provider 自动发现避免浏览器注入钱包与本连接器互相干扰transports为tempo.id链配置http()传输方式。若使用纯 Core无 React场景只需将导入路径替换为wagmi/core系列入口import { createConfig, http } from wagmi/core import { tempo } from wagmi/core/chains import { dangerous_secp256k1 } from wagmi/core/tempo export const config createConfig({ connectors: [dangerous_secp256k1()], chains: [tempo], multiInjectedProviderDiscovery: false, transports: { [tempo.id]: http(), }, })参数详解privateKey 与连接器元信息dangerous_secp256k1接受一个可选的参数对象。官方文档重点说明了privateKey参数privateKey类型Hex十六进制字符串形如0x...语义可选的固定私钥连接器会将该私钥暴露为账户。如果省略该参数连接器会自动生成一条私钥并持久化保存。从源码实现看packages/core/src/tempo/Connectors.ts 中参数对象会被解构为icon、name、privateKey、rdns与其余providerParametersexport function dangerous_secp256k1( parameters: dangerous_secp256k1.Parameters {}, ) { const { icon, name, privateKey, rdns, ...providerParameters } parameters return _setup({ createAdapter(accounts) { return accounts.dangerous_secp256k1({ icon, name, privateKey, rdns }) }, icon, id: secp256k1, name: name ?? EOA (Secp256k1), providerParameters, rdns, type: secp256k1, }) }由源码可以确认该连接器实际支持的完整参数包括参数类型说明privateKeyHex固定私钥省略时自动生成并持久化iconstring连接器图标data URL 或远程 URL用于 EIP-6963 声明namestring连接器显示名称默认EOA (Secp256k1)rdnsstring \| string[]EIP-6963 的 reverse-DNS 标识符其余参数—透传给accounts.Provider.create的 Provider 参数如存储、传输等连接器的类型级参数定义dangerous_secp256k1.Parameters为AccountsDangerousSecp256k1Parameters与OmitAccountsProviderParameters, adapter | chains的交集即底层accounts包的私钥适配参数与 Provider 参数中除adapter、chains之外的全部字段。历史遗留的Dangerous_Secp256k1Parameters类型别名已标记为deprecated建议直接使用dangerous_secp256k1.Parameters。底层原理一个薄封装如何变成标准 Wagmi Connector官方文档明确指出dangerous_secp256k1是「围绕根accounts包的一层薄 Wagmi 封装」。结合 packages/core/src/tempo/Connectors.ts 的源码可以梳理出它被组装成标准 Wagmi Connector 的完整调用链入口导出packages/core/src/exports/tempo.ts 从../tempo/Connectors.js导出dangerous_secp256k1与Dangerous_Secp256k1Parameters类型作为wagmi/tempo/wagmi/core/tempo子路径入口的一部分同时导出的还有Actions命名空间下的 Tempo 行动。Adapter 构建dangerous_secp256k1()内部通过createAdapter(accounts)回调调用accounts.dangerous_secp256k1({ icon, name, privateKey, rdns })把私钥参数交给accounts包生成底层适配器。统一装配_setup三个 Tempo 连接器tempoWallet、webAuthn、dangerous_secp256k1都复用同一个_setup函数完成装配。_setup调用 Wagmi 的createConnectorpackages/core/src/connectors/createConnector.js 导出生成一个标准 Connector 实例。懒加载 ProvidergetAccountsModule()使用动态import(accounts)按需加载accounts包加载失败会抛出dependency accounts not found错误——这正是accounts被声明为可选 peer 依赖的原因。随后通过accounts.Provider.create({ ...providerParameters, adapter, chains, transports })创建统一 Provider。标准 Connector 能力最终生成的连接器实现了 Wagmi Connector 的全部接口——connect通过wallet_connectRPC 建立连接支持capabilities与withCapabilities、disconnectwallet_disconnect、getAccountseth_accounts、getChainIdeth_chainId、getClient、isAuthorized带重试的账户探测、switchChain以及accountsChanged/chainChanged/disconnect等事件监听与广播。换句话说dangerous_secp256k1与tempoWallet、webAuthn共享同一套装配骨架唯一区别在于所包裹的底层适配器类型不同因此它可以无缝接入 Wagmi 的connect、getConnection、useConnect等既有 API无需额外适配。典型场景端到端测试中的确定性账户由于私钥明文存储与会话绑定的特性dangerous_secp256k1最适合在端到端测试中使用确定性签名账户通过privateKey传入固定私钥测试中即可得到确定不变的地址与签名结果便于断言与 mock免交互自动化不需要弹窗、生物识别等人工交互步骤适合 CI 流水线中的浏览器自动化测试本地链配对配合 Tempo 本地开发链Wagmi 测试套件中的tempoLocal见 packages/test/src/chains.ts使用可复现「连接 → 取账户 → 断连」的完整生命周期。参考 packages/core/src/tempo/Connectors.test.ts 中对tempoWallet、webAuthn的测试写法可以推断同类连接器的测试模式通过createConfig创建配置、用connect/disconnect驱动状态流转并断言getAccounts()、isAuthorized()与getConnection(config)的结果。这些测试逻辑对dangerous_secp256k1同样适用只需将连接器替换为dangerous_secp256k1({ privateKey })。生产场景的替代方案如果你的目标是生产环境下的 Tempo 账户应优先考虑另外两个连接器它们都在 site/tempo/connectors/index.md 有完整文档tempoWalletTempo Wallet 弹窗私钥由钱包侧保管不暴露给 dAppwebAuthn基于 WebAuthn 的 EOA私钥由安全硬件如指纹、平台认证器保护适合真实用户场景。三者共用同一套配置与连接 API切换成本很低因此建议把dangerous_secp256k1严格限定在测试代码与本地开发环境内使用。参考与延伸阅读site/tempo/connectors/dangerous_secp256k1.md本文对应的官方文档源文件site/tempo/connectors/index.mdTempo 连接器总览site/tempo/getting-started.mdTempo Wagmi 的完整接入指南含 Viem / accounts 版本要求packages/core/src/tempo/Connectors.ts三个 Tempo 连接器与_setup装配骨架的源码实现packages/core/src/exports/tempo.tswagmi/tempo子路径导出定义packages/connectors/package.jsonaccounts可选 peer 依赖声明~0.14【免费下载链接】wagmiReactive primitives for Ethereum apps项目地址: https://gitcode.com/GitHub_Trending/wa/wagmi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考