Created
December 15, 2016 12:12
-
-
Save anonymous/e40d6a7433431776c7c0ff330eaee126 to your computer and use it in GitHub Desktop.
Created using browser-solidity: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://ethereum.github.io/browser-solidity/#version=soljson-v0.4.7+commit.822622cf.js&optimize=undefined&gist=
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
pragma solidity ^0.4.6; | |
contract owned { | |
address public owner; | |
function owned() { | |
owner = msg.sender; | |
} | |
modifier onlyOwner { | |
if (msg.sender != owner) throw; | |
_; | |
} | |
function transferOwnership(address newOwner) onlyOwner { | |
owner = newOwner; | |
} | |
} | |
contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _externalData);} | |
contract token { | |
mapping (address => uint256) public balanceOf; | |
mapping (address => mapping (address => uint256)) public allowance; | |
uint256 public totalSupply; | |
string public name; | |
uint8 public decimals; | |
string public symbol; | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
function token(uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol) { | |
balanceOf[msg.sender] = initialSupply; | |
totalSupply = initialSupply; | |
decimals = decimalUnits; | |
symbol = tokenSymbol; | |
name = tokenName; | |
} | |
function transfer(address _to, uint256 _value) { | |
if(balanceOf[msg.sender] < _value) throw; | |
if(balanceOf[_to] + _value < balanceOf[_to]) throw; | |
balanceOf[_to] += _value; | |
balanceOf[msg.sender] -= _value; | |
Transfer(msg.sender, _to, _value); | |
} | |
function approve(address _spender, uint256 _value) returns (bool success) { | |
allowance[msg.sender][_spender] = _value; | |
tokenRecipient spender = tokenRecipient(_spender); | |
return true; | |
} | |
function approveAndCall(address _spender, uint256 _value, bytes _extraData) | |
returns (bool success) { | |
tokenRecipient spender = tokenRecipient(_spender); | |
if (approve(_spender, _value)) { | |
spender.receiveApproval(_spender, _value, this, _extraData); | |
return true; | |
} | |
} | |
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { | |
if(balanceOf[_from] < _value) throw; | |
if(balanceOf[_to] + _value < balanceOf[_to]) throw; | |
if(_value > allowance[_from][msg.sender]) throw; | |
balanceOf[_from] -= _value; | |
balanceOf[_to] += _value; | |
allowance[_from][msg.sender] -= _value; | |
Transfer(_from, _to, _value); | |
return true; | |
} | |
function() { | |
throw; | |
} | |
} | |
contract MyAdvancedToken is owned, token { | |
uint256 public sellPrice; | |
uint256 public buyPrice; | |
uint256 public totalSupply; | |
mapping (address => bool) public frozenAccount; | |
event FrozenFunds(address target, bool frozen); | |
function MyAdvancedToken(uint256 initialSupply, string tokenName, uint8 decimalUnits, | |
string tokenSymbol, address centralMiner) token (initialSupply, tokenName, decimalUnits, tokenSymbol) { | |
if(centralMiner != 0) owner = centralMiner; | |
balanceOf[owner] = initialSupply; | |
} | |
function transfer(address _to, uint256 _value) { | |
if (balanceOf[msg.sender] < _value) throw; | |
if (balanceOf[_to] + _value < balanceOf[_to]) throw; | |
if (frozenAccount[msg.sender]) throw; | |
balanceOf[msg.sender] -= _value; | |
balanceOf[_to] += _value; | |
Transfer(msg.sender, _to, _value); | |
} | |
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { | |
if (balanceOf[_from] < _value) throw; | |
if (balanceOf[_to] + _value < balanceOf[_to]) throw; | |
if (frozenAccount[_from]) throw; | |
if (_value > allowance[_from][msg.sender]) throw; | |
balanceOf[_from] -= _value; | |
balanceOf[_to] += _value; | |
allowance[_from][msg.sender] -= _value; | |
Transfer(_from, _to, _value); | |
return true; | |
} | |
function mintToken(address target, uint256 mintedAmount) onlyOwner { | |
balanceOf[target] += mintedAmount; | |
totalSupply += mintedAmount; | |
Transfer(0, this, mintedAmount); | |
Transfer(this, target, mintedAmount); | |
} | |
function freezeAccount(address target, bool freeze) { | |
frozenAccount[target] = freeze; | |
FrozenFunds(target, freeze); | |
} | |
function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { | |
sellPrice = newSellPrice; | |
buyPrice = newBuyPrice; | |
} | |
function buy() payable { | |
uint amount = msg.value/buyPrice; | |
if (balanceOf[this] < amount) throw; | |
balanceOf[msg.sender] += amount; | |
balanceOf[this] -= amount; | |
Transfer(this, msg.sender, amount); | |
} | |
function sell(uint256 amount) payable { | |
if (balanceOf[msg.sender] < amount) throw; | |
balanceOf[msg.sender] -= amount; | |
balanceOf[this] += amount; | |
if(!msg.sender.send(amount * sellPrice)) { | |
throw; | |
} else { | |
Transfer(msg.sender, this, amount); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment