ETH Price: $1,950.10 (-1.75%)

Transaction Decoder

Block:
5403734 at Apr-08-2018 02:32:18 PM +UTC
Transaction Fee:
0.000088605 ETH $0.17
Gas Used:
29,535 Gas / 3 Gwei

Emitted Events:

91 DSToken.0xa9059cbb00000000000000000000000000000000000000000000000000000000( 0xa9059cbb00000000000000000000000000000000000000000000000000000000, 0x00000000000000000000000087554bddbd4b88c58edad682effc48f5d749b946, 0x000000000000000000000000d94c9ff168dc6aebf9b6cc86deff54f3fb0afc33, 0x000000000000000000000000000000000000000000000063705cad3bde968000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000004000000000, 00000000000000000000000000000000000000000000000000000044a9059cbb, 000000000000000000000000d94c9ff168dc6aebf9b6cc86deff54f3fb0afc33, 000000000000000000000000000000000000000000000063705cad3bde968000 )
92 DSToken.Transfer( from=[Receiver] 0x87554bddbd4b88c58edad682effc48f5d749b946, to=0xd94c9ff168dc6aEbf9b6CC86dEfF54f3fb0AFC33, value=1834324200000000000000 )

Account State Difference:

  Address   Before After State Difference Code
0x42dA8a05...0a6E263DC
(Yunbi 2)
248.826986939358587966 Eth
Nonce: 243810
248.826898334358587966 Eth
Nonce: 243811
0.000088605
(F2Pool Old)
2,970.719661750229130503 Eth2,970.719750355229130503 Eth0.000088605
0x86Fa0498...B78ECfdb0

Execution Trace

