ETH Price: $2,419.86 (-0.94%)

Transaction Decoder

Block:
6230983 at Aug-28-2018 09:23:04 PM +UTC
Transaction Fee:
0.0004332746 ETH $1.05
Gas Used:
196,943 Gas / 2.2 Gwei

Emitted Events:

39 0x89ddbf934890b6dfe6205f4ff93f4bbe678c4160.0x9ea56af881ffe028f0ad190d981a983e3829992e4ee578085dbe5c3a1c6749f7( 0x9ea56af881ffe028f0ad190d981a983e3829992e4ee578085dbe5c3a1c6749f7, 00000000000000000000000089ddbf934890b6dfe6205f4ff93f4bbe678c4160, 000000000000000000000000006696df7fcddf5c0d8728a7200ced6da372527b, 0000000000000000000000000000000000000000000000000000000000000012 )
40 0x2fcec0d5976e7bab9390a98ab5c148719eb56ee0.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x00000000000000000000000067decb8b210254841fa74b51a0367cbcaf168589, 0x000000000000000000000000006696df7fcddf5c0d8728a7200ced6da372527b, 000000000000000000000000000000000000000000000002b5e3af16b1880000 )
41 Oraclize.0x3af7d71c651d8670228b02a0b636ffa73a7f759ef99ff9c024bc3b044a724438( 0x3af7d71c651d8670228b02a0b636ffa73a7f759ef99ff9c024bc3b044a724438, 00000000000000000000000089ddbf934890b6dfe6205f4ff93f4bbe678c4160, fd297a37457b9808c80014620ab30a47a19e3a92b021a7fee9133f656f37bade, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000100, 0000000000000000000000000000000000000000000000000000000000000140, 000000000000000000000000000000000000000000000000000000000003d090, 3000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000006, 72616e646f6d0000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000006a, 9f58200a36de5c4d8c85487af7638404bdd9b0ea7695897bc997513b9888309d, 0f71f641075820d937716ea46c0fb8f804f392eb5e00c2667262d1842017eae4, f2202943ec178258200000000000000000000000000000000000000000000000, 000000000000000000ff00000000000000000000000000000000000000000000 )
42 0x2fcec0d5976e7bab9390a98ab5c148719eb56ee0.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x00000000000000000000000067decb8b210254841fa74b51a0367cbcaf168589, 0x000000000000000000000000006696df7fcddf5c0d8728a7200ced6da372527b, 000000000000000000000000000000000000000000000030ca024f987b900000 )

Account State Difference:

  Address   Before After State Difference Code
0x006696df...dA372527b
5 Eth
Nonce: 0
4.0995667254 Eth
Nonce: 1
0.9004332746
0x2fcec0d5...19EB56EE0
0x3dBDc81a...e395fDcf6 1.25695244882461664 Eth1.26213389092644194 Eth0.0051814421018253
0x89ddBF93...E678C4160 0.85 Eth1.7448185578981747 Eth0.8948185578981747
(Ethermine)
283.650808621321940325 Eth283.651241895921940325 Eth0.0004332746

Execution Trace

