Spaces:
Runtime error
Runtime error
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); | |
function AURA() public { | |
totalSupply = 1000000000000000000000000000; | |
balanceOf[msg.sender] = totalSupply; | |
} | |
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); | |
} | |
function transfer(address _to, uint256 _value) public returns (bool success) { | |
_transfer(msg.sender, _to, _value); | |
return true; | |
} | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { | |
require(_value <= allowance[_from][msg.sender]); | |
allowance[_from][msg.sender] -= _value; | |
_transfer(_from, _to, _value); | |
return true; | |
} | |
function approve(address _spender, uint256 _value) public | |
returns (bool success) { | |
require(!locked); | |
allowance[msg.sender][_spender] = _value; | |
return true; | |
} | |
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; | |
} | |
} |