Transfer
合約不接受從另一個合約發送的 eth
嗨,我嘗試通過呼叫 sendPayment 函式將 ETH 從 Sender 合約發送到 Receiver 合約。但我得到一個錯誤。我知道問題是回退函式中的 require 語句,因為沒有它它可以工作。誰能告訴我如何在這種情況下讓接收者合約接收 ETH(接收 ETH 時餘額必須為 0)。謝謝你。
pragma solidity ^0.5.0; contract Receiver { function viewBalance () public view returns(uint) { return address(this).balance; } function () external payable { require(address(this).balance == 0); } } contract Sender { Receiver receiver; constructor (Receiver _receiver, string memory blank) public { receiver = _receiver; } function sendPayment () public payable { address(receiver).transfer(msg.value); } }
將其更改為:
require(address(this).balance == msg.value);
由於餘額已經包含剛剛收到的乙太幣(msg.value),這將驗證在此交易之前合約中沒有餘額。
請注意,有人可以通過向其發送 1 wei 來終止您的契約。