Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3d9a547
Showing
1 changed file
with
144 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
pragma solidity 0.4.21; | ||
|
||
/** | ||
* @title SafeMath | ||
* @dev Math operations with safety checks that throw on error | ||
*/ | ||
library SafeMath { | ||
function mul(uint256 a, uint256 b) internal pure returns (uint256) { | ||
if (a == 0) { | ||
return 0; | ||
} | ||
uint256 c = a * b; | ||
assert(c / a == b); | ||
return c; | ||
} | ||
|
||
function div(uint256 a, uint256 b) internal pure returns (uint256) { | ||
// assert(b > 0); // Solidity automatically throws when dividing by 0 | ||
uint256 c = a / b; | ||
// assert(a == b * c + a % b); // There is no case in which this doesn't hold | ||
return c; | ||
} | ||
|
||
function sub(uint256 a, uint256 b) internal pure returns (uint256) { | ||
assert(b <= a); | ||
return a - b; | ||
} | ||
|
||
function add(uint256 a, uint256 b) internal pure returns (uint256) { | ||
uint256 c = a + b; | ||
assert(c >= a); | ||
return c; | ||
} | ||
} | ||
|
||
contract ERC20 { | ||
function totalSupply()public view returns (uint total_Supply); | ||
function balanceOf(address _owner)public view returns (uint256 balance); | ||
function allowance(address _owner, address _spender)public view returns (uint remaining); | ||
function transferFrom(address _from, address _to, uint _amount)public returns (bool ok); | ||
function approve(address _spender, uint _amount)public returns (bool ok); | ||
function transfer(address _to, uint _amount)public returns (bool ok); | ||
event Transfer(address indexed _from, address indexed _to, uint _amount); | ||
event Approval(address indexed _owner, address indexed _spender, uint _amount); | ||
} | ||
|
||
|
||
contract OFNOG is ERC20 | ||
{ | ||
using SafeMath for uint256; | ||
string public constant symbol = "OFNOG"; | ||
string public constant name = "OFNOG"; | ||
uint public constant decimals = 18; | ||
uint256 public _totalSupply = 500000000 * 10 ** 18; // 500 Million Total Supply including 18 decimal | ||
|
||
// Owner of this contract | ||
address public owner; | ||
|
||
// Balances for each account | ||
mapping(address => uint256) balances; | ||
|
||
// Owner of account approves the transfer of an amount to another account | ||
mapping(address => mapping (address => uint256)) allowed; | ||
|
||
// Functions with this modifier can only be executed by the owner | ||
modifier onlyOwner() { | ||
require (msg.sender == owner); | ||
_; | ||
} | ||
|
||
// Constructor | ||
function OFNOG () public { | ||
owner = msg.sender; | ||
balances[owner] = _totalSupply; | ||
emit Transfer(0, owner, _totalSupply); | ||
} | ||
|
||
//Burning tokens | ||
function burntokens(uint256 tokens) external onlyOwner { | ||
require( tokens <= balances[owner]); | ||
_totalSupply = (_totalSupply).sub(tokens); | ||
balances[owner] = balances[owner].sub(tokens); | ||
emit Transfer(owner, 0, tokens); | ||
} | ||
|
||
// what is the total supply of the ech tokens | ||
function totalSupply() public view returns (uint256 total_Supply) { | ||
total_Supply = _totalSupply; | ||
} | ||
// What is the balance of a particular account? | ||
function balanceOf(address _owner)public view returns (uint256 balance) { | ||
return balances[_owner]; | ||
} | ||
|
||
// Transfer the balance from owner's account to another account | ||
function transfer(address _to, uint256 _amount)public returns (bool ok) { | ||
require( _to != 0x0); | ||
require(balances[msg.sender] >= _amount && _amount >= 0); | ||
balances[msg.sender] = (balances[msg.sender]).sub(_amount); | ||
balances[_to] = (balances[_to]).add(_amount); | ||
emit Transfer(msg.sender, _to, _amount); | ||
return true; | ||
} | ||
|
||
// Send _value amount of tokens from address _from to address _to | ||
// The transferFrom method is used for a withdraw workflow, allowing contracts to send | ||
// tokens on your behalf, for example to "deposit" to a contract address and/or to charge | ||
// fees in sub-currencies; the command should fail unless the _from account has | ||
// deliberately authorized the sender of the message via some mechanism; we propose | ||
// these standardized APIs for approval: | ||
function transferFrom( address _from, address _to, uint256 _amount )public returns (bool ok) { | ||
require( _to != 0x0); | ||
require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount >= 0); | ||
balances[_from] = (balances[_from]).sub(_amount); | ||
allowed[_from][msg.sender] = (allowed[_from][msg.sender]).sub(_amount); | ||
balances[_to] = (balances[_to]).add(_amount); | ||
emit Transfer(_from, _to, _amount); | ||
return true; | ||
} | ||
|
||
// Allow _spender to withdraw from your account, multiple times, up to the _value amount. | ||
// If this function is called again it overwrites the current allowance with _value. | ||
function approve(address _spender, uint256 _amount)public returns (bool ok) { | ||
require( _spender != 0x0); | ||
allowed[msg.sender][_spender] = _amount; | ||
emit Approval(msg.sender, _spender, _amount); | ||
return true; | ||
} | ||
|
||
function allowance(address _owner, address _spender)public view returns (uint256 remaining) { | ||
require( _owner != 0x0 && _spender !=0x0); | ||
return allowed[_owner][_spender]; | ||
} | ||
|
||
//In case the ownership needs to be transferred | ||
function transferOwnership(address newOwner) external onlyOwner | ||
{ | ||
require( newOwner != 0x0); | ||
balances[newOwner] = (balances[newOwner]).add(balances[owner]); | ||
balances[owner] = 0; | ||
owner = newOwner; | ||
emit Transfer(msg.sender, newOwner, balances[newOwner]); | ||
} | ||
} |