Online Solidity Decompiler

« Decompile another contract

Address

0x247d73dfd6268332b56716570b6beb036bb2e505 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00C9(arg0, arg1, arg2) 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; var var0 = 0x00; var var1 = msg.data.length; var var2 = 0x60; var var3 = 0x00; var var4 = var3; var var5 = (0x01 << 0xa0) - 0x01 & 0x15bdb9994b5b9d09a215aa4a4d652950f725c0fe; var var6 = 0x38; var var7 = var0; var var9 = memory[0x40:0x60]; var var8 = var1; var6 = func_00C9(var7, var8, var9); var temp0 = memory[0x40:0x60]; var temp1; temp1, memory[temp0:temp0 + 0x00] = address(var5).delegatecall.gas(msg.gas)(memory[temp0:temp0 + var6 - temp0]); var6 = returndata.length; var7 = var6; if (var7 == 0x00) { var4 = 0x60; var3 = var5; if (var3) { label_00BC: var temp2 = var4; return memory[temp2 + 0x20:temp2 + 0x20 + memory[temp2:temp2 + 0x20]]; } else { label_0080: var temp3 = memory[0x40:0x60]; memory[temp3:temp3 + 0x20] = 0x461bcd << 0xe5; memory[temp3 + 0x04:temp3 + 0x04 + 0x20] = 0x20; memory[temp3 + 0x24:temp3 + 0x24 + 0x20] = 0x0e; memory[temp3 + 0x44:temp3 + 0x44 + 0x20] = 0x125d195b481a5cc8131bd8dad959 << 0x92; var temp4 = memory[0x40:0x60]; revert(memory[temp4:temp4 + (temp3 + 0x64) - temp4]); } } else { var temp5 = memory[0x40:0x60]; var6 = temp5; memory[0x40:0x60] = var6 + (returndata.length + 0x3f & ~0x1f); memory[var6:var6 + 0x20] = returndata.length; var temp6 = returndata.length; memory[var6 + 0x20:var6 + 0x20 + temp6] = returndata[0x00:0x00 + temp6]; var4 = var6; var3 = var5; if (var3) { goto label_00BC; } else { goto label_0080; } } } function func_00C9(var arg0, var arg1, var arg2) returns (var r0) { var temp0 = arg1; var temp1 = arg2; memory[temp1:temp1 + temp0] = msg.data[arg0:arg0 + temp0]; memory[temp0 + temp1:temp0 + temp1 + 0x20] = 0x00; return temp0 + temp1; } }

Disassembly

