Transaction Hash:
Block:
4241247 at Sep-05-2017 02:10:57 PM +UTC
Transaction Fee:
0.00090040125 ETH
$1.95
Gas Used:
34,301 Gas / 26.25 Gwei
Emitted Events:
| 87 |
DaaToken.Burn( _from=[Receiver] 0x296486cb3b2a7048eae111f3ab1da94d29ee89c1, _amount=9000000000000000000, _newTotalSupply=203953680065366802555505 )
|
| 88 |
DaaToken.Transfer( _from=[Receiver] 0x296486cb3b2a7048eae111f3ab1da94d29ee89c1, _to=0x0000000000000000000000000000000000000000, _value=9000000000000000000 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
|
0x1E9939Da...164900341
Miner
| (ethfans.org) | 1,304.497342401724556709 Eth | 1,304.498242802974556709 Eth | 0.00090040125 | |
| 0xD0d0fb67...Ee16737da | (Iconomi) |
2.000776333446051327 Eth
Nonce: 12686
|
1.999875932196051327 Eth
Nonce: 12687
| 0.00090040125 | |
| 0xE5a7c129...8Af6a0970 |
Execution Trace
0x296486cb3b2a7048eae111f3ab1da94d29ee89c1.944adea7( )
-
0x9cd78315599a09f3bde39ef68049f28d2da9cd04.206bd362( ) -
0x9cd78315599a09f3bde39ef68049f28d2da9cd04.CALL( ) 0xd156ca1fb440735d2babcdb0c3578c44ca83a793.944adea7( )-
0x9cd78315599a09f3bde39ef68049f28d2da9cd04.0a671152( ) -
DaaToken.burn( _value=9000000000000000000 ) => ( success=True )
-
pragma solidity ^0.4.10;
contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }
/// @title ICONOMI Daa token
contract DaaToken {
//
// events
//
// ERC20 events
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
// mint/burn events
event Mint(address indexed _to, uint256 _amount, uint256 _newTotalSupply);
event Burn(address indexed _from, uint256 _amount, uint256 _newTotalSupply);
// admin events
event BlockLockSet(uint256 _value);
event NewOwner(address _newOwner);
event NewMinter(address _minter);
modifier onlyOwner {
if (msg.sender == owner) {
_;
}
}
modifier minterOrOwner {
if (msg.sender == minter || msg.sender == owner) {
_;
}
}
modifier blockLock(address _sender) {
if (!isLocked() || _sender == owner) {
_;
}
}
modifier validTransfer(address _from, address _to, uint256 _amount) {
if (isTransferValid(_from, _to, _amount)) {
_;
}
}
uint256 public totalSupply;
string public name;
uint8 public decimals;
string public symbol;
string public version = '0.0.1';
address public owner;
address public minter;
uint256 public lockedUntilBlock;
function DaaToken(
string _tokenName,
uint8 _decimalUnits,
string _tokenSymbol,
uint256 _lockedUntilBlock
) {
name = _tokenName;
decimals = _decimalUnits;
symbol = _tokenSymbol;
lockedUntilBlock = _lockedUntilBlock;
owner = msg.sender;
}
function transfer(address _to, uint256 _value)
public
blockLock(msg.sender)
validTransfer(msg.sender, _to, _value)
returns (bool success)
{
// transfer tokens
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value)
public
returns (bool success)
{
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value)
public
blockLock(_from)
validTransfer(_from, _to, _value)
returns (bool success)
{
// check sufficient allowance
if (_value > allowed[_from][msg.sender]) {
return false;
}
// transfer tokens
balances[_from] -= _value;
balances[_to] += _value;
allowed[_from][msg.sender] -= _value;
Transfer(_from, _to, _value);
return true;
}
function approveAndCall(address _spender, uint256 _value, bytes _extraData)
public
returns (bool success)
{
if (approve(_spender, _value)) {
tokenRecipient(_spender).receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
}
/// @notice Mint new tokens. Can only be called by minter or owner
function mint(address _to, uint256 _value)
public
minterOrOwner
blockLock(msg.sender)
returns (bool success)
{
// ensure _value is greater than zero and
// doesn't overflow
if (totalSupply + _value <= totalSupply) {
return false;
}
balances[_to] += _value;
totalSupply += _value;
Mint(_to, _value, totalSupply);
Transfer(0x0, _to, _value);
return true;
}
/// @notice Burn tokens. Can be called by any account
function burn(uint256 _value)
public
blockLock(msg.sender)
returns (bool success)
{
if (_value == 0 || _value > balances[msg.sender]) {
return false;
}
balances[msg.sender] -= _value;
totalSupply -= _value;
Burn(msg.sender, _value, totalSupply);
Transfer(msg.sender, 0x0, _value);
return true;
}
/// @notice Set block lock. Until that block (exclusive) transfers are disallowed
function setBlockLock(uint256 _lockedUntilBlock)
public
onlyOwner
returns (bool success)
{
lockedUntilBlock = _lockedUntilBlock;
BlockLockSet(_lockedUntilBlock);
return true;
}
/// @notice Replace current owner with new one
function replaceOwner(address _newOwner)
public
onlyOwner
returns (bool success)
{
owner = _newOwner;
NewOwner(_newOwner);
return true;
}
/// @notice Set account that can mint new tokens
function setMinter(address _newMinter)
public
onlyOwner
returns (bool success)
{
minter = _newMinter;
NewMinter(_newMinter);
return true;
}
function balanceOf(address _owner)
public
constant
returns (uint256 balance)
{
return balances[_owner];
}
function allowance(address _owner, address _spender)
public
constant
returns (uint256 remaining)
{
return allowed[_owner][_spender];
}
/// @notice Are transfers currently disallowed
function isLocked()
public
constant
returns (bool success)
{
return lockedUntilBlock > block.number;
}
/// @dev Checks if transfer parameters are valid
function isTransferValid(address _from, address _to, uint256 _amount)
private
constant
returns (bool isValid)
{
return balances[_from] >= _amount && // sufficient balance
_amount > 0 && // amount is positive
_to != address(this) && // prevent sending tokens to contract
_to != 0x0 // prevent sending token to 0x0 address
;
}
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
}