"owner" 帐户在 Hardhat 测试套件中以非零 DAI 余额开始

"owner" account start with a non-zero DAI balance in Hardhat test suite

我正在使用 Hardhat 的主网分支编写单元测试,对于测试,我想断言 owner 帐户的初始 DAI 余额为 0。但是当代码到达断言时 assert(ownerDai.isZero());,断言失败。这是测试:

const { assert } = require("chai");
const { ethers } = require("hardhat");
const ERC20ABI = require('../external_ABI/ERC20.json'); // ERC20 abi for interacting with DAI

const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f";

describe("SimpleTest", function () {
    it("Test that owner DAI balance is 0", async function () {
        const provider = ethers.provider;
        const [owner] = await ethers.getSigners();
        const DAI = new ethers.Contract(DAI_ADDRESS, ERC20ABI, provider);

        ownerDaiBalance = await DAI.balanceOf(owner.address);
        assert(ownerDaiBalance.isZero()); // Assertion fails here
    });
});

如果我打印 ownerDaiBalance 到控制台,它显示余额实际上等于 10008133730236507217。为什么 ownerDaiBalance 不是零开始?

我发现在区块 #14189520,这是我分叉的区块,owner 账户 实际上 在以太坊上有一些 DAI主网。它只有 10 美元的 DAI,但这解释了为什么我得到的初始余额是 1000813373023650721 而不是预期的 0。

我将 owner 添加到我的主网 Metamask 帐户,结果发现 owner 还有其他 ERC20 代币:

我想现在的 gas 费用太高了,任何人都不会考虑将这些资金转出。

无论如何,作为一种解决方法,我添加了 addr1 作为单元测试的第二个帐户,没有 有任何 DAI 开头:

const [owner, addr1] = await ethers.getSigners();