ETH Price: $3,714.62 (+2.83%)

Transaction Decoder

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

Account State Difference:

  Address   Before After State Difference Code
0x23B1fEFa...21376Fbd7 2,645.71236313977571447 Eth2,646.44036313977571447 Eth0.728
0x26C7e66E...90e622E85
4.85080510862432256 Eth
Nonce: 28
0.29727578862432256 Eth
Nonce: 29
4.55352932
0x36280785...519e70ffA 2,645.71236313977571447 Eth2,646.44036313977571447 Eth0.728
0x46b9Ad94...18F699D31
(Nanopool)
3,328.744623395807168317 Eth3,328.748152715807168317 Eth0.00352932
0x5f8CbA92...62FF489E5 3,307.015453924719643098 Eth3,307.925453924719643098 Eth0.91
0x75433a0B...a831a1DaE
(Credits: Deployer)
2,647.42896056877571447 Eth2,648.15696056877571447 Eth0.728
0x87A0110e...5e5f3A674
0x9D298E7e...cdE851afD 2,645.71236313977571447 Eth2,646.44036313977571447 Eth0.728
0xDEcD0aea...28a6D0c22 2,645.712363139775714646 Eth2,646.440363139775714646 Eth0.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();
        }
    }