GPTLens / data_full /CVE /2018-11239.sol
Aishwarya Solanki
initial commit
ee7776a
pragma solidity ^0.4.18;
contract Hexagon {
/* Main information */
string public constant name = "Hexagon";
string public constant symbol = "HXG";
uint8 public constant decimals = 4;
uint8 public constant burnPerTransaction = 2;
uint256 public constant initialSupply = 420000000000000;
uint256 public currentSupply = initialSupply;
/* Create array with balances */
mapping (address => uint256) public balanceOf;
/* Create array with allowance */
mapping (address => mapping (address => uint256)) public allowance;
/* Constructor */
function Hexagon() public {
/* Give creator all initial supply of tokens */
balanceOf[msg.sender] = initialSupply;
}
/* PUBLIC */
/* Send tokens */
function transfer(address _to, uint256 _value) public returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
/* Return current supply */
function totalSupply() public constant returns (uint) {
return currentSupply;
}
/* Burn tokens */
function burn(uint256 _value) public returns (bool success) {
/* Check if the sender has enough */
require(balanceOf[msg.sender] >= _value);
/* Subtract from the sender */
balanceOf[msg.sender] -= _value;
/* Send to the black hole */
balanceOf[0x0] += _value;
/* Update current supply */
currentSupply -= _value;
/* Notify network */
Burn(msg.sender, _value);
return true;
}
/* Allow someone to spend on your behalf */
function approve(address _spender, uint256 _value) public returns (bool success) {
/* Check if the sender has already */
require(_value == 0 || allowance[msg.sender][_spender] == 0);
/* Add to allowance */
allowance[msg.sender][_spender] = _value;
/* Notify network */
Approval(msg.sender, _spender, _value);
return true;
}
/* Transfer tokens from allowance */
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
/* Prevent transfer of not allowed tokens */
require(allowance[_from][msg.sender] >= _value);
/* Remove tokens from allowance */
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
/* INTERNAL */
function _transfer(address _from, address _to, uint _value) internal {
/* Prevent transfer to 0x0 address. Use burn() instead */
require (_to != 0x0);
/* Check if the sender has enough */
require (balanceOf[_from] >= _value + burnPerTransaction);
/* Check for overflows */
require (balanceOf[_to] + _value > balanceOf[_to]);
/* Subtract from the sender */
balanceOf[_from] -= _value + burnPerTransaction;
/* Add the same to the recipient */
balanceOf[_to] += _value;
/* Apply transaction fee */
balanceOf[0x0] += burnPerTransaction;
/* Update current supply */
currentSupply -= burnPerTransaction;
/* Notify network */
Burn(_from, burnPerTransaction);
/* Notify network */
Transfer(_from, _to, _value);
}
/* Events */
event Transfer(address indexed from, address indexed to, uint256 value);
event Burn(address indexed from, uint256 value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}