Online Solidity Decompiler

« Decompile another contract

Address

0x5bf9c91477484f2735593765182e8e7cfb446e9e [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_0021() returns (r0)

Decompilation

This might be constructor bytecode - to get at the deployed contract, go back and remove the constructor prefix, usually up to the next 6060 or 6080.
contract Contract { function main() { memory[0x40:0x60] = 0x80; if (msg.data.length) { var var0 = 0x0e; var var1 = 0x1f; var var2 = 0x1b; var2 = func_0021(); label_001B: var temp0 = msg.data.length; memory[0x00:0x00 + temp0] = msg.data[0x00:0x00 + temp0]; var temp1; temp1, memory[0x00:0x00] = address(var2).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]); var temp2 = returndata.length; memory[0x00:0x00 + temp2] = returndata[0x00:0x00 + temp2]; if (!temp1) { revert(memory[0x00:0x00 + returndata.length]); } else { return memory[0x00:0x00 + returndata.length]; } } else { var0 = 0x0e; var1 = 0x1f; var2 = 0x1b; var2 = func_0021(); goto label_001B; } } function func_0021() returns (var r0) { var var0 = 0x00; var var1 = storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] & 0xffffffffffffffffffffffffffffffffffffffff; return var1; } }

Disassembly

label_0000: // Inputs[1] { @0005 msg.data.length } 0000 60 PUSH1 0x80 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 36 CALLDATASIZE 0006 60 PUSH1 0x10 0008 57 *JUMPI // Stack delta = +0 // Outputs[1] { @0004 memory[0x40:0x60] = 0x80 } // Block ends with conditional jump to 0x0010, if msg.data.length label_0009: // Incoming jump from 0x0008, if not msg.data.length 0009 60 PUSH1 0x0e 000B 60 PUSH1 0x13 000D 56 *JUMP // Stack delta = +1 // Outputs[1] { @0009 stack[0] = 0x0e } // Block ends with unconditional jump to 0x0013 000E 5B JUMPDEST 000F 00 *STOP label_0010: // Incoming jump from 0x0008, if msg.data.length 0010 5B JUMPDEST 0011 60 PUSH1 0x0e 0013 5B JUMPDEST 0014 60 PUSH1 0x1f 0016 60 PUSH1 0x1b 0018 60 PUSH1 0x21 001A 56 *JUMP // Stack delta = +3 // Outputs[3] // { // @0011 stack[0] = 0x0e // @0014 stack[1] = 0x1f // @0016 stack[2] = 0x1b // } // Block ends with call to 0x0021, returns to 0x001B label_001B: // Incoming return from call to 0x0021 at 0x001A // Incoming return from call to 0x0021 at 0x001A 001B 5B JUMPDEST 001C 60 PUSH1 0x65 001E 56 *JUMP // Stack delta = +0 // Block ends with unconditional jump to 0x0065 001F 5B JUMPDEST 0020 56 *JUMP label_0021: // Incoming call from 0x001A, returns to 0x001B // Incoming call from 0x001A, returns to 0x001B // Inputs[1] { @0047 storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] } 0021 5B JUMPDEST 0022 60 PUSH1 0x00 0024 60 PUSH1 0x60 0026 7F PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 0047 54 SLOAD 0048 73 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 005D 16 AND 005E 90 SWAP1 005F 56 *JUMP // Stack delta = +2 // Outputs[2] // { // @0022 stack[0] = 0x00 // @005E stack[1] = 0xffffffffffffffffffffffffffffffffffffffff & storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] // } // Block ends with unconditional jump to 0x0060 label_0060: // Incoming jump from 0x005F // Inputs[3] // { // @0061 stack[-2] // @0061 stack[-1] // @0063 stack[-3] // } 0060 5B JUMPDEST 0061 90 SWAP1 0062 50 POP 0063 90 SWAP1 0064 56 *JUMP // Stack delta = -2 // Outputs[1] { @0063 stack[-3] = stack[-1] } // Block ends with unconditional jump to stack[-3] label_0065: // Incoming jump from 0x001E // Inputs[9] // { // @0066 msg.data.length // @006A msg.data[0x00:0x00 + msg.data.length] // @006E msg.data.length // @0071 stack[-1] // @0072 msg.gas // @0073 address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @0073 memory[0x00:0x00 + msg.data.length] // @0074 returndata.length // @0078 returndata[0x00:0x00 + returndata.length] // } 0065 5B JUMPDEST 0066 36 CALLDATASIZE 0067 60 PUSH1 0x00 0069 80 DUP1 006A 37 CALLDATACOPY 006B 60 PUSH1 0x00 006D 80 DUP1 006E 36 CALLDATASIZE 006F 60 PUSH1 0x00 0071 84 DUP5 0072 5A GAS 0073 F4 DELEGATECALL 0074 3D RETURNDATASIZE 0075 60 PUSH1 0x00 0077 80 DUP1 0078 3E RETURNDATACOPY 0079 80 DUP1 007A 80 DUP1 007B 15 ISZERO 007C 60 PUSH1 0x83 007E 57 *JUMPI // Stack delta = +2 // Outputs[5] // { // @006A memory[0x00:0x00 + msg.data.length] = msg.data[0x00:0x00 + msg.data.length] // @0073 memory[0x00:0x00] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @0073 stack[0] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @0078 memory[0x00:0x00 + returndata.length] = returndata[0x00:0x00 + returndata.length] // @0079 stack[1] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // } // Block ends with conditional jump to 0x0083, if !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) label_007F: // Incoming jump from 0x007E, if not !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // Inputs[2] // { // @007F returndata.length // @0082 memory[0x00:0x00 + returndata.length] // } 007F 3D RETURNDATASIZE 0080 60 PUSH1 0x00 0082 F3 *RETURN // Stack delta = +0 // Outputs[1] { @0082 return memory[0x00:0x00 + returndata.length]; } // Block terminates label_0083: // Incoming jump from 0x007E, if !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // Inputs[2] // { // @0084 returndata.length // @0087 memory[0x00:0x00 + returndata.length] // } 0083 5B JUMPDEST 0084 3D RETURNDATASIZE 0085 60 PUSH1 0x00 0087 FD *REVERT // Stack delta = +0 // Outputs[1] { @0087 revert(memory[0x00:0x00 + returndata.length]); } // Block terminates 0088 FE *ASSERT 0089 A1 LOG1 008A 64 PUSH5 0x736f6c6343 0090 00 *STOP 0091 08 ADDMOD 0092 13 SGT 0093 00 *STOP 0094 0A EXP
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]