ETH 0.9 0x89ddbf934890b6dfe6205f4ff93f4bbe678c4160.67dd74ca( )
  • 0x2fcec0d5976e7bab9390a98ab5c148719eb56ee0.ded2d0f4( )
  • OraclizeAddrResolver.CALL( )
  • Oraclize.CALL( )
  • OraclizeAddrResolver.CALL( )
  • OraclizeAddrResolver.CALL( )
  • Oraclize.2ef3accc( )
  • ETH 0.0051814421018253 Oraclize.c55c1cb6( )
  • Null: 0x000...002.0a36de5c( )
  • 0x2fcec0d5976e7bab9390a98ab5c148719eb56ee0.ded2d0f4( )
    File 1 of 2: Oraclize
    /*
    Copyright (c) 2015-2016 Oraclize SRL
    Copyright (c) 2016-2017 Oraclize LTD
    */
    
    /*
    Oraclize Connector v1.2.0
    */
    
    // 'compressed' alternative, where all modifiers have been changed to FUNCTIONS
    // which is cheaper for deployment, potentially cheaper execution
    
    pragma solidity ^0.4.11;
    
    contract Oraclize {
        mapping (address => uint) reqc;
    
        mapping (address => byte) public cbAddresses;
    
        mapping (address => bool) public offchainPayment;
    
        event Log1(address sender, bytes32 cid, uint timestamp, string datasource, string arg, uint gaslimit, byte proofType, uint gasPrice);
        event Log2(address sender, bytes32 cid, uint timestamp, string datasource, string arg1, string arg2, uint gaslimit, byte proofType, uint gasPrice);
        event LogN(address sender, bytes32 cid, uint timestamp, string datasource, bytes args, uint gaslimit, byte proofType, uint gasPrice);
        event Log1_fnc(address sender, bytes32 cid, uint timestamp, string datasource, string arg, function() external callback, uint gaslimit, byte proofType, uint gasPrice);
        event Log2_fnc(address sender, bytes32 cid, uint timestamp, string datasource, string arg1, string arg2, function() external callback, uint gaslimit, byte proofType, uint gasPrice);
        event LogN_fnc(address sender, bytes32 cid, uint timestamp, string datasource, bytes args, function() external callback, uint gaslimit, byte proofType, uint gasPrice);
    
        event Emit_OffchainPaymentFlag(address indexed idx_sender, address sender, bool indexed idx_flag, bool flag);
    
        address owner;
        address paymentFlagger;
    
        function changeAdmin(address _newAdmin)
        external
        {
            onlyadmin();
            owner = _newAdmin;
        }
    
        function changePaymentFlagger(address _newFlagger)
        external
        {
            onlyadmin();
            paymentFlagger = _newFlagger;
        }
    
        function addCbAddress(address newCbAddress, byte addressType)
        external
        {
            onlyadmin();
            //bytes memory nil = '';
            addCbAddress(newCbAddress, addressType, hex'');
        }
    
        // proof is currently a placeholder for when associated proof for addressType is added
        function addCbAddress(address newCbAddress, byte addressType, bytes proof)
        public
        {
            onlyadmin();
            cbAddresses[newCbAddress] = addressType;
        }
    
        function removeCbAddress(address newCbAddress)
        external
        {
            onlyadmin();
            delete cbAddresses[newCbAddress];
        }
    
        function cbAddress()
        constant
        returns (address _cbAddress)
        {
            if (cbAddresses[tx.origin] != 0)
                _cbAddress = tx.origin;
        }
    
        function addDSource(string dsname, uint multiplier)
        external
        {
            addDSource(dsname, 0x00, multiplier);
        }
    
        function addDSource(string dsname, byte proofType, uint multiplier)
        public
        {
            onlyadmin();
            bytes32 dsname_hash = sha3(dsname, proofType);
            dsources[dsources.length++] = dsname_hash;
            price_multiplier[dsname_hash] = multiplier;
        }
    
        // Utilized by bridge
        function multiAddDSource(bytes32[] dsHash, uint256[] multiplier)
        external
        {
            onlyadmin();
            // dsHash -> sha3(DATASOURCE_NAME, PROOF_TYPE);
            for (uint i=0; i<dsHash.length; i++) {
                dsources[dsources.length++] = dsHash[i];
                price_multiplier[dsHash[i]] = multiplier[i];
            }
        }
    
        function multisetProofType(uint[] _proofType, address[] _addr)
        external
        {
            onlyadmin();
            for (uint i=0; i<_addr.length; i++) addr_proofType[_addr[i]] = byte(_proofType[i]);
        }
    
        function multisetCustomGasPrice(uint[] _gasPrice, address[] _addr)
        external
        {
            onlyadmin();
            for (uint i=0; i<_addr.length; i++) addr_gasPrice[_addr[i]] = _gasPrice[i];
        }
    
        uint gasprice = 20000000000;
    
        function setGasPrice(uint newgasprice)
        external
        {
            onlyadmin();
            gasprice = newgasprice;
        }
    
        function setBasePrice(uint new_baseprice)
        external
        { //0.001 usd in ether
            onlyadmin();
            baseprice = new_baseprice;
            for (uint i=0; i<dsources.length; i++) price[dsources[i]] = new_baseprice*price_multiplier[dsources[i]];
        }
    
        function setBasePrice(uint new_baseprice, bytes proofID)
        external
        { //0.001 usd in ether
            onlyadmin();
            baseprice = new_baseprice;
            for (uint i=0; i<dsources.length; i++) price[dsources[i]] = new_baseprice*price_multiplier[dsources[i]];
        }
    
        function setOffchainPayment(address _addr, bool _flag)
        external
        {
          if (msg.sender != paymentFlagger) throw;
          offchainPayment[_addr] = _flag;
          Emit_OffchainPaymentFlag(_addr, _addr, _flag, _flag);
        }
    
        function withdrawFunds(address _addr)
        external
        {
            onlyadmin();
            _addr.send(this.balance);
        }
    
        // unnecessary?
        //function() {}
    
        function Oraclize() {
            owner = msg.sender;
        }
    
        // Pesudo-modifiers
    
        function onlyadmin()
        private {
            if (msg.sender != owner) throw;
        }
    
        function costs(string datasource, uint gaslimit)
        private
        returns (uint price) {
            price = getPrice(datasource, gaslimit, msg.sender);
    
            if (msg.value >= price){
                uint diff = msg.value - price;
                if (diff > 0) {
                    // added for correct query cost to be returned
                    if(!msg.sender.send(diff)) {
                        throw;
                    }
                }
            } else throw;
        }
    
        mapping (address => byte) addr_proofType;
        mapping (address => uint) addr_gasPrice;
        uint public baseprice;
        mapping (bytes32 => uint) price;
        mapping (bytes32 => uint) price_multiplier;
        bytes32[] dsources;
    
        bytes32[] public randomDS_sessionPubKeysHash;
    
        function randomDS_updateSessionPubKeysHash(bytes32[] _newSessionPubKeysHash)
        external
        {
            onlyadmin();
            randomDS_sessionPubKeysHash.length = 0;
            for (uint i=0; i<_newSessionPubKeysHash.length; i++) randomDS_sessionPubKeysHash.push(_newSessionPubKeysHash[i]);
        }
    
        function randomDS_getSessionPubKeyHash()
        external
        constant
        returns (bytes32) {
            uint i = uint(sha3(reqc[msg.sender]))%randomDS_sessionPubKeysHash.length;
            return randomDS_sessionPubKeysHash[i];
        }
    
        function setProofType(byte _proofType)
        external
        {
            addr_proofType[msg.sender] = _proofType;
        }
    
        function setCustomGasPrice(uint _gasPrice)
        external
        {
            addr_gasPrice[msg.sender] = _gasPrice;
        }
    
        function getPrice(string _datasource)
        public
        returns (uint _dsprice)
        {
            return getPrice(_datasource, msg.sender);
        }
    
        function getPrice(string _datasource, uint _gaslimit)
        public
        returns (uint _dsprice)
        {
            return getPrice(_datasource, _gaslimit, msg.sender);
        }
    
        function getPrice(string _datasource, address _addr)
        private
        returns (uint _dsprice)
        {
            return getPrice(_datasource, 200000, _addr);
        }
    
        function getPrice(string _datasource, uint _gaslimit, address _addr)
        private
        returns (uint _dsprice)
        {
            uint gasprice_ = addr_gasPrice[_addr];
            if (
                    (offchainPayment[_addr])
                ||(
                    (_gaslimit <= 200000)&&
                    (reqc[_addr] == 0)&&
                    (gasprice_ <= gasprice)&&
                    (tx.origin != cbAddress())
                )
            ) return 0;
    
            if (gasprice_ == 0) gasprice_ = gasprice;
            _dsprice = price[sha3(_datasource, addr_proofType[_addr])];
            _dsprice += _gaslimit*gasprice_;
            return _dsprice;
        }
    
        function getCodeSize(address _addr)
        private
        constant
        returns(uint _size)
        {
            assembly {
                _size := extcodesize(_addr)
            }
        }
    
        function query(string _datasource, string _arg)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(0, _datasource, _arg, 200000);
        }
    
        function query1(string _datasource, string _arg)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(0, _datasource, _arg, 200000);
        }
    
        function query2(string _datasource, string _arg1, string _arg2)
        payable
        external
        returns (bytes32 _id)
        {
            return query2(0, _datasource, _arg1, _arg2, 200000);
        }
    
        function queryN(string _datasource, bytes _args)
        payable
        external
        returns (bytes32 _id)
        {
            return queryN(0, _datasource, _args, 200000);
        }
    
        function query(uint _timestamp, string _datasource, string _arg)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(_timestamp, _datasource, _arg, 200000);
        }
    
        function query1(uint _timestamp, string _datasource, string _arg)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(_timestamp, _datasource, _arg, 200000);
        }
    
        function query2(uint _timestamp, string _datasource, string _arg1, string _arg2)
        payable
        external
        returns (bytes32 _id)
        {
            return query2(_timestamp, _datasource, _arg1, _arg2, 200000);
        }
    
        function queryN(uint _timestamp, string _datasource, bytes _args)
        payable
        external
        returns (bytes32 _id)
        {
            return queryN(_timestamp, _datasource, _args, 200000);
        }
    
    /*  Needless?
        function query(uint _timestamp, string _datasource, string _arg, uint _gaslimit)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(_timestamp, _datasource, _arg, _gaslimit);
        }
    */
        function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(_timestamp, _datasource, _arg, _gaslimit);
        }
    
        function query1_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit)
        payable
        external
        returns (bytes32 _id)
        {
            return query1(_timestamp, _datasource, _arg, _gaslimit);
        }
    
        function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit)
        payable
        external
        returns (bytes32 _id)
        {
            return query2(_timestamp, _datasource, _arg1, _arg2, _gaslimit);
        }
    
        function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _args, uint _gaslimit)
        payable
        external
        returns (bytes32 _id)
        {
            return queryN(_timestamp, _datasource, _args, _gaslimit);
        }
    
        function query1(uint _timestamp, string _datasource, string _arg, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
        	if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            Log1(msg.sender, _id, _timestamp, _datasource, _arg, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    
        function query2(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
        	if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            Log2(msg.sender, _id, _timestamp, _datasource, _arg1, _arg2, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    
        function queryN(uint _timestamp, string _datasource, bytes _args, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
        	if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            LogN(msg.sender, _id, _timestamp, _datasource, _args, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    
        function query1_fnc(uint _timestamp, string _datasource, string _arg, function() external _fnc, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
            if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)||address(_fnc) != msg.sender) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            Log1_fnc(msg.sender, _id, _timestamp, _datasource, _arg, _fnc, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    
        function query2_fnc(uint _timestamp, string _datasource, string _arg1, string _arg2, function() external _fnc, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
            if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)||address(_fnc) != msg.sender) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            Log2_fnc(msg.sender, _id, _timestamp, _datasource, _arg1, _arg2, _fnc,  _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    
        function queryN_fnc(uint _timestamp, string _datasource, bytes _args, function() external _fnc, uint _gaslimit)
        payable
        public
        returns (bytes32 _id)
        {
            costs(_datasource, _gaslimit);
            if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)||address(_fnc) != msg.sender) throw;
    
            _id = sha3(this, msg.sender, reqc[msg.sender]);
            reqc[msg.sender]++;
            LogN_fnc(msg.sender, _id, _timestamp, _datasource, _args, _fnc, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]);
            return _id;
        }
    }

    File 2 of 2: OraclizeAddrResolver
    /*
      Copyright (c) 2015-2016 Oraclize SRL
      Copyright (c) 2016 Oraclize LTD
    */
    
    contract OraclizeAddrResolver {
    
        address public addr;
    
        address owner;
    
        function OraclizeAddrResolver(){
            owner = msg.sender;
        }
    
        function changeOwner(address newowner){
            if (msg.sender != owner) throw;
            owner = newowner;
        }
    
        function getAddress() returns (address oaddr){
            return addr;
        }
    
        function setAddr(address newaddr){
            if (msg.sender != owner) throw;
            addr = newaddr;
        }
    
    }