Solidity
如何呼叫應付函式並從合約餘額中支付?
首先,這不是這些問題的重複問題:
我想知道是否可以從契約 A 中的非應付函式呼叫契約 B 中的應付函式,並從契約 A 的餘額而不是從呼叫者那裡支付。
這樣,呼叫對呼叫者來說是“免費的”,並且合約將承擔支付第二個應付函式的成本。
我試過
{value: amount}
在呼叫請求中使用,但這似乎是從呼叫者那裡獲得資金,而不是從契約餘額中。謝謝!!
這只是純粹的猜想,但我知道可以呼叫值為 0 的應付函式。因此,應該可以執行您所描述的操作。你應該在 remix.ethereum.org 上嘗試一下
是的,有可能,這裡有一個例子:我已經部署了我的第一個合約
TestPayable
,其中包含一個payableFunction
需要 1 個乙太幣的合約。contract TestPayable { uint public count; function payableFunction() payable external { require(msg.value == 1 ether); count++; } function getBalance() external view returns(uint) { return address(this).balance; } }
然後我有我的第二份契約
CallPayable
,我有一個接收功能,我在呼叫之前發送了一些乙太幣callPayableFunction
。interface ITestPayable { function payableFunction() payable external; } contract CallPayable { receive() payable external { } function callPayableFunction(address contractAddress) external { IPayable(contractAddress).payableFunction{value: 1 ether}(); } function getBalance() external view returns(uint) { return address(this).balance; } }
通過呼叫
callPayableFunction
,它payableFunction()
從呼叫TestPayable
,增加 的餘額,TestPayable
並減少CallPayable
餘額。希望能幫助到你