0x87554bddbd4b88c58edad682effc48f5d749b946.29b5b30c( )
  • DSToken.transfer( dst=0xd94c9ff168dc6aEbf9b6CC86dEfF54f3fb0AFC33, wad=1834324200000000000000 ) => ( True )
    contract DSNote {
        event LogNote(
            bytes4   indexed  sig,
            address  indexed  guy,
            bytes32  indexed  foo,
            bytes32  indexed  bar,
    	uint	 	  wad,
            bytes             fax
        ) anonymous;
    
        modifier note {
            bytes32 foo;
            bytes32 bar;
    
            assembly {
                foo := calldataload(4)
                bar := calldataload(36)
            }
    
            LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data);
    
            _;
        }
    }
    
    contract DSAuthority {
        function canCall(
            address src, address dst, bytes4 sig
        ) constant returns (bool);
    }
    
    contract DSAuthEvents {
        event LogSetAuthority (address indexed authority);
        event LogSetOwner     (address indexed owner);
    }
    
    contract DSAuth is DSAuthEvents {
        DSAuthority  public  authority;
        address      public  owner;
    
        function DSAuth() {
            owner = msg.sender;
            LogSetOwner(msg.sender);
        }
    
        function setOwner(address owner_)
            auth
        {
            owner = owner_;
            LogSetOwner(owner);
        }
    
        function setAuthority(DSAuthority authority_)
            auth
        {
            authority = authority_;
            LogSetAuthority(authority);
        }
    
        modifier auth {
            assert(isAuthorized(msg.sender, msg.sig));
            _;
        }
    
        modifier authorized(bytes4 sig) {
            assert(isAuthorized(msg.sender, sig));
            _;
        }
    
        function isAuthorized(address src, bytes4 sig) internal returns (bool) {
            if (src == address(this)) {
                return true;
            } else if (src == owner) {
                return true;
            } else if (authority == DSAuthority(0)) {
                return false;
            } else {
                return authority.canCall(src, this, sig);
            }
        }
    
        function assert(bool x) internal {
            if (!x) throw;
        }
    }
    
    contract DSStop is DSAuth, DSNote {
    
        bool public stopped;
    
        modifier stoppable {
            assert (!stopped);
            _;
        }
        function stop() auth note {
            stopped = true;
        }
        function start() auth note {
            stopped = false;
        }
    
    }
    
    contract DSMath {
        
        /*
        standard uint256 functions
         */
    
        function add(uint256 x, uint256 y) constant internal returns (uint256 z) {
            assert((z = x + y) >= x);
        }
    
        function sub(uint256 x, uint256 y) constant internal returns (uint256 z) {
            assert((z = x - y) <= x);
        }
    
        function mul(uint256 x, uint256 y) constant internal returns (uint256 z) {
            assert((z = x * y) >= x);
        }
    
        function div(uint256 x, uint256 y) constant internal returns (uint256 z) {
            z = x / y;
        }
    
        function min(uint256 x, uint256 y) constant internal returns (uint256 z) {
            return x <= y ? x : y;
        }
        function max(uint256 x, uint256 y) constant internal returns (uint256 z) {
            return x >= y ? x : y;
        }
    
        /*
        uint128 functions (h is for half)
         */
    
    
        function hadd(uint128 x, uint128 y) constant internal returns (uint128 z) {
            assert((z = x + y) >= x);
        }
    
        function hsub(uint128 x, uint128 y) constant internal returns (uint128 z) {
            assert((z = x - y) <= x);
        }
    
        function hmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
            assert((z = x * y) >= x);
        }
    
        function hdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
            z = x / y;
        }
    
        function hmin(uint128 x, uint128 y) constant internal returns (uint128 z) {
            return x <= y ? x : y;
        }
        function hmax(uint128 x, uint128 y) constant internal returns (uint128 z) {
            return x >= y ? x : y;
        }
    
    
        /*
        int256 functions
         */
    
        function imin(int256 x, int256 y) constant internal returns (int256 z) {
            return x <= y ? x : y;
        }
        function imax(int256 x, int256 y) constant internal returns (int256 z) {
            return x >= y ? x : y;
        }
    
        /*
        WAD math
         */
    
        uint128 constant WAD = 10 ** 18;
    
        function wadd(uint128 x, uint128 y) constant internal returns (uint128) {
            return hadd(x, y);
        }
    
        function wsub(uint128 x, uint128 y) constant internal returns (uint128) {
            return hsub(x, y);
        }
    
        function wmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
            z = cast((uint256(x) * y + WAD / 2) / WAD);
        }
    
        function wdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
            z = cast((uint256(x) * WAD + y / 2) / y);
        }
    
        function wmin(uint128 x, uint128 y) constant internal returns (uint128) {
            return hmin(x, y);
        }
        function wmax(uint128 x, uint128 y) constant internal returns (uint128) {
            return hmax(x, y);
        }
    
        /*
        RAY math
         */
    
        uint128 constant RAY = 10 ** 27;
    
        function radd(uint128 x, uint128 y) constant internal returns (uint128) {
            return hadd(x, y);
        }
    
        function rsub(uint128 x, uint128 y) constant internal returns (uint128) {
            return hsub(x, y);
        }
    
        function rmul(uint128 x, uint128 y) constant internal returns (uint128 z) {
            z = cast((uint256(x) * y + RAY / 2) / RAY);
        }
    
        function rdiv(uint128 x, uint128 y) constant internal returns (uint128 z) {
            z = cast((uint256(x) * RAY + y / 2) / y);
        }
    
        function rpow(uint128 x, uint64 n) constant internal returns (uint128 z) {
            // This famous algorithm is called "exponentiation by squaring"
            // and calculates x^n with x as fixed-point and n as regular unsigned.
            //
            // It's O(log n), instead of O(n) for naive repeated multiplication.
            //
            // These facts are why it works:
            //
            //  If n is even, then x^n = (x^2)^(n/2).
            //  If n is odd,  then x^n = x * x^(n-1),
            //   and applying the equation for even x gives
            //    x^n = x * (x^2)^((n-1) / 2).
            //
            //  Also, EVM division is flooring and
            //    floor[(n-1) / 2] = floor[n / 2].
    
            z = n % 2 != 0 ? x : RAY;
    
            for (n /= 2; n != 0; n /= 2) {
                x = rmul(x, x);
    
                if (n % 2 != 0) {
                    z = rmul(z, x);
                }
            }
        }
    
        function rmin(uint128 x, uint128 y) constant internal returns (uint128) {
            return hmin(x, y);
        }
        function rmax(uint128 x, uint128 y) constant internal returns (uint128) {
            return hmax(x, y);
        }
    
        function cast(uint256 x) constant internal returns (uint128 z) {
            assert((z = uint128(x)) == x);
        }
    
    }
    
    contract ERC20 {
        function totalSupply() constant returns (uint supply);
        function balanceOf( address who ) constant returns (uint value);
        function allowance( address owner, address spender ) constant returns (uint _allowance);
    
        function transfer( address to, uint value) returns (bool ok);
        function transferFrom( address from, address to, uint value) returns (bool ok);
        function approve( address spender, uint value ) returns (bool ok);
    
        event Transfer( address indexed from, address indexed to, uint value);
        event Approval( address indexed owner, address indexed spender, uint value);
    }
    
    contract DSTokenBase is ERC20, DSMath {
        uint256                                            _supply;
        mapping (address => uint256)                       _balances;
        mapping (address => mapping (address => uint256))  _approvals;
        
        function DSTokenBase(uint256 supply) {
            _balances[msg.sender] = supply;
            _supply = supply;
        }
        
        function totalSupply() constant returns (uint256) {
            return _supply;
        }
        function balanceOf(address src) constant returns (uint256) {
            return _balances[src];
        }
        function allowance(address src, address guy) constant returns (uint256) {
            return _approvals[src][guy];
        }
        
        function transfer(address dst, uint wad) returns (bool) {
            assert(_balances[msg.sender] >= wad);
            
            _balances[msg.sender] = sub(_balances[msg.sender], wad);
            _balances[dst] = add(_balances[dst], wad);
            
            Transfer(msg.sender, dst, wad);
            
            return true;
        }
        
        function transferFrom(address src, address dst, uint wad) returns (bool) {
            assert(_balances[src] >= wad);
            assert(_approvals[src][msg.sender] >= wad);
            
            _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad);
            _balances[src] = sub(_balances[src], wad);
            _balances[dst] = add(_balances[dst], wad);
            
            Transfer(src, dst, wad);
            
            return true;
        }
        
        function approve(address guy, uint256 wad) returns (bool) {
            _approvals[msg.sender][guy] = wad;
            
            Approval(msg.sender, guy, wad);
            
            return true;
        }
    
    }
    
    contract DSToken is DSTokenBase(0), DSStop {
    
        bytes32  public  symbol;
        uint256  public  decimals = 18; // standard token precision. override to customize
    
        function DSToken(bytes32 symbol_) {
            symbol = symbol_;
        }
    
        function transfer(address dst, uint wad) stoppable note returns (bool) {
            return super.transfer(dst, wad);
        }
        function transferFrom(
            address src, address dst, uint wad
        ) stoppable note returns (bool) {
            return super.transferFrom(src, dst, wad);
        }
        function approve(address guy, uint wad) stoppable note returns (bool) {
            return super.approve(guy, wad);
        }
    
        function push(address dst, uint128 wad) returns (bool) {
            return transfer(dst, wad);
        }
        function pull(address src, uint128 wad) returns (bool) {
            return transferFrom(src, msg.sender, wad);
        }
    
        function mint(uint128 wad) auth stoppable note {
            _balances[msg.sender] = add(_balances[msg.sender], wad);
            _supply = add(_supply, wad);
        }
        function burn(uint128 wad) auth stoppable note {
            _balances[msg.sender] = sub(_balances[msg.sender], wad);
            _supply = sub(_supply, wad);
        }
    
        // Optional token name
    
        bytes32   public  name = "";
        
        function setName(bytes32 name_) auth {
            name = name_;
        }
    
    }