You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hardhat中ethers.getSigners返回签名者数组长度仅为1如何解决?

Hardhat 中 ethers.getSigners() 仅返回1个签名者问题排查

复现代码

import { ethers } from "hardhat";
// ...其他逻辑
const [owner, user1, user2, user3] = await ethers.getSigners();
console.log(user1, user2, user3); // 控制台输出三个undefined

问题产生原因

  • 本地Hardhat网络账户配置错误
    Hardhat内置临时开发网络默认会生成10个预置测试ETH的签名账户,但如果手动修改了hardhat.config.js中网络配置的accounts字段,比如将账户生成数量count设为1,或者仅传入1个私钥到账户数组,getSigners()就只会返回配置对应数量的签名者。
    典型错误配置示例:
    // hardhat.config.js 错误配置
    module.exports = {
      networks: {
        hardhat: {
          accounts: {
            count: 1 // 仅配置生成1个测试账户
          }
        }
      }
    }
    
  • 连接自定义外部网络时节点账户不足
    如果测试时指定了连接外部网络(比如自建Ganache节点、公链测试网节点),且对应网络配置中仅导入了1个账户私钥,或节点本身仅加载了1个可用签名账户,方法就只会返回这1个可用签名者。
  • 依赖版本不兼容
    部分旧版本的hardhat-ethers插件存在签名者拉取逻辑bug,在特定配置场景下无法正确加载Hardhat内置的默认测试账户列表。

可行解决方案

  • 先确认签名者实际返回数量,明确问题边界:
    const allSigners = await ethers.getSigners();
    console.log("当前环境可用签名者总数量:", allSigners.length);
    
  • 修正本地Hardhat网络配置
    检查hardhat.config.js中的hardhat网络配置,要么删除自定义的accounts字段恢复默认配置(默认生成10个测试账户),要么将count参数调整为测试需要的数值(比如需要4个账户就设为≥4);如果是手动传入私钥的场景,补全测试需要的对应数量的账户私钥即可。
    参考配置示例:
    // hardhat.config.js 正确配置
    module.exports = {
      solidity: "0.8.20",
      networks: {
        hardhat: {
          accounts: {
            count: 10,
            balance: "10000000000000000000000" // 每个测试账户预置10000ETH
          }
        }
      }
    };
    
  • 补全外部网络账户配置
    如果测试时指定了--network参数连接外部节点,找到对应网络的配置项,把测试需要用到的账户私钥添加到accounts数组中即可。
  • 修复依赖版本问题
    如果确认配置无误但问题仍存在,执行命令安装稳定兼容版本的相关依赖:
    npm install --save-dev hardhat @nomicfoundation/hardhat-ethers ethers
    
    安装完成后清空缓存重新运行测试:
    npx hardhat clean
    npx hardhat test
    

注意:执行测试命令时如果携带了--network 网络名参数,getSigners()不会加载Hardhat内置的临时测试账户,只会返回对应网络配置中声明的账户列表。

内容的提问来源于stack exchange,提问作者Alex Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:36:51