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

如何测试Solidity Payable合约?求助Foundry模拟以太币支付内置方法

Foundry测试中模拟Payable函数支付以太的方法

Foundry的测试合约(继承自Test)提供了几个实用的内置函数,能轻松模拟带以太支付的payable函数调用:

  • deal(address account, uint256 amount):给指定地址转入指定数量的以太,用于预先为测试账户或合约充值,确保调用payable函数时有足够余额。
    示例代码:

    deal(address(this), 1 ether); // 给当前测试合约转入1ETH
    deal(userAddr, 5 ether);     // 给自定义的用户地址转入5ETH
    
  • hoax(address from, uint256 amount):一站式完成「给地址充以太+切换调用身份」的操作,非常适合模拟外部用户带以太调用合约payable方法的场景。
    示例代码:

    hoax(userAddr, 2 ether);
    // 调用合约的payable函数并附带1ETH
    yourContract.targetPayableFunc{value: 1 ether}();
    
  • prank(address from):仅切换后续调用的发起身份,不会自动充以太。需要配合deal先给目标地址充值,再切换身份调用。
    示例代码:

    deal(userAddr, 3 ether);
    prank(userAddr);
    // 以userAddr身份调用payable函数,附带0.5ETH
    payable(yourContract).call{value: 0.5 ether}("");
    

另外,直接使用Solidity的{value: amount}语法,配合上述身份切换或余额准备操作,就能完成带支付的函数调用。比如测试合约自身调用时,可直接在函数调用时附加以太:

yourContract.targetPayableFunc{value: 1.5 ether}();

注意:Foundry测试合约默认有充足以太,但自定义的外部测试账户初始余额为0,必须先通过deal或hoax充值才能发起支付操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:57:18