ETH Price: $2,164.07 (+0.96%)
Gas: 0.07 Gwei

Transaction Decoder

Block:
5624245 at May-16-2018 03:28:39 PM +UTC
Transaction Fee:
0.00570456 ETH $12.35
Gas Used:
47,538 Gas / 120 Gwei

Emitted Events:

27 DSToken.0xa9059cbb00000000000000000000000000000000000000000000000000000000( 0xa9059cbb00000000000000000000000000000000000000000000000000000000, 0x0000000000000000000000001d6985fa45517df5b9ca58de2bdefea4884aa5d1, 0x00000000000000000000000003747f06215b44e498831da019b27f53e483599f, 0x00000000000000000000000000000000000000000000004e09135733bece0000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000004000000000, 00000000000000000000000000000000000000000000000000000044a9059cbb, 00000000000000000000000003747f06215b44e498831da019b27f53e483599f, 00000000000000000000000000000000000000000000004e09135733bece0000 )
28 DSToken.Transfer( from=[Receiver] 0x1d6985fa45517df5b9ca58de2bdefea4884aa5d1, to=[Sender] 0x03747f06215b44e498831da019b27f53e483599f, value=1439500000000000000000 )
29 0x4f01001cf69785d4c37f03fd87398849411ccbba.0x3ffd89314c7891190d2190d5299c9887128a3d4081cf6e41a67722cae685d296( 0x3ffd89314c7891190d2190d5299c9887128a3d4081cf6e41a67722cae685d296, 0000000000000000000000001d6985fa45517df5b9ca58de2bdefea4884aa5d1, 00000000000000000000000086fa049857e0209aa7d9e616f7eb3b3b78ecfdb0, 00000000000000000000000000000000000000000000004e09135733bece0000 )

Account State Difference:

  Address   Before After State Difference Code
0x03747F06...3E483599F
(Upbit 39)
7,492.915519867985096401 Eth
Nonce: 538677
7,492.909815307985096401 Eth
Nonce: 538678
0.00570456
29.690417122613580927 Eth29.696121682613580927 Eth0.00570456
0x86Fa0498...B78ECfdb0

Execution Trace

0x1d6985fa45517df5b9ca58de2bdefea4884aa5d1.6ea056a9( )
  • Upbit: Wallet Maker.3c18d318( )
  • 0x3105d1027fdd1cf6b2d67056b61956249f6fc861.6ea056a9( )
    • Upbit: Wallet Maker.CALL( )
    • Upbit: Wallet Maker.CALL( )
    • DSToken.balanceOf( src=0x1d6985FA45517Df5b9ca58de2bdefEa4884aA5D1 ) => ( 1439500000000000000000 )
    • Upbit: Wallet Maker.CALL( )
    • DSToken.transfer( dst=0x03747F06215B44E498831dA019B27f53E483599F, wad=1439500000000000000000 ) => ( True )
    • Upbit: Wallet Maker.764358e6( )
      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_;
          }
      
      }