mirror of https://github.com/ConsenSys/mythril
Handle edge case during feature extraction (#1811)
* Update requirements.txt * use eth-abi * Update requirements.txt * Handle edge case during feature extractionpull/1812/head
parent
60ca80b91a
commit
91c4ddad2e
@ -0,0 +1,53 @@ |
|||||||
|
pragma solidity ^0.8.0; |
||||||
|
|
||||||
|
contract Regression_1 { |
||||||
|
mapping (address => uint256) private userBalances; |
||||||
|
|
||||||
|
uint256 public constant TOKEN_PRICE = 1 ether; |
||||||
|
string public constant name = "Moon Token"; |
||||||
|
string public constant symbol = "MOON"; |
||||||
|
|
||||||
|
// The token is non-divisible |
||||||
|
// You can buy/sell/transfer 1, 2, 3, or 46 tokens but not 33.5 |
||||||
|
uint8 public constant decimals = 0; |
||||||
|
|
||||||
|
uint256 public totalSupply; |
||||||
|
|
||||||
|
function buy(uint256 _amount) external payable { |
||||||
|
require( |
||||||
|
msg.value == _amount * TOKEN_PRICE, |
||||||
|
"Ether submitted and Token amount to buy mismatch" |
||||||
|
); |
||||||
|
|
||||||
|
userBalances[msg.sender] += _amount; |
||||||
|
totalSupply += _amount; |
||||||
|
} |
||||||
|
|
||||||
|
function sell(uint256 _amount) external { |
||||||
|
require(userBalances[msg.sender] >= _amount, "Insufficient balance"); |
||||||
|
|
||||||
|
userBalances[msg.sender] -= _amount; |
||||||
|
totalSupply -= _amount; |
||||||
|
|
||||||
|
(bool success, ) = msg.sender.call{value: _amount * TOKEN_PRICE}(""); |
||||||
|
require(success, "Failed to send Ether"); |
||||||
|
|
||||||
|
assert(getEtherBalance() == totalSupply * TOKEN_PRICE); |
||||||
|
} |
||||||
|
|
||||||
|
function transfer(address _to, uint256 _amount) external { |
||||||
|
require(_to != address(0), "_to address is not valid"); |
||||||
|
require(userBalances[msg.sender] >= _amount, "Insufficient balance"); |
||||||
|
|
||||||
|
userBalances[msg.sender] -= _amount; |
||||||
|
userBalances[_to] += _amount; |
||||||
|
} |
||||||
|
|
||||||
|
function getEtherBalance() public view returns (uint256) { |
||||||
|
return address(this).balance; |
||||||
|
} |
||||||
|
|
||||||
|
function getUserBalance(address _user) external view returns (uint256) { |
||||||
|
return userBalances[_user]; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue