typescript 安全帽在智能合约发送后不拾取余额

juzqafwq  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(114)

我正在尝试为我拥有的智能合约编写测试。为了简单起见,这是智能合约的外观:

**注意:**我对值进行了硬编码,以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);

当我看控制台时,它说新的余额和旧的余额一样。但是我的智能合约没有抛出。
我有一种感觉,这与安全帽的工作方式有关,它只是忽略了值。我如何验证余额是否正确发送?

**编辑:**其他信息

1.我已经验证了我的安全帽配置不会默默失败,通过替换成功变量与一个显式的假
1.以下是运行测试返回的日志:
旧余额:276014338387200新余额:276014338387200
1.我有一种感觉,这一定是一个安全帽的问题,因为无论我在我的初始存款从同一个帐户,我总是返回相同的余额。

oxf4rvwz

oxf4rvwz1#

问题出在这行代码上:

const provider = ethers.getDefaultProvider();

默认提供程序不一定是您用于测试的提供程序,而是您需要在ethers上访问提供程序,如下所示:

ethers.provider.getBalance(owner.address);

相关问题