msg.value siempre muestra 0 en remix

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 requirefunción en betfunción ya que msg.valuees 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é.ingrese la descripción de la imagen aquí

establecer el valor de su transacción. Desde Remix: ejecutar -> primer cuadro -> entrada de valor: escriba algo allí y ejecute su transacción

Respuestas (4)

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.

Hola, msg.valueobtuve 20000000000000000000 wei gracias a tu consejo! Sin embargo, sigo recibiendo un error en la misma línea ...
Jejeje, que bueno! ¡Recuerde votar la respuesta o marcarla como correcta para ayudar a otros a alcanzarla más fácilmente!
Para el otro error, puede crear otra pregunta y esperar una respuesta. :)

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.

ingrese la descripción de la imagen aquí

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!

captura de pantalla del campo de entrada