智能合约发送后,Hardhat未拾取余额



我正在尝试为我拥有的智能合约编写测试。为了简单起见,下面是智能合约的样子:

注意:我硬编码了这个值,以便100%确定离开合约的值。

function withdraw(uint256 tokenId, address to, address owner) external returns (uint256 amount) {
amount = _positionManager.withdraw(tokenId, owner);

_wrapper.withdraw(amount);
//(bool success, ) = to.call{value: amount }("");
(bool success, ) = to.call{value: 100000000000000000 }("");
// failed transfer...
require(success, "3FM:FT");
emit Withdraw(to, amount);
}

我有一个测试,看起来像这样:

const provider = ethers.getDefaultProvider();
const oldBalance = await provider.getBalance(owner.address);
console.log('Old Balance:' + oldBalance);
await fundManager.withdraw(defaultTokenId, owner.address, owner.address);
const newBalance = await provider.getBalance(owner.address);
const expectedAmount = oldBalance.add(BigNumber.from("100000000000000000"));    
console.log('New Balance:' + newBalance);
expect(newBalance).to.equal(expectedAmount);

当我查看控制台时,它显示新余额与旧余额相同。但是我的智能合约不会抛出

我有一种感觉,这与hardhat的工作方式有关,它只是忽略了值。我如何验证余额是否正确发送?

编辑:其他信息

  1. 我已经验证了我的硬帽配置不会静默失败,通过将成功变量替换为显式的false

  2. 这些是运行测试返回的日志:

老余额:276014338387200新的平衡:276014338387200

  1. 我有一种感觉,这一定是一个棘手的问题,因为无论我在同一账户的初始存款中赚了多少,我总是以相同的余额返回。

问题出在这行代码上:

const provider = ethers.getDefaultProvider();

默认的提供者不一定是你在测试中使用的提供者,相反,你需要像这样在醚上访问提供者:

ethers.provider.getBalance(owner.address);   

相关内容

  • 没有找到相关文章

最新更新