Несмотря на то, что у меня нет конструктора в моем коде, я получаю ошибку, конструктор должен быть платным, если вы отправляете значение - PullRequest
0 голосов
/ 24 августа 2018

Это мой код в Солидности

pragma solidity ^0.4.17;
contract WithdrawalContract {
   mapping(address => uint) buyers;

   function buy()public payable {
      require(msg.value > 0);
      buyers[msg.sender] = msg.value;
   }
   function withdraw()public {
      uint amount = buyers[msg.sender];
      require(amount > 0);
      buyers[msg.sender] = 0;      
      require(msg.sender.send(amount));
   }
}

Ниже приведена ошибка, которую я получаю. Не уверен, почему он запрашивает конструктор

транзакция с WithdrawalContract.buy с ошибкой: ошибка виртуальной машины: возврат. revert Транзакция была возвращена в исходное состояние. Примечание. Конструктор должен быть платным, если вы отправляете значение. Отладка транзакции для получения дополнительной информации.

1 Ответ

0 голосов
/ 24 августа 2018

Это только часть сообщения об ошибке, которое Remix показывает, когда транзакция возвращается, предположительно потому, что это распространенная ошибка, которую делают люди.

В вашем случае это не проблема. Я предполагаю, что вы звоните buy, а не присоединяете какой-либо эфир, поэтому require(msg.value > 0) вызывает возврат транзакции. В Remix убедитесь, что у вас есть ненулевое «значение» в правом верхнем углу.

...