Solidity
send() 或 transfer() 函式總是失敗
我在下面創建了一些程式碼
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 個功能:
constructor()
僅在合約創建時執行一次的函式。您可以使用此函式來初始化變數,例如合約的所有者是誰以及其他全域值。在這種情況下,我們製作了函式payable
,這意味著它可以接受 ETH。因此,在合約創建期間,您可以傳遞 ETH,msg.value
並且在創建合約時,ETH 將作為其餘額的一部分被接受到合約中。- 一個備用函式
function()
(這意味著您可以簡單地將 ETH 發送到合約,並且由於回退功能也是payable
,它將接受該 ETH。使用這些功能中的任何一個,您都應該能夠向您的合約發送足夠的 ETH,以便您的其他功能可以正常工作。
您應該花一些時間閱讀有關這兩個主題的solidity文件以及更多內容!