Skip to content

Instantly share code, notes, and snippets.

@jdaly13
Created June 19, 2020 19:23
Show Gist options
  • Save jdaly13/8a6343a414bab9ee173727c260e55479 to your computer and use it in GitHub Desktop.
Save jdaly13/8a6343a414bab9ee173727c260e55479 to your computer and use it in GitHub Desktop.
/*
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