Online Solidity Decompiler

« Decompile another contract

Address

0x000000000035b5e5ad9019092c665357240f594e [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

No internal methods detected.

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() { if (msg.data.length <= 0x04) { goto label_0007; } if (0xadadadad - (msg.data[0x00:0x20] >> 0xe0)) { label_0007: var var0 = 0x00; var var1 = 0x60; var temp0 = memory[0x00:0x20]; memory[0x00:0x20] = code[0x89:0xa9]; var temp1 = memory[0x00:0x20]; memory[0x00:0x20] = temp0; var var2 = storage[temp1]; if (!msg.data.length) { goto label_001D; } var temp2 = msg.data.length; memory[var1:var1 + temp2] = msg.data[var0:var0 + temp2]; label_001D: var temp3 = var1; var temp4; temp4, memory[temp3:temp3 + var0] = address(var2).delegatecall.gas(msg.gas)(memory[temp3:temp3 + msg.data.length]); var0 = returndata.length; if (!var0) { goto label_0029; } var temp5 = var0; memory[0x60:0x60 + temp5] = returndata[0x00:0x00 + temp5]; label_0029: if (!var1) { revert(memory[0x60:0x60 + var0]); } else { return memory[0x60:0x60 + var0]; } } else if (msg.sender == 0x3376ebc8dce3453a045a145ab7b1e728b2ed581e) { var temp6 = memory[0x00:0x20]; memory[0x00:0x20] = code[0x89:0xa9]; var temp7 = memory[0x00:0x20]; memory[0x00:0x20] = temp6; storage[temp7] = msg.data[0x04:0x24] >> 0x60; stop(); } else { revert(memory[0x00:0x00]); } } }

Disassembly

