Soy un principiante de la solidez y estoy reescribiendo un código DApp de Casino basado en el siguiente enlace:
https://itnext.io/create-your-first-ethereum-dapp-with-web3-and-vue-js-c7221af1ed82
Ahora estoy probando el código de solidez en remix y obtengo un error en la segunda require
función en bet
función ya que msg.value
es 0.
¿Cómo debo arreglar esto?
Este es mi código actual.
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;
}
}
Actualizaciones; Le di 20 eth y valores al contrato de Casino cuando lo implementé.
Los campos de valor en el constructor se colocan en Wei (normalmente) y van entre ""
. También lo mismo para las cuerdas.
Entonces, en su botón de implementación debería poner:"100000", "10".
También te recomiendo que uses variables uint256. Reducirá sus costos de gasolina.
Espero eso ayude.
msg.value
obtuve 20000000000000000000 wei gracias a tu consejo! Sin embargo, sigo recibiendo un error en la misma línea ...Si alguien, como yo, estaba tratando de entender cómo establecer algún valor para msg en Remix para una prueba, el truco es este:
///#value: 100
function testSomething() payable public {
Assert.greaterThan(msg.value, uint(50), 'value should be > 50');
}
Si ejecuta este código anterior, estará bien. Porque necesitas poner "///#valor: {valor deseado}" - Con tres guiones y un espacio en blanco entre #valor y el valor deseado.
En las versiones más recientes de Remix, use el campo denominado Valor arriba del botón de implementación. Es el mismo campo que se utiliza para elegir el saldo inicial del contrato en la implementación cuando el constructor es pagadero.
Luego haga clic en el botón que llama a la función de pago que necesita.
Estaba siguiendo los consejos de otros usuarios, completando el campo Valor en el IDE, pero aún obtenía 0 wei como elmsg.value
El problema para mí fue que cuando me desplacé hacia abajo para llamar a la función , accidentalmente me desplacé hacia abajo en el campo de entrada de texto y cambié el valor de 1 a 0 🤦♀️
Si ha intentado todo, intente hacer clic fuera del cuadro de entrada de texto para asegurarse de que se guarde el valor, ¡antes de llamar a la función!
mirg