Solidity

msg.value 在混音中總是顯示 0

  • April 22, 2022

我是solidity的初學者並根據以下連結重寫Casino DApp程式碼:

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

現在我正在測試 remix 中的可靠性程式碼,並在函式中的第二個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 個 eth 和價值。 在此處輸入圖像描述

建構子上的值欄位放在 Wei (通常) anb 之間""。字元串也一樣。

所以在你的部署按鈕上應該放:"100000", "10".

我還建議您使用 uint256 變數。它將降低您的天然氣成本。

希望能幫助到你。

如果有人像我一樣試圖了解如何在 Remix 中為 msg 設置一些值以進行測試,那麼訣竅是:

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

如果你在上面執行這段程式碼就可以了。因為您需要輸入“///#value: {desired value}” - 在#value 和所需值之間使用三個破折號和一個空格。

引用自:https://ethereum.stackexchange.com/questions/49136