Transaction Hash:
Block:
5113526 at Feb-18-2018 04:08:25 PM +UTC
Transaction Fee:
0.00352932 ETH
$13.11
Gas Used:
117,644 Gas / 30 Gwei
Emitted Events:
36 |
CREDITS.Transfer( from=0x75433a0Bd720f639d38BBEA08F4632da831a1DaE, to=[Sender] 0x26c7e66e90b3b7252b45a2f1abcfc4b90e622e85, value=22750000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x23B1fEFa...21376Fbd7 | 2,645.71236313977571447 Eth | 2,646.44036313977571447 Eth | 0.728 | ||
0x26C7e66E...90e622E85 |
4.85080510862432256 Eth
Nonce: 28
|
0.29727578862432256 Eth
Nonce: 29
| 4.55352932 | ||
0x36280785...519e70ffA | 2,645.71236313977571447 Eth | 2,646.44036313977571447 Eth | 0.728 | ||
0x46b9Ad94...18F699D31 | |||||
0x52bc44d5...b7d7bE3b5
Miner
| (Nanopool) | 3,328.744623395807168317 Eth | 3,328.748152715807168317 Eth | 0.00352932 | |
0x5f8CbA92...62FF489E5 | 3,307.015453924719643098 Eth | 3,307.925453924719643098 Eth | 0.91 | ||
0x75433a0B...a831a1DaE | (Credits: Deployer) | 2,647.42896056877571447 Eth | 2,648.15696056877571447 Eth | 0.728 | |
0x87A0110e...5e5f3A674 | |||||
0x9D298E7e...cdE851afD | 2,645.71236313977571447 Eth | 2,646.44036313977571447 Eth | 0.728 | ||
0xDEcD0aea...28a6D0c22 | 2,645.712363139775714646 Eth | 2,646.440363139775714646 Eth | 0.728 |
Execution Trace
ETH 4.55
0x87a0110ed1d09af6568392e77cedae95e5f3a674.CALL( )
-
CREDITS.transferFrom( _from=0x75433a0Bd720f639d38BBEA08F4632da831a1DaE, _to=0x26C7e66E90B3B7252b45a2f1aBcfc4b90e622E85, _value=22750000000 ) => ( success=True )
- ETH 0.91
0x5f8cba9226cf1d6ce56c0bf819e9ed562ff489e5.CALL( )
- ETH 0.728
Credits: Deployer.CALL( )
- ETH 0.728
0x3628078598b74cbe1e35587f893c079519e70ffa.CALL( )
- ETH 0.728
0x23b1fefa5ee3b2c33da5467dd30ae6a21376fbd7.CALL( )
- ETH 0.728
0x9d298e7ec094e14c353d08f101a8508cde851afd.CALL( )
- ETH 0.728
0xdecd0aea98ddaa3b1f028871170465828a6d0c22.CALL( )
pragma solidity ^ 0.4.19; contract Ownable { address public owner; function Ownable() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } } contract CREDITS is Ownable{ /* Public variables of the token */ string public name = 'CREDITS'; string public symbol = 'CS'; uint8 public decimals = 6; uint256 public totalSupply = 1000000000000000; uint public TotalHoldersAmount; /*Freeze transfer from all accounts */ bool public Frozen=true; bool public CanChange=true; address public Admin; address public AddressForReturn; address[] Accounts; /* This creates an array with all balances */ mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*Individual Freeze*/ mapping(address => bool) public AccountIsFrozen; /*Allow transfer for ICO, Admin accounts if IsFrozen==true*/ mapping(address => bool) public AccountIsNotFrozen; /*Allow transfer tokens only to ReturnWallet*/ mapping(address => bool) public AccountIsNotFrozenForReturn; mapping(address => uint) public AccountIsFrozenByDate; mapping (address => bool) public isHolder; mapping (address => bool) public isArrAccountIsFrozen; mapping (address => bool) public isArrAccountIsNotFrozen; mapping (address => bool) public isArrAccountIsNotFrozenForReturn; mapping (address => bool) public isArrAccountIsFrozenByDate; address [] public Arrholders; address [] public ArrAccountIsFrozen; address [] public ArrAccountIsNotFrozen; address [] public ArrAccountIsNotFrozenForReturn; address [] public ArrAccountIsFrozenByDate; /* This generates a public event on the blockchain that will notify clients */ event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Burn(address indexed from, uint256 value); modifier IsNotFrozen{ require(((!Frozen&&AccountIsFrozen[msg.sender]!=true)||((Frozen)&&AccountIsNotFrozen[msg.sender]==true))&&now>AccountIsFrozenByDate[msg.sender]); _; } modifier isCanChange{ require((msg.sender==owner||msg.sender==Admin)&&CanChange==true); _; } /* Initializes contract with initial supply tokens to the creator of the contract */ function CREDITS() public { balanceOf[msg.sender] = totalSupply; Arrholders[Arrholders.length++]=msg.sender; Admin=msg.sender; } function setAdmin(address _address) public onlyOwner{ require(CanChange); Admin=_address; } function setFrozen(bool _Frozen)public onlyOwner{ require(CanChange); Frozen=_Frozen; } function setCanChange(bool _canChange)public onlyOwner{ require(CanChange); CanChange=_canChange; } function setAccountIsFrozen(address _address, bool _IsFrozen)public isCanChange{ AccountIsFrozen[_address]=_IsFrozen; if (isArrAccountIsFrozen[_address] != true) { ArrAccountIsFrozen[ArrAccountIsFrozen.length++] = _address; isArrAccountIsFrozen[_address] = true; } } function setAccountIsNotFrozen(address _address, bool _IsFrozen)public isCanChange{ AccountIsNotFrozen[_address]=_IsFrozen; if (isArrAccountIsNotFrozen[_address] != true) { ArrAccountIsNotFrozen[ArrAccountIsNotFrozen.length++] = _address; isArrAccountIsNotFrozen[_address] = true; } } function setAccountIsNotFrozenForReturn(address _address, bool _IsFrozen)public isCanChange{ AccountIsNotFrozenForReturn[_address]=_IsFrozen; if (isArrAccountIsNotFrozenForReturn[_address] != true) { ArrAccountIsNotFrozenForReturn[ArrAccountIsNotFrozenForReturn.length++] = _address; isArrAccountIsNotFrozenForReturn[_address] = true; } } function setAccountIsFrozenByDate(address _address, uint _Date)public isCanChange{ require (!isArrAccountIsFrozenByDate[_address]); AccountIsFrozenByDate[_address]=_Date; ArrAccountIsFrozenByDate[ArrAccountIsFrozenByDate.length++] = _address; isArrAccountIsFrozenByDate[_address] = true; } /* Send coins */ function transfer(address _to, uint256 _value) public { require(((!Frozen&&AccountIsFrozen[msg.sender]!=true)||((Frozen)&&AccountIsNotFrozen[msg.sender]==true)||(AccountIsNotFrozenForReturn[msg.sender]==true&&_to==AddressForReturn))&&now>AccountIsFrozenByDate[msg.sender]); require(balanceOf[msg.sender] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place if (isHolder[_to] != true) { Arrholders[Arrholders.length++] = _to; isHolder[_to] = true; }} /* Allow another contract to spend some tokens in your behalf */ function approve(address _spender, uint256 _value)public returns(bool success) { allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value)public IsNotFrozen returns(bool success) { require(((!Frozen&&AccountIsFrozen[_from]!=true)||((Frozen)&&AccountIsNotFrozen[_from]==true))&&now>AccountIsFrozenByDate[_from]); require (balanceOf[_from] >= _value) ; // Check if the sender has enough require (balanceOf[_to] + _value >= balanceOf[_to]) ; // Check for overflows require (_value <= allowance[_from][msg.sender]) ; // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); if (isHolder[_to] != true) { Arrholders[Arrholders.length++] = _to; isHolder[_to] = true; } return true; } /* @param _value the amount of money to burn*/ function burn(uint256 _value) public IsNotFrozen returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /* Destroy tokens from other account */ function burnFrom(address _from, uint256 _value) public IsNotFrozen returns (bool success) { require(((!Frozen&&AccountIsFrozen[_from]!=true)||((Frozen)&&AccountIsNotFrozen[_from]==true))&&now>AccountIsFrozenByDate[_from]); require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } function GetHoldersCount () public view returns (uint _HoldersCount){ return (Arrholders.length-1); } function GetAccountIsFrozenCount () public view returns (uint _Count){ return (ArrAccountIsFrozen.length); } function GetAccountIsNotFrozenForReturnCount () public view returns (uint _Count){ return (ArrAccountIsNotFrozenForReturn.length); } function GetAccountIsNotFrozenCount () public view returns (uint _Count){ return (ArrAccountIsNotFrozen.length); } function GetAccountIsFrozenByDateCount () public view returns (uint _Count){ return (ArrAccountIsFrozenByDate.length); } function SetAddressForReturn (address _address) public isCanChange returns (bool success ){ AddressForReturn=_address; return true; } function setSymbol(string _symbol) public onlyOwner { require(CanChange); symbol = _symbol; } function setName(string _name) public onlyOwner { require(CanChange); name = _name; } /* This unnamed function is called whenever someone tries to send ether to it */ function () public payable { revert(); } }