Solidity
退還儲存在合約中的乙太幣
我正在嘗試將 Ether 儲存在契約中並在呼叫函式 paypackEther() 時將其退還。在帶有 JavaScript VM 的 Remix IDE 內部,它執行良好,但是當我使用 Mist 在 Rinkeby 上執行它時,我無法獲得儲存的乙太幣。這讓我瘋了…
我的錯誤是什麼?
pragma solidity ^0.4.24; contract SimpleContract { function () public payable { } constructor() payable public { } function paybackEther() public { selfdestruct(msg.sender); } }
合約地址為:0x0b5933fd3D33F7d79C0e19e12A070fafA053Df57 https://rinkeby.etherscan.io/address/0x0b5933fd3d33f7d79c0e19e12a070fafa053df57
提前致謝 :)
我剛剛查看了您的交易,發現您根本沒有呼叫該
paybackEther()
函式:
- 0x9afb64e3082d06e0915f7d89a2b436ae3f9f273630407b52662d3a5785933336
- 0xd70b7dae05ee903868fc9367f6a3795b76e0916597187c1fda31bbf3c655d321
- 0x70b1860a8f1c9f2ec002e737744198a83f8d8182c6b853895991ffceec6201f9
所有這些交易都會向合約發送 0 個乙太幣和 0 個字節的數據。呼叫
paybackEther()
將向合約發送 4 個字節的數據。嘗試在 Mist 中呼叫該函式時,您很可能做錯了什麼。我不知道是什麼,因為我無法在您的螢幕上查看您正在按下哪些按鈕 :)
我找到了一個答案,但它不是很“乾淨”:似乎 Mist 在函式 paybackEther 中需要一個輸入參數……
pragma solidity ^0.4.24; contract SimpleContract { bool public finished; function () public payable { } constructor() payable public { } function paybackEther(bool newfinished) public { finished = newfinished; selfdestruct(msg.sender); } }