Spaces:
Runtime error
Runtime error
/** | |
*Submitted for verification at Etherscan.io on 2018-01-17 | |
*/ | |
pragma solidity ^0.4.19; | |
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } | |
contract SafeMath { | |
function safeMul(uint256 a, uint256 b) returns (uint256) { | |
uint256 c = a * b; | |
require(a == 0 || c / a == b); | |
return c; | |
} | |
function safeSub(uint256 a, uint256 b) returns (uint256) { | |
require(b <= a); | |
return a - b; | |
} | |
function safeAdd(uint256 a, uint256 b) returns (uint256) { | |
uint c = a + b; | |
require(c >= a && c >= b); | |
return c; | |
} | |
} | |
contract Owned { | |
address public owner; | |
function Owned() { | |
owner = msg.sender; | |
} | |
function setOwner(address _owner) returns (bool success) { | |
owner = _owner; | |
return true; | |
} | |
modifier onlyOwner { | |
require(msg.sender == owner); | |
_; | |
} | |
} | |
contract AURA is SafeMath, Owned { | |
bool public locked = true; | |
string public name = "Aurora DAO"; | |
string public symbol = "AURA"; | |
uint8 public decimals = 18; | |
uint256 public totalSupply; | |
mapping (address => uint256) public balanceOf; | |
mapping (address => mapping (address => uint256)) public allowance; | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
/** | |
* Constructor function | |
* | |
* Initializes contract with initial supply tokens to the creator of the contract | |
*/ | |
function AURA() public { | |
totalSupply = 1000000000000000000000000000; | |
balanceOf[msg.sender] = totalSupply; | |
} | |
/** | |
* Internal transfer, only can be called by this contract | |
*/ | |
function _transfer(address _from, address _to, uint _value) internal { | |
require(!locked || msg.sender == owner); | |
require(_to != 0x0); | |
require(balanceOf[_from] >= _value); | |
require(balanceOf[_to] + _value > balanceOf[_to]); | |
uint previousBalances = balanceOf[_from] + balanceOf[_to]; | |
balanceOf[_from] -= _value; | |
balanceOf[_to] += _value; | |
Transfer(_from, _to, _value); | |
require(balanceOf[_from] + balanceOf[_to] == previousBalances); | |
} | |
/** | |
* Transfer tokens | |
* | |
* Send `_value` tokens to `_to` from your account | |
* | |
* @param _to The address of the recipient | |
* @param _value the amount to send | |
*/ | |
function transfer(address _to, uint256 _value) public returns (bool success) { | |
_transfer(msg.sender, _to, _value); | |
return true; | |
} | |
/** | |
* Transfer tokens from other address | |
* | |
* Send `_value` tokens to `_to` in behalf of `_from` | |
* | |
* @param _from The address of the sender | |
* @param _to The address of the recipient | |
* @param _value the amount to send | |
*/ | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { | |
require(_value <= allowance[_from][msg.sender]); // Check allowance | |
allowance[_from][msg.sender] -= _value; | |
_transfer(_from, _to, _value); | |
return true; | |
} | |
/** | |
* Set allowance for other address | |
* | |
* Allows `_spender` to spend no more than `_value` tokens in your behalf | |
* | |
* @param _spender The address authorized to spend | |
* @param _value the max amount they can spend | |
*/ | |
function approve(address _spender, uint256 _value) public | |
returns (bool success) { | |
require(!locked); | |
allowance[msg.sender][_spender] = _value; | |
return true; | |
} | |
/** | |
* Set allowance for other address and notify | |
* | |
* Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it | |
* | |
* @param _spender The address authorized to spend | |
* @param _value the max amount they can spend | |
* @param _extraData some extra information to send to the approved contract | |
*/ | |
function approveAndCall(address _spender, uint256 _value, bytes _extraData) | |
public | |
returns (bool success) { | |
tokenRecipient spender = tokenRecipient(_spender); | |
if (approve(_spender, _value)) { | |
spender.receiveApproval(msg.sender, _value, this, _extraData); | |
return true; | |
} | |
} | |
function unlockToken() onlyOwner { | |
locked = false; | |
} | |
bool public balancesUploaded = false; | |
function uploadBalances(address[] recipients, uint256[] balances) onlyOwner { | |
require(!balancesUploaded); | |
uint256 sum = 0; | |
for (uint256 i = 0; i < recipients.length; i++) { | |
balanceOf[recipients[i]] = safeAdd(balanceOf[recipients[i]], balances[i]); | |
sum = safeAdd(sum, balances[i]); | |
} | |
balanceOf[owner] = safeSub(balanceOf[owner], sum); | |
} | |
function lockBalances() onlyOwner { | |
balancesUploaded = true; | |
} | |
} |