label_0000: // Inputs[2] // { // @0007 msg.data.length // @002F memory[0x40:0x60] // } 0000 60 PUSH1 0x80 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 60 PUSH1 0x00 0007 36 CALLDATASIZE 0008 60 PUSH1 0x60 000A 60 PUSH1 0x00 000C 80 DUP1 000D 73 PUSH20 0x15bdb9994b5b9d09a215aa4a4d652950f725c0fe 0022 60 PUSH1 0x01 0024 60 PUSH1 0x01 0026 60 PUSH1 0xa0 0028 1B SHL 0029 03 SUB 002A 16 AND 002B 85 DUP6 002C 85 DUP6 002D 60 PUSH1 0x40 002F 51 MLOAD 0030 60 PUSH1 0x38 0032 92 SWAP3 0033 91 SWAP2 0034 90 SWAP1 0035 60 PUSH1 0xc9 0037 56 *JUMP // Stack delta = +10 // Outputs[11] // { // @0004 memory[0x40:0x60] = 0x80 // @0005 stack[0] = 0x00 // @0007 stack[1] = msg.data.length // @0008 stack[2] = 0x60 // @000A stack[3] = 0x00 // @000C stack[4] = 0x00 // @002A stack[5] = (0x01 << 0xa0) - 0x01 & 0x15bdb9994b5b9d09a215aa4a4d652950f725c0fe // @0032 stack[6] = 0x38 // @0033 stack[7] = 0x00 // @0034 stack[8] = msg.data.length // @0034 stack[9] = memory[0x40:0x60] // } // Block ends with call to 0x00c9, returns to 0x0038 label_0038: // Incoming return from call to 0x00C9 at 0x0037 // Inputs[7] // { // @003D memory[0x40:0x60] // @003F stack[-1] // @0042 stack[-2] // @0043 msg.gas // @0044 memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]] // @0044 address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @0048 returndata.length // } 0038 5B JUMPDEST 0039 60 PUSH1 0x00 003B 60 PUSH1 0x40 003D 51 MLOAD 003E 80 DUP1 003F 83 DUP4 0040 03 SUB 0041 81 DUP2 0042 85 DUP6 0043 5A GAS 0044 F4 DELEGATECALL 0045 91 SWAP2 0046 50 POP 0047 50 POP 0048 3D RETURNDATASIZE 0049 80 DUP1 004A 60 PUSH1 0x00 004C 81 DUP2 004D 14 EQ 004E 60 PUSH1 0x71 0050 57 *JUMPI // Stack delta = +1 // Outputs[4] // { // @0044 memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x00] = address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @0045 stack[-2] = address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @0048 stack[-1] = returndata.length // @0049 stack[0] = returndata.length // } // Block ends with conditional jump to 0x0071, if returndata.length == 0x00 label_0051: // Incoming jump from 0x0050, if not returndata.length == 0x00 // Inputs[6] // { // @0053 memory[0x40:0x60] // @0054 stack[-2] // @005B returndata.length // @0063 returndata.length // @0066 returndata.length // @006D returndata[0x00:0x00 + returndata.length] // } 0051 60 PUSH1 0x40 0053 51 MLOAD 0054 91 SWAP2 0055 50 POP 0056 60 PUSH1 0x1f 0058 19 NOT 0059 60 PUSH1 0x3f 005B 3D RETURNDATASIZE 005C 01 ADD 005D 16 AND 005E 82 DUP3 005F 01 ADD 0060 60 PUSH1 0x40 0062 52 MSTORE 0063 3D RETURNDATASIZE 0064 82 DUP3 0065 52 MSTORE 0066 3D RETURNDATASIZE 0067 60 PUSH1 0x00 0069 60 PUSH1 0x20 006B 84 DUP5 006C 01 ADD 006D 3E RETURNDATACOPY 006E 60 PUSH1 0x76 0070 56 *JUMP // Stack delta = +0 // Outputs[4] // { // @0054 stack[-2] = memory[0x40:0x60] // @0062 memory[0x40:0x60] = memory[0x40:0x60] + (returndata.length + 0x3f & ~0x1f) // @0065 memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = returndata.length // @006D memory[memory[0x40:0x60] + 0x20:memory[0x40:0x60] + 0x20 + returndata.length] = returndata[0x00:0x00 + returndata.length] // } // Block ends with unconditional jump to 0x0076 label_0071: // Incoming jump from 0x0050, if returndata.length == 0x00 // Inputs[4] // { // @0074 stack[-2] // @0078 stack[-4] // @007A stack[-5] // @007A stack[-3] // } 0071 5B JUMPDEST 0072 60 PUSH1 0x60 0074 91 SWAP2 0075 50 POP 0076 5B JUMPDEST 0077 50 POP 0078 91 SWAP2 0079 50 POP 007A 91 SWAP2 007B 50 POP 007C 81 DUP2 007D 60 PUSH1 0xbc 007F 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @0078 stack[-4] = 0x60 // @007A stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x00bc, if stack[-3] label_0080: // Incoming jump from 0x007F, if not stack[-3] // Incoming jump from 0x007F, if not stack[-3] // Inputs[3] // { // @0082 memory[0x40:0x60] // @00B6 memory[0x40:0x60] // @00BB memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]] // } 0080 60 PUSH1 0x40 0082 51 MLOAD 0083 62 PUSH3 0x461bcd 0087 60 PUSH1 0xe5 0089 1B SHL 008A 81 DUP2 008B 52 MSTORE 008C 60 PUSH1 0x20 008E 60 PUSH1 0x04 0090 82 DUP3 0091 01 ADD 0092 52 MSTORE 0093 60 PUSH1 0x0e 0095 60 PUSH1 0x24 0097 82 DUP3 0098 01 ADD 0099 52 MSTORE 009A 6D PUSH14 0x125d195b481a5cc8131bd8dad959 00A9 60 PUSH1 0x92 00AB 1B SHL 00AC 60 PUSH1 0x44 00AE 82 DUP3 00AF 01 ADD 00B0 52 MSTORE 00B1 60 PUSH1 0x64 00B3 01 ADD 00B4 60 PUSH1 0x40 00B6 51 MLOAD 00B7 80 DUP1 00B8 91 SWAP2 00B9 03 SUB 00BA 90 SWAP1 00BB FD *REVERT // Stack delta = +0 // Outputs[5] // { // @008B memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = 0x461bcd << 0xe5 // @0092 memory[memory[0x40:0x60] + 0x04:memory[0x40:0x60] + 0x04 + 0x20] = 0x20 // @0099 memory[memory[0x40:0x60] + 0x24:memory[0x40:0x60] + 0x24 + 0x20] = 0x0e // @00B0 memory[memory[0x40:0x60] + 0x44:memory[0x40:0x60] + 0x44 + 0x20] = 0x125d195b481a5cc8131bd8dad959 << 0x92 // @00BB revert(memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]]); // } // Block terminates label_00BC: // Incoming jump from 0x007F, if stack[-3] // Incoming jump from 0x007F, if stack[-3] // Inputs[5] // { // @00BD stack[-1] // @00BE memory[stack[-1]:stack[-1] + 0x20] // @00BF stack[-5] // @00C4 stack[-4] // @00C8 memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 00BC 5B JUMPDEST 00BD 80 DUP1 00BE 51 MLOAD 00BF 94 SWAP5 00C0 50 POP 00C1 60 PUSH1 0x20 00C3 01 ADD 00C4 92 SWAP3 00C5 50 POP 00C6 50 POP 00C7 50 POP 00C8 F3 *RETURN // Stack delta = -5 // Outputs[1] { @00C8 return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_00C9: // Incoming call from 0x0037, returns to 0x0038 // Inputs[5] // { // @00CA stack[-2] // @00CB stack[-3] // @00CC stack[-1] // @00CD msg.data[stack[-3]:stack[-3] + stack[-2]] // @00D5 stack[-4] // } 00C9 5B JUMPDEST 00CA 81 DUP2 00CB 83 DUP4 00CC 82 DUP3 00CD 37 CALLDATACOPY 00CE 60 PUSH1 0x00 00D0 91 SWAP2 00D1 01 ADD 00D2 90 SWAP1 00D3 81 DUP2 00D4 52 MSTORE 00D5 91 SWAP2 00D6 90 SWAP1 00D7 50 POP 00D8 56 *JUMP // Stack delta = -3 // Outputs[3] // { // @00CD memory[stack[-1]:stack[-1] + stack[-2]] = msg.data[stack[-3]:stack[-3] + stack[-2]] // @00D4 memory[stack[-2] + stack[-1]:stack[-2] + stack[-1] + 0x20] = 0x00 // @00D5 stack[-4] = stack[-2] + stack[-1] // } // Block ends with unconditional jump to stack[-4] 00D9 FE *ASSERT 00DA A2 LOG2 00DB 64 PUSH5 0x6970667358 00E1 22 22 00E2 12 SLT 00E3 20 SHA3 00E4 1D SAR 00E5 DC DC 00E6 69 PUSH10 0x17a05a31bd5bc93d6ec4 00F1 ED ED 00F2 4C 4C 00F3 5B JUMPDEST 00F4 A0 LOG0 00F5 22 22 00F6 65 PUSH6 0xe15a915bc89d 00FD 36 CALLDATASIZE 00FE 3C EXTCODECOPY 00FF 3B EXTCODESIZE 0100 24 24 0101 07 SMOD 0102 0E 0E 0103 F2 CALLCODE 0104 64 PUSH5 0x736f6c6343 010A 00 *STOP 010B 08 ADDMOD 010C 0D 0D 010D 00 *STOP 010E 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]