Transfer

合約不接受從另一個合約發送的 eth

  • February 4, 2022

嗨,我嘗試通過呼叫 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 來終止您的契約。

引用自:https://ethereum.stackexchange.com/questions/120759