Online Solidity Decompiler

« Decompile another contract

Address

0xff8c5aeefbde324588528506c8b3e44da33c4630 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00C0(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 & 0xb44b05af428c9dd5895a20531953349c321361c7; var var6 = 0x38; var var7 = var0; var var9 = memory[0x40:0x60]; var var8 = var1; var6 = func_00C0(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_00B3: 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] = 0x05; memory[temp3 + 0x44:temp3 + 0x44 + 0x20] = 0x32b93937b9 << 0xd9; 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_00B3; } else { goto label_0080; } } } function func_00C0(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 0xb44b05af428c9dd5895a20531953349c321361c7 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 0xc0 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 & 0xb44b05af428c9dd5895a20531953349c321361c7 // @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 0x00c0, returns to 0x0038 label_0038: // Incoming return from call to 0x00C0 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[-3] // @007A stack[-5] // } 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 0xb3 007F 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @0078 stack[-4] = 0x60 // @007A stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x00b3, 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] // @00AD memory[0x40:0x60] // @00B2 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 0x05 0095 60 PUSH1 0x24 0097 82 DUP3 0098 01 ADD 0099 52 MSTORE 009A 64 PUSH5 0x32b93937b9 00A0 60 PUSH1 0xd9 00A2 1B SHL 00A3 60 PUSH1 0x44 00A5 82 DUP3 00A6 01 ADD 00A7 52 MSTORE 00A8 60 PUSH1 0x64 00AA 01 ADD 00AB 60 PUSH1 0x40 00AD 51 MLOAD 00AE 80 DUP1 00AF 91 SWAP2 00B0 03 SUB 00B1 90 SWAP1 00B2 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] = 0x05 // @00A7 memory[memory[0x40:0x60] + 0x44:memory[0x40:0x60] + 0x44 + 0x20] = 0x32b93937b9 << 0xd9 // @00B2 revert(memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]]); // } // Block terminates label_00B3: // Incoming jump from 0x007F, if stack[-3] // Incoming jump from 0x007F, if stack[-3] // Inputs[5] // { // @00B4 stack[-1] // @00B5 memory[stack[-1]:stack[-1] + 0x20] // @00B6 stack[-5] // @00BB stack[-4] // @00BF memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 00B3 5B JUMPDEST 00B4 80 DUP1 00B5 51 MLOAD 00B6 94 SWAP5 00B7 50 POP 00B8 60 PUSH1 0x20 00BA 01 ADD 00BB 92 SWAP3 00BC 50 POP 00BD 50 POP 00BE 50 POP 00BF F3 *RETURN // Stack delta = -5 // Outputs[1] { @00BF return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_00C0: // Incoming call from 0x0037, returns to 0x0038 // Inputs[5] // { // @00C1 stack[-2] // @00C2 stack[-3] // @00C3 stack[-1] // @00C4 msg.data[stack[-3]:stack[-3] + stack[-2]] // @00CC stack[-4] // } 00C0 5B JUMPDEST 00C1 81 DUP2 00C2 83 DUP4 00C3 82 DUP3 00C4 37 CALLDATACOPY 00C5 60 PUSH1 0x00 00C7 91 SWAP2 00C8 01 ADD 00C9 90 SWAP1 00CA 81 DUP2 00CB 52 MSTORE 00CC 91 SWAP2 00CD 90 SWAP1 00CE 50 POP 00CF 56 *JUMP // Stack delta = -3 // Outputs[3] // { // @00C4 memory[stack[-1]:stack[-1] + stack[-2]] = msg.data[stack[-3]:stack[-3] + stack[-2]] // @00CB memory[stack[-2] + stack[-1]:stack[-2] + stack[-1] + 0x20] = 0x00 // @00CC stack[-4] = stack[-2] + stack[-1] // } // Block ends with unconditional jump to stack[-4] 00D0 FE *ASSERT 00D1 A2 LOG2 00D2 64 PUSH5 0x6970667358 00D8 22 22 00D9 12 SLT 00DA 20 SHA3 00DB D9 D9 00DC 04 DIV 00DD 1B SHL 00DE 32 ORIGIN 00DF FB FB 00E0 E5 E5 00E1 E1 E1 00E2 D4 D4 00E3 58 PC 00E4 52 MSTORE 00E5 80 DUP1 00E6 28 28 00E7 6B PUSH12 0x6a1118bb537468ee91f1be07 00F4 4C 4C 00F5 2B 2B 00F6 38 CODESIZE 00F7 8E DUP15 00F8 E0 E0 00F9 A7 A7 00FA 9E SWAP15 00FB 64 PUSH5 0x736f6c6343 0101 00 *STOP 0102 08 ADDMOD 0103 0D 0D 0104 00 *STOP 0105 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]