使用secret.js部署Secret Network NFT时Secp256k1Pen未定义问题求助
问题分析与解决
错误原因
出现TypeError: Cannot read properties of undefined (reading 'fromMnemonic')的核心原因是你安装的secretjs版本和教程依赖版本不兼容:
- 教程使用的是旧版
secretjs(如v1.x/v2.x),这类版本中确实存在Secp256k1Pen类; - 若你安装的是v10+的新版
secretjs,该类已被移除,且签名模块API结构大幅调整,导致你无法从secretjs中导出Secp256k1Pen,最终该变量为undefined。
解决方法
你有两种可行方案:
1. 回退到教程对应的旧版secretjs
卸载当前版本,安装教程匹配的版本(比如视频中常用的1.7.2,可对照视频依赖确认具体版本号):
npm uninstall secretjs npm install secretjs@1.7.2
完成后重新运行部署脚本,原代码即可正常执行。
2. 适配新版secretjs的API
若想使用新版secretjs,需替换签名相关代码逻辑,示例如下:
首先替换导入部分:
const { SigningCosmWasmClient } = require("secretjs"); const { DirectSecp256k1HdWallet } = require("@cosmjs/proto-signing");
然后替换原Secp256k1Pen的初始化代码:
// 替代原Secp256k1Pen.fromMnemonic逻辑 const wallet = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: "secret" }); const [account] = await wallet.getAccounts(); // 后续创建SigningCosmWasmClient时使用wallet的签名器 const client = await SigningCosmWasmClient.connectWithSigner( "https://rpc.testnet.secret.network", // 你的节点地址 wallet );
内容的提问来源于stack exchange,提问作者ChristianOConnor
相关产品推荐
相关产品推荐

