Solidity

send() 或 transfer() 函式總是失敗

  • September 6, 2018

我在下面創建了一些程式碼

pragma 可靠性 ^0.4.19;

contract SendAndTransferExample {

   function SimpleSendToAccount() public returns(bool) {
      return msg.sender.send(10000000000000000000);
   }

   function SimpleTransferToAccount() public {
      msg.sender.transfer(10000000000000000000);
   }
}

我使用 JavaScript vm 執行了這兩個函式,結果總是一樣的。執行 send() 函式時的第一個結果 在此處輸入圖像描述 和執行 trasfer() 函式時的以下結果 在此處輸入圖像描述

transact to SendAndTransferExample.SimpleTransferToAccount errored: VM error: revert.
revert  The transaction has been reverted to the initial state.
Note: The constructor should be payable if you send value.  Debug the transaction to get more information. 

我不知道出了什麼問題。請幫幫我。

試試這個為你的契約:

pragma solidity ^0.4.24;

contract SendAndTransferExample {

   constructor() public payable { }

   function SimpleSendToAccount() public returns(bool) {
      return msg.sender.send(10000000000000000000);
   }

   function SimpleTransferToAccount() public {
      msg.sender.transfer(10000000000000000000);
   }

   function() public payable { }
}

在這裡,我添加了 2 個功能:

  1. constructor()僅在合約創建時執行一次的函式。您可以使用此函式來初始化變數,例如合約的所有者是誰以及其他全域值。在這種情況下,我們製作了函式payable,這意味著它可以接受 ETH。因此,在合約創建期間,您可以傳遞 ETH,msg.value並且在創建合約時,ETH 將作為其餘額的一部分被接受到合約中。
  2. 一個備用函式function()(這意味著您可以簡單地將 ETH 發送到合約,並且由於回退功能也是payable,它將接受該 ETH。

使用這些功能中的任何一個,您都應該能夠向您的合約發送足夠的 ETH,以便您的其他功能可以正常工作。

您應該花一些時間閱讀有關這兩個主題的solidity文件以及更多內容!

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