msg.value всегда показывает 0 в ремиксе

Я новичок в Solidity и переписываю код Casino DApp по следующей ссылке:

https://itnext.io/create-your-first-ethereum-dapp-with-web3-and-vue-js-c7221af1ed82

Теперь я тестирую код солидности в ремиксе и получаю ошибку во второй requireфункции в betфункции, так как msg.valueона равна 0.

Как мне это исправить?

Это мой текущий код.

pragma solidity ^0.4.10;
contract Ownable {
  address public owner;

  function Ownable() public {
    owner = msg.sender;
  }

  modifier Owned {
    require(msg.sender == owner);
    _;
  }
}

contract Mortal is Ownable {
  function kill() public Owned { 
    selfdestruct(owner);
  }
}

contract Casino is Mortal{
  uint minBet;
  uint houseEdge;

  event Won(bool _status, uint _amount);
  event Log(uint _value);

  function Casino(uint _minBet, uint _houseEdge) payable public {
    require(_minBet > 0);
    require(_houseEdge <= 100);
    minBet = _minBet;
    houseEdge = _houseEdge;
  }

  function() public {
    revert();
  }

  function bet(uint _number) payable public {
    require(_number > 0 && _number <= 10);
    require(msg.value >= minBet);

    uint winningNumber = block.number % 10 + 1;

    if (_number == winningNumber) {
      uint amountWon = msg.value * (100 - houseEdge)/10;
      if(!msg.sender.send(amountWon)) revert();
      emit Won(true, amountWon);
    } else {
      emit Won(false, 0);
    }
  }

  function checkContractBalance() Owned public view returns(uint) {
    return address(this).balance;
  }

}

Обновления; Я дал 20 эт и значений контракту с казино, когда я его развертываю.введите описание изображения здесь

установка стоимости вашей транзакции. Из Remix: запустить -> первое поле -> ввод значения: написать что-нибудь там и выполнить транзакцию

Ответы (4)

Поля значений в конструкторе помещаются в Wei (обычно) и находятся между ними "". То же самое и для строк.

Итак, на вашей кнопке развертывания должно быть указано:"100000", "10".

Я также рекомендую вам использовать переменные uint256. Это уменьшит ваши расходы на газ.

Надеюсь, поможет.

Привет, msg.valueполучил 20000000000000000000 вэй благодаря твоему совету! Я все еще получаю ошибку в той же строке, хотя...
Хе-хе, приятно! Не забудьте проголосовать за ответ или отметить его как правильный, чтобы помочь другим быстрее добраться до него!
Для другой ошибки вы можете создать другой вопрос и ждать ответа! :)

Если кто-то, как я, пытался понять, как установить какое-то значение для msg в Remix для теста, трюк заключается в следующем:

///#value: 100
function testSomething() payable public {
   Assert.greaterThan(msg.value, uint(50), 'value should be > 50');
}

Если вы запустите этот код выше, все будет в порядке. Потому что нужно поставить "///#значение: {нужное значение}" - С тремя дефисами и пробелом между #значением и желаемым значением.

В более новых версиях Remix используйте поле с именем « Значение » над кнопкой развертывания. Это то же поле, которое используется для выбора начального баланса контракта при развертывании, когда конструктор подлежит оплате.

введите описание изображения здесь

Затем нажмите кнопку, которая вызывает нужную вам оплачиваемую функцию.

Я следовал совету других пользователей, заполнив поле «Значение» в среде IDE, но все равно получая 0 wei в качествеmsg.value

Проблема для меня заключалась в том, что когда я прокручивал вниз, чтобы вызвать функцию, я случайно прокрутил вниз поле ввода текста и изменил значение с 1 на 0 🤦‍♀️

Если вы перепробовали все, попробуйте щелкнуть за пределами текстового поля, чтобы убедиться, что значение сохранено, прежде чем вызывать функцию!

скриншот поля ввода