label_0000: // Inputs[1] { @0002 msg.data.length } 0000 60 PUSH1 0x04 0002 36 CALLDATASIZE 0003 11 GT 0004 60 PUSH1 0x46 0006 57 *JUMPI // Stack delta = +0 // Block ends with conditional jump to 0x0046, if msg.data.length > 0x04 label_0007: // Incoming jump from 0x0054, if 0xadadadad - (msg.data[0x00:0x20] >> 0xe0) // Incoming jump from 0x0006, if not msg.data.length > 0x04 // Inputs[4] // { // @000D memory[0x00:0x20] // @0015 memory[0x00:0x20] // @0018 storage[memory[0x00:0x20]] // @0019 msg.data.length // } 0007 5B JUMPDEST 0008 5F PUSH0 0009 60 PUSH1 0x60 000B 5F PUSH0 000C 80 DUP1 000D 51 MLOAD 000E 60 PUSH1 0x20 0010 60 PUSH1 0x89 0012 83 DUP4 0013 39 CODECOPY 0014 81 DUP2 0015 51 MLOAD 0016 91 SWAP2 0017 52 MSTORE 0018 54 SLOAD 0019 36 CALLDATASIZE 001A 60 PUSH1 0x3e 001C 57 *JUMPI // Stack delta = +3 // Outputs[5] // { // @0008 stack[0] = 0x00 // @0009 stack[1] = 0x60 // @0013 memory[0x00:0x20] = code[0x89:0xa9] // @0017 memory[0x00:0x20] = memory[0x00:0x20] // @0018 stack[2] = storage[memory[0x00:0x20]] // } // Block ends with conditional jump to 0x003e, if msg.data.length label_001D: // Incoming jump from 0x001C, if not msg.data.length // Incoming jump from 0x0045 // Inputs[8] // { // @001E stack[-2] // @001F msg.data.length // @0020 stack[-1] // @0021 msg.gas // @0022 address(stack[-1]).delegatecall.gas(msg.gas)(memory[stack[-2]:stack[-2] + msg.data.length]) // @0022 stack[-3] // @0022 memory[stack[-2]:stack[-2] + msg.data.length] // @0023 returndata.length // } 001D 5B JUMPDEST 001E 81 DUP2 001F 36 CALLDATASIZE 0020 91 SWAP2 0021 5A GAS 0022 F4 DELEGATECALL 0023 3D RETURNDATASIZE 0024 90 SWAP1 0025 81 DUP2 0026 60 PUSH1 0x35 0028 57 *JUMPI // Stack delta = -1 // Outputs[3] // { // @0022 memory[stack[-2]:stack[-2] + stack[-3]] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[stack[-2]:stack[-2] + msg.data.length]) // @0024 stack[-2] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[stack[-2]:stack[-2] + msg.data.length]) // @0024 stack[-3] = returndata.length // } // Block ends with conditional jump to 0x0035, if returndata.length label_0029: // Incoming jump from 0x003D // Incoming jump from 0x0028, if not returndata.length // Inputs[1] { @002A stack[-1] } 0029 5B JUMPDEST 002A 15 ISZERO 002B 60 PUSH1 0x31 002D 57 *JUMPI // Stack delta = -1 // Block ends with conditional jump to 0x0031, if !stack[-1] label_002E: // Incoming jump from 0x002D, if not !stack[-1] // Inputs[2] // { // @0030 memory[0x60:0x60 + stack[-1]] // @0030 stack[-1] // } 002E 60 PUSH1 0x60 0030 F3 *RETURN // Stack delta = -1 // Outputs[1] { @0030 return memory[0x60:0x60 + stack[-1]]; } // Block terminates label_0031: // Incoming jump from 0x002D, if !stack[-1] // Inputs[2] // { // @0034 memory[0x60:0x60 + stack[-1]] // @0034 stack[-1] // } 0031 5B JUMPDEST 0032 60 PUSH1 0x60 0034 FD *REVERT // Stack delta = -1 // Outputs[1] { @0034 revert(memory[0x60:0x60 + stack[-1]]); } // Block terminates label_0035: // Incoming jump from 0x0028, if returndata.length // Inputs[2] // { // @0036 stack[-2] // @003A returndata[0x00:0x00 + stack[-2]] // } 0035 5B JUMPDEST 0036 81 DUP2 0037 5F PUSH0 0038 60 PUSH1 0x60 003A 3E RETURNDATACOPY 003B 60 PUSH1 0x29 003D 56 *JUMP // Stack delta = +0 // Outputs[1] { @003A memory[0x60:0x60 + stack[-2]] = returndata[0x00:0x00 + stack[-2]] } // Block ends with unconditional jump to 0x0029 label_003E: // Incoming jump from 0x001C, if msg.data.length // Inputs[4] // { // @003F msg.data.length // @0040 stack[-3] // @0041 stack[-2] // @0042 msg.data[stack[-3]:stack[-3] + msg.data.length] // } 003E 5B JUMPDEST 003F 36 CALLDATASIZE 0040 83 DUP4 0041 83 DUP4 0042 37 CALLDATACOPY 0043 60 PUSH1 0x1d 0045 56 *JUMP // Stack delta = +0 // Outputs[1] { @0042 memory[stack[-2]:stack[-2] + msg.data.length] = msg.data[stack[-3]:stack[-3] + msg.data.length] } // Block ends with unconditional jump to 0x001d label_0046: // Incoming jump from 0x0006, if msg.data.length > 0x04 // Inputs[1] { @0048 msg.data[0x00:0x20] } 0046 5B JUMPDEST 0047 5F PUSH0 0048 35 CALLDATALOAD 0049 60 PUSH1 0xe0 004B 1C SHR 004C 63 PUSH4 0xadadadad 0051 03 SUB 0052 60 PUSH1 0x07 0054 57 *JUMPI // Stack delta = +0 // Block ends with conditional jump to 0x0007, if 0xadadadad - (msg.data[0x00:0x20] >> 0xe0) label_0055: // Incoming jump from 0x0054, if not 0xadadadad - (msg.data[0x00:0x20] >> 0xe0) // Inputs[1] { @0055 msg.sender } 0055 33 CALLER 0056 73 PUSH20 0x3376ebc8dce3453a045a145ab7b1e728b2ed581e 006B 14 EQ 006C 60 PUSH1 0x72 006E 57 *JUMPI // Stack delta = +0 // Block ends with conditional jump to 0x0072, if 0x3376ebc8dce3453a045a145ab7b1e728b2ed581e == msg.sender label_006F: // Incoming jump from 0x006E, if not 0x3376ebc8dce3453a045a145ab7b1e728b2ed581e == msg.sender // Inputs[1] { @0071 memory[0x00:0x00] } 006F 5F PUSH0 0070 80 DUP1 0071 FD *REVERT // Stack delta = +0 // Outputs[1] { @0071 revert(memory[0x00:0x00]); } // Block terminates label_0072: // Incoming jump from 0x006E, if 0x3376ebc8dce3453a045a145ab7b1e728b2ed581e == msg.sender // Inputs[3] // { // @0075 msg.data[0x04:0x24] // @007B memory[0x00:0x20] // @0083 memory[0x00:0x20] // } 0072 5B JUMPDEST 0073 60 PUSH1 0x04 0075 35 CALLDATALOAD 0076 60 PUSH1 0x60 0078 1C SHR 0079 5F PUSH0 007A 80 DUP1 007B 51 MLOAD 007C 60 PUSH1 0x20 007E 60 PUSH1 0x89 0080 83 DUP4 0081 39 CODECOPY 0082 81 DUP2 0083 51 MLOAD 0084 91 SWAP2 0085 52 MSTORE 0086 55 SSTORE 0087 00 *STOP // Stack delta = +0 // Outputs[4] // { // @0081 memory[0x00:0x20] = code[0x89:0xa9] // @0085 memory[0x00:0x20] = memory[0x00:0x20] // @0086 storage[memory[0x00:0x20]] = msg.data[0x04:0x24] >> 0x60 // @0087 stop(); // } // Block terminates 0088 FE *ASSERT 0089 AB AB 008A CD CD 008B AB AB 008C CD CD 008D AB AB 008E CD CD 008F AB AB 0090 CD CD 0091 AB AB 0092 CD CD 0093 AB AB 0094 CD CD 0095 AB AB 0096 CD CD 0097 AB AB 0098 CD CD 0099 AB AB 009A CD CD 009B AB AB 009C CD CD 009D AB AB 009E CD CD 009F AB AB 00A0 CD CD 00A1 AB AB 00A2 CD CD 00A3 AB AB 00A4 CD CD 00A5 AB AB 00A6 CD CD 00A7 AB AB 00A8 CD CD
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]