msg.value zeigt im Remix immer 0 an

Ich bin ein Anfänger der Solidität und schreibe einen Casino-DApp-Code basierend auf dem folgenden Link um:

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

Jetzt teste ich Solidity-Code in Remix und erhalte einen Fehler in der zweiten requireFunktion in betFunktion, da msg.value0 ist.

Wie soll ich das beheben?

Das ist mein aktueller Code.

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;
  }

}

Aktualisierung; Ich habe dem Casino-Vertrag 20 Eth und Werte gegeben, als ich ihn einsetzte.Geben Sie hier die Bildbeschreibung ein

Festlegen des Werts Ihrer Transaktion. Von Remix: Ausführen -> erstes Feld -> Werteingabe: Schreiben Sie dort etwas und führen Sie Ihre Transaktion aus

Antworten (4)

Wertfelder im Konstruktor werden (normalerweise) auf Wei gesetzt und gehen zwischen "". Dasselbe gilt auch für Saiten.

Auf Ihrer Bereitstellungsschaltfläche sollte also Folgendes stehen:"100000", "10".

Ich empfehle Ihnen auch, uint256-Variablen zu verwenden. Es senkt Ihre Gaskosten.

Ich hoffe es hilft.

Hallo, msg.valuehabe 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Wei erhalten Ich bekomme aber immer noch einen Fehler in der gleichen Zeile...
Hehe, schön! Denken Sie daran, für die Antwort zu stimmen oder sie als richtig zu markieren, um anderen zu helfen, sie leichter zu erreichen!
Für den anderen Fehler können Sie eine weitere Frage erstellen und auf eine Antwort warten! :)

Wenn jemand wie ich versucht hat zu verstehen, wie man msg in Remix für einen Test einen Wert setzt, ist der Trick folgender:

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

Wenn Sie diesen Code oben ausführen, ist es in Ordnung. Weil Sie "///#value: {deired value}" einfügen müssen - mit drei Bindestrichen und einem Leerzeichen zwischen #value und dem gewünschten Wert.

Verwenden Sie in neueren Versionen von Remix das Feld namens Wert über der Bereitstellungsschaltfläche. Es ist das gleiche Feld, das verwendet wird, um den anfänglichen Vertragssaldo bei der Bereitstellung auszuwählen, wenn der Erbauer zahlbar ist.

Geben Sie hier die Bildbeschreibung ein

Klicken Sie dann auf die Schaltfläche, die die gewünschte Zahlungsfunktion aufruft.

Ich folgte den Ratschlägen anderer Benutzer und füllte das Feld Wert in der IDE aus, erhielt aber immer noch 0 wei alsmsg.value

Das Problem für mich war, dass ich, als ich nach unten gescrollt habe, um die Funktion aufzurufen, versehentlich im Texteingabefeld nach unten gescrollt und den Wert von 1 auf 0 geändert habe 🤦‍♀️

Wenn Sie alles versucht haben, versuchen Sie, außerhalb des Texteingabefelds zu klicken, um sicherzustellen, dass der Wert gespeichert wird, bevor Sie die Funktion aufrufen!

Screenshot des Eingabefeldes