Solidity
交易在應付功能中遇到 Require 語句時恢復
簡而言之,當使用者從 UI 中點擊送出按鈕時,它需要傳遞一個固定價格
_price
來pay()
執行(在 UI 上有選擇固定價格的選項,例如:0.01、0.02、0.03)。在函式中,它檢查是否msg.value
等於從 UI 傳遞的數量。然後發件人將該價格發送到契約地址,並將其加起來為契約總餘額。當我用 remix 調試它時,它會在命中時給出一條錯誤消息require(_price == msg.value)
交易到 Test.pay 錯誤:VM 錯誤:還原。revert 事務已恢復到初始狀態。注意:如果您發送值,則應支付建構子。調試事務以獲取更多資訊。
contract Test { function Test() { owner = msg.sender; } function pay(uint _price) payable returns (bool) { //... require(_price == msg.value); // Check ether sent is matching with the price address(this).transfer(msg.value); // Send price to the contract address balanceOfContract[address(this)] += msg.value; // Store price to current contract balance LogDeposit(msg.sender, msg.value); return true; } }
為了以防萬一,我增加了氣體限制,但仍然給我錯誤。幫助表示讚賞!
總結評論執行緒中的發現:
問題是
_price
傳遞給pay
函式的參數是在 ether 而不是 wei 中指定的。msg.value
總是在wei,所以require
是失敗的。