Solidity
msg.value 在混音中總是顯示 0
我是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; } }
建構子上的值欄位放在 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 和所需值之間使用三個破折號和一個空格。