Solidity

交易在應付功能中遇到 Require 語句時恢復

  • January 31, 2018

簡而言之,當使用者從 UI 中點擊送出按鈕時,它需要傳遞一個固定價格_pricepay()執行(在 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是失敗的。

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