在调用函数时,向它传递适当的以太币值。
例如,我们有如下的 Solidity 合约代码:
contract MyContract {
function myFunction() public {
// some code here
}
function myPayableFunction() public payable {
// some code here
}
}
contract AnotherContract {
MyContract myContract;
function callMyFunction() public {
myContract.myFunction(); // 没问题
}
function callMyPayableFunction() public payable {
myContract.myPayableFunction(); // 报错!需要添加 payable 标识符
}
}
在调用 myPayableFunction
函数时,我们需要像这样传递以太币:
myContract.myPayableFunction{value: msg.value}();
或者,使用 call
函数来调用,并传递合适的以太币值:
(bool success, ) = address(myContract).call{value: msg.value}(abi.encodeWithSignature("myPayableFunction()"));
两种方法都可以解决这个问题。