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

如何在Hardhat中获取配置账户的签名者?相关疑问解析

问题解答

1. 如何获取仅包含配置账户的签名者列表?

有两种实用方法:

方法一:直接从私钥创建签名者

在测试代码中读取环境变量里的私钥,用ethers.js的Wallet类直接生成对应签名者,示例代码:

const { ethers } = require("hardhat");

// 读取配置的私钥
const targetPrivateKeys = [
  process.env.PRIVATE_KEY,
  process.env.DEFAULT_MEMBER_PRIVATE_KEY,
  process.env.TEST_MEMBER_PRIVATE_KEY
];

// 生成签名者列表并关联当前provider
const targetSigners = targetPrivateKeys.map(key => new ethers.Wallet(key, ethers.provider));

方法二:给测试网络配置指定账户

修改hardhat.config.js,给默认的hardhat测试网络添加accounts配置,这样测试时ethers.getSigners()就会返回这些账户:

require('dotenv').config();
module.exports = {
  solidity: "0.8.10",
  networks: {
    hardhat: {
      // 配置测试网络使用指定私钥,可自定义初始余额
      accounts: [
        process.env.PRIVATE_KEY,
        process.env.DEFAULT_MEMBER_PRIVATE_KEY,
        process.env.TEST_MEMBER_PRIVATE_KEY
      ].map(key => ({ privateKey: key, balance: "100000000000000000000" }))
    },
    goerli: {
      url: `https://goerli.infura.io/v3/${process.env.INFURA_API_KEY}`,
      accounts: [process.env.PRIVATE_KEY, process.env.DEFAULT_MEMBER_PRIVATE_KEY, process.env.TEST_MEMBER_PRIVATE_KEY]
    },
    sepolia: {
      url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`,
      accounts: [process.env.PRIVATE_KEY, process.env.DEFAULT_MEMBER_PRIVATE_KEY, process.env.TEST_MEMBER_PRIVATE_KEY]
    }
  },
  etherscan: {
    apiKey: process.env.ETHERSCAN_API_KEY,
  },
};

之后运行测试,ethers.getSigners()就会返回你配置的这几个账户对应的签名者。

2. ethers.getSigners()返回的签名者究竟是什么?

ethers.getSigners()返回的是当前Hardhat会话所连接网络的可用于签名交易的钱包实例列表,具体规则:

  • 使用默认hardhat测试网络(本地测试默认):返回10个Hardhat自动生成的测试账户,每个初始有100ETH余额,和你配置的goerli/sepolia网络账户无关;
  • 连接goerli/sepolia等真实网络(通过--network参数指定):返回对应网络配置中accounts数组里私钥对应的钱包实例;
  • 本质上,它是当前网络配置定义(或默认生成)的具备签名能力的账户集合,每个实例可用于发送交易、签名消息等操作。

内容的提问来源于stack exchange,提问作者Ivan Voras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:30