Я новичок в 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 эт и значений контракту с казино, когда я его развертываю.
Поля значений в конструкторе помещаются в 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');
}
Если вы запустите этот код выше, все будет в порядке. Потому что нужно поставить "///#значение: {нужное значение}" - С тремя дефисами и пробелом между #значением и желаемым значением.
Я следовал совету других пользователей, заполнив поле «Значение» в среде IDE, но все равно получая 0 wei в качествеmsg.value
Проблема для меня заключалась в том, что когда я прокручивал вниз, чтобы вызвать функцию, я случайно прокрутил вниз поле ввода текста и изменил значение с 1 на 0 🤦♀️
Если вы перепробовали все, попробуйте щелкнуть за пределами текстового поля, чтобы убедиться, что значение сохранено, прежде чем вызывать функцию!
мирг