-
-
Save jdaly13/8a6343a414bab9ee173727c260e55479 to your computer and use it in GitHub Desktop.
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
/* | |
Implements EIP20 token standard: https://github.com/ethereum/EIPs/issues/20 | |
.*/ | |
pragma solidity >=0.4.21 <0.7.0; | |
import "../installed_contracts/tokens/contracts/eip20/EIP20Interface.sol"; | |
contract WWTtoken is EIP20Interface { | |
uint256 constant MAX_UINT256 = 2**256 - 1; | |
/* | |
NOTE: | |
The following variables are OPTIONAL vanities. One does not have to include them. | |
They allow one to customise the token contract & in no way influences the core functionality. | |
Some wallets/interfaces might not even bother to look at this information. | |
*/ | |
string public name; //fancy name: eg Simon Bucks | |
uint8 public decimals; //How many decimals to show. | |
string public symbol; //An identifier: eg SBX | |
constructor( | |
uint256 _initialAmount, | |
string memory _tokenName, | |
uint8 _decimalUnits, | |
string memory _tokenSymbol | |
) public { | |
balances[msg.sender] = _initialAmount; // Give the creator all initial tokens | |
totalSupply = _initialAmount; // Update total supply | |
name = _tokenName; // Set the name for display purposes | |
decimals = _decimalUnits; // Amount of decimals for display purposes | |
symbol = _tokenSymbol; // Set the symbol for display purposes | |
} | |
function transfer(address _to, uint256 _value) public returns (bool success) { | |
//Default assumes totalSupply can't be over max (2^256 - 1). | |
//If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. | |
//Replace the if with this one instead. | |
//require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); | |
require(balances[msg.sender] >= _value); | |
balances[msg.sender] -= _value; | |
balances[_to] += _value; | |
emit Transfer(msg.sender, _to, _value); | |
return true; | |
} | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { | |
//same as above. Replace this line with the following if you want to protect against wrapping uints. | |
//require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); | |
// need to invoke approve first | |
// It allows a delegate approved for withdrawal to transfer owner/_from funds to a third-party account _to | |
// in our case it will essentially allow the contract address/creator and holder of original tokens to send tokens from one address to another | |
uint256 allowance = allowed[_from][msg.sender]; | |
require(balances[_from] >= _value && allowance >= _value); | |
balances[_to] += _value; | |
balances[_from] -= _value; | |
if (allowance < MAX_UINT256) { | |
allowed[_from][msg.sender] -= _value; | |
} | |
emit Transfer(_from, _to, _value); | |
return true; | |
} | |
function balanceOf(address _owner) view public returns (uint256 balance) { | |
return balances[_owner]; | |
} | |
// need t | |
function approve(address _delegate, uint256 _value) public returns (bool success) { | |
allowed[msg.sender][_delegate] = _value; | |
emit Approval(msg.sender, _delegate, _value); | |
return true; | |
} | |
function allowance(address _owner, address _delegate) | |
view public returns (uint256 remaining) { | |
return allowed[_owner][_delegate]; | |
} | |
function getTotalSupply() public view returns (uint256) { | |
return totalSupply; | |
} | |
mapping (address => uint256) balances; | |
mapping (address => mapping (address => uint256)) allowed; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment