ETH Price: $2,517.27 (-0.15%)

Transaction Decoder

Block:
4833341 at Jan-01-2018 02:35:50 AM +UTC
Transaction Fee:
0.00369825 ETH $9.31
Gas Used:
73,965 Gas / 50 Gwei

Emitted Events:

8 MyToken.Transfer( from=[Receiver] AIAcrowdsale, to=[Sender] 0xd6e911edff4b1b3475fd276948324b98b295abd7, value=49160000 )
9 AIAcrowdsale.FundTransfer( backer=[Sender] 0xd6e911edff4b1b3475fd276948324b98b295abd7, amount=491600000000000000, isContribution=True )

Account State Difference:

  Address   Before After State Difference Code
0x0547bb9a...1b5Bf7CA1 484.806959375 Eth485.298559375 Eth0.4916
0x219101D6...f7a8f7988
0x969e98cC...565d947DD
0xD6E911ED...8b295ABd7
0.50163162375 Eth
Nonce: 6
0.00633337375 Eth
Nonce: 7
0.49529825
(Ethermine)
959.482387050296995529 Eth959.486085300296995529 Eth0.00369825

Execution Trace

ETH 0.4916 AIAcrowdsale.CALL( )
  • MyToken.transfer( _to=0xD6E911EDff4B1b3475Fd276948324b98b295ABd7, _value=49160000 )
  • ETH 0.4916 0x0547bb9a86d51c4900109e8160dc9581b5bf7ca1.CALL( )
    File 1 of 2: AIAcrowdsale
    pragma solidity ^0.4.18;
    
    contract myOwned {
        address public contractOwner;
        function myOwned() public { contractOwner = msg.sender; }
        modifier onlyOwner { require(msg.sender == contractOwner); _;}
        function exOwner(address newOwner) onlyOwner public { contractOwner = newOwner;}
    }
    
    interface token {
        function transfer(address receiver, uint amount) public;
    }
    
    contract AIAcrowdsale is myOwned {
        uint public startDate;
        uint public stopDate;
        uint public fundingGoal;
        uint public amountRaised;
        token public contractTokenReward;
        address public contractWallet;
        mapping(address => uint256) public balanceOf;
        event GoalReached(address receiver, uint amount);
        event FundTransfer(address backer, uint amount, bool isContribution);
    
        function AIAcrowdsale (
            uint _startDate,
            uint _stopDate,
            uint _fundingGoal,
            address _contractWallet,
            address _contractTokenReward
        ) public {
            startDate = _startDate;
            stopDate = _stopDate;
            fundingGoal = _fundingGoal * 1 ether;
            contractWallet = _contractWallet;
            contractTokenReward = token(_contractTokenReward);
        }
        
        function getCurrentTimestamp () internal constant returns (uint256) {
            return now;
        }
    
        function saleActive() public constant returns (bool) {
            return (now >= startDate && now <= stopDate && amountRaised < fundingGoal);
        }
    
        function getRateAt(uint256 at) public constant returns (uint256) {
            if (at < startDate) {return 0;} 
            else if (at < (startDate + 168 hours)) {return 10000;} 
            else if (at < (startDate + 336 hours)) {return 9000;} 
            else if (at < (startDate + 528 hours)) {return 8100;} 
            else if (at <= stopDate) {return 7300;} 
            else if (at > stopDate) {return 0;}
        }
    
        function getRateNow() public constant returns (uint256) {
            return getRateAt(now);
        }
    
        function () public payable {
            require(saleActive());
            require(amountRaised < fundingGoal);
            uint amount = msg.value;
            balanceOf[msg.sender] += amount;
            amountRaised += amount;
            uint price =  0.0001 ether / getRateAt(now);
            contractTokenReward.transfer(msg.sender, amount / price);
            FundTransfer(msg.sender, amount, true);
            contractWallet.transfer(msg.value);
        }
    
        function saleEnd() public onlyOwner {
            require(!saleActive());
            require(now > stopDate );
            contractWallet.transfer(this.balance);
            contractTokenReward.transfer(contractWallet, this.balance);
        }
    }

    File 2 of 2: MyToken
    pragma solidity ^0.4.15;
    
    contract MyOwned {
        address public owner;
        function MyOwned() public { owner = msg.sender; }
        modifier onlyOwner { require(msg.sender == owner ); _; }
        function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; }
    }
    
    interface tokenRecipient { 
        function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; 
    }
    
    contract MyToken is MyOwned {   
        string public name;
        string public symbol;
        uint8 public decimals;
        uint256 public totalSupply;
        
        mapping (address => uint256) public balanceOf;
        mapping (address => bool) public frozenAccount;
        event FrozenFunds(address target,bool frozen);
        event Transfer(address indexed from,address indexed to,uint256 value);
        
        function MyToken(uint256 initialSupply,string tokenName,string tokenSymbol,uint8 decimalUnits){
            balanceOf[msg.sender] = initialSupply;
            totalSupply = initialSupply;
            name = tokenName;
            symbol = tokenSymbol;
            decimals = decimalUnits;
        }
    
        function transfer(address _to, uint256 _value){
            require(!frozenAccount[msg.sender]);
            require (balanceOf[msg.sender] >= _value);
            require (balanceOf[_to] + _value >= balanceOf[_to]);
            balanceOf[msg.sender] -= _value;
            balanceOf[_to] += _value;
            Transfer(msg.sender, _to, _value);
        }
        
        function freezeAccount(address target,bool freeze) onlyOwner {
            frozenAccount[target] = freeze;
            FrozenFunds(target, freeze);
        }
        
        function mintToken(address target, uint256 mintedAmount) onlyOwner {
            balanceOf[target] += mintedAmount;
            Transfer(0, this, mintedAmount);
            Transfer(this, target, mintedAmount);
        }
    }