Online Solidity Decompiler

« Decompile another contract

Address

0x8e46f11efc80ba5cacf65966cc6d7442a3b46731 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00A1(arg0, arg1) returns (r0)
func_00AC(arg0, arg1, arg2)
func_00BB(arg0, arg1, arg2) returns (r0)
func_00DC(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 = 0xffffffffffffffffffffffffffffffffffffffff & 0x9de3af976f8a0b2de6833a0c2dedf39ff16e41ce; var var6 = 0x45; var var7 = var0; var var9 = memory[0x40:0x60]; var var8 = var1; var6 = func_00DC(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) { revert(memory[0x00:0x00]); } label_0091: var temp2 = var4; return memory[temp2 + 0x20:temp2 + 0x20 + memory[temp2:temp2 + 0x20]]; } else { var temp3 = memory[0x40:0x60]; var6 = temp3; memory[0x40:0x60] = var6 + (returndata.length + 0x3f & ~0x1f); memory[var6:var6 + 0x20] = returndata.length; var temp4 = returndata.length; memory[var6 + 0x20:var6 + 0x20 + temp4] = returndata[0x00:0x00 + temp4]; var4 = var6; var3 = var5; if (var3) { goto label_0091; } else { revert(memory[0x00:0x00]); } } } function func_00A1(var arg0, var arg1) returns (var r0) { return arg1; } function func_00AC(var arg0, var arg1, var arg2) { var temp0 = arg0; var temp1 = arg1; memory[temp1:temp1 + temp0] = msg.data[arg2:arg2 + temp0]; memory[temp1 + temp0:temp1 + temp0 + 0x20] = 0x00; } function func_00BB(var arg0, var arg1, var arg2) returns (var r0) { var var0 = 0x00; var var1 = 0xc5; var var2 = arg1; var var3 = arg0; var1 = func_00A1(var2, var3); var temp0 = var1; arg0 = temp0; var1 = 0xd0; var2 = arg1; var3 = arg0; var var4 = arg2; func_00AC(var2, var3, var4); return arg0 + arg1; } function func_00DC(var arg0, var arg1, var arg2) returns (var r0) { var var0 = 0x00; var var1 = 0xe7; var var2 = arg2; var var3 = arg1; var var4 = arg0; return func_00BB(var2, var3, var4); } }

Disassembly

label_0000: // Inputs[2] // { // @0007 msg.data.length // @003C 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 0x9de3af976f8a0b2de6833a0c2dedf39ff16e41ce 0022 73 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0037 16 AND 0038 85 DUP6 0039 85 DUP6 003A 60 PUSH1 0x40 003C 51 MLOAD 003D 60 PUSH1 0x45 003F 92 SWAP3 0040 91 SWAP2 0041 90 SWAP1 0042 60 PUSH1 0xdc 0044 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 // @0037 stack[5] = 0xffffffffffffffffffffffffffffffffffffffff & 0x9de3af976f8a0b2de6833a0c2dedf39ff16e41ce // @003F stack[6] = 0x45 // @0040 stack[7] = 0x00 // @0041 stack[8] = msg.data.length // @0041 stack[9] = memory[0x40:0x60] // } // Block ends with call to 0x00dc, returns to 0x0045 label_0045: // Incoming return from call to 0x00DC at 0x0044 // Inputs[7] // { // @004A memory[0x40:0x60] // @004C stack[-1] // @004F stack[-2] // @0050 msg.gas // @0051 memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]] // @0051 address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @0055 returndata.length // } 0045 5B JUMPDEST 0046 60 PUSH1 0x00 0048 60 PUSH1 0x40 004A 51 MLOAD 004B 80 DUP1 004C 83 DUP4 004D 03 SUB 004E 81 DUP2 004F 85 DUP6 0050 5A GAS 0051 F4 DELEGATECALL 0052 91 SWAP2 0053 50 POP 0054 50 POP 0055 3D RETURNDATASIZE 0056 80 DUP1 0057 60 PUSH1 0x00 0059 81 DUP2 005A 14 EQ 005B 60 PUSH1 0x7e 005D 57 *JUMPI // Stack delta = +1 // Outputs[4] // { // @0051 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]]) // @0052 stack[-2] = address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @0055 stack[-1] = returndata.length // @0056 stack[0] = returndata.length // } // Block ends with conditional jump to 0x007e, if returndata.length == 0x00 label_005E: // Incoming jump from 0x005D, if not returndata.length == 0x00 // Inputs[6] // { // @0060 memory[0x40:0x60] // @0061 stack[-2] // @0068 returndata.length // @0070 returndata.length // @0073 returndata.length // @007A returndata[0x00:0x00 + returndata.length] // } 005E 60 PUSH1 0x40 0060 51 MLOAD 0061 91 SWAP2 0062 50 POP 0063 60 PUSH1 0x1f 0065 19 NOT 0066 60 PUSH1 0x3f 0068 3D RETURNDATASIZE 0069 01 ADD 006A 16 AND 006B 82 DUP3 006C 01 ADD 006D 60 PUSH1 0x40 006F 52 MSTORE 0070 3D RETURNDATASIZE 0071 82 DUP3 0072 52 MSTORE 0073 3D RETURNDATASIZE 0074 60 PUSH1 0x00 0076 60 PUSH1 0x20 0078 84 DUP5 0079 01 ADD 007A 3E RETURNDATACOPY 007B 60 PUSH1 0x83 007D 56 *JUMP // Stack delta = +0 // Outputs[4] // { // @0061 stack[-2] = memory[0x40:0x60] // @006F memory[0x40:0x60] = memory[0x40:0x60] + (returndata.length + 0x3f & ~0x1f) // @0072 memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = returndata.length // @007A memory[memory[0x40:0x60] + 0x20:memory[0x40:0x60] + 0x20 + returndata.length] = returndata[0x00:0x00 + returndata.length] // } // Block ends with unconditional jump to 0x0083 label_007E: // Incoming jump from 0x005D, if returndata.length == 0x00 // Inputs[4] // { // @0081 stack[-2] // @0085 stack[-4] // @0087 stack[-3] // @0087 stack[-5] // } 007E 5B JUMPDEST 007F 60 PUSH1 0x60 0081 91 SWAP2 0082 50 POP 0083 5B JUMPDEST 0084 50 POP 0085 91 SWAP2 0086 50 POP 0087 91 SWAP2 0088 50 POP 0089 81 DUP2 008A 60 PUSH1 0x91 008C 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @0085 stack[-4] = 0x60 // @0087 stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x0091, if stack[-3] label_008D: // Incoming jump from 0x008C, if not stack[-3] // Incoming jump from 0x008C, if not stack[-3] // Inputs[1] { @0090 memory[0x00:0x00] } 008D 60 PUSH1 0x00 008F 80 DUP1 0090 FD *REVERT // Stack delta = +0 // Outputs[1] { @0090 revert(memory[0x00:0x00]); } // Block terminates label_0091: // Incoming jump from 0x008C, if stack[-3] // Incoming jump from 0x008C, if stack[-3] // Inputs[5] // { // @0092 stack[-1] // @0093 stack[-3] // @0097 stack[-5] // @009B memory[stack[-1]:stack[-1] + 0x20] // @00A0 memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 0091 5B JUMPDEST 0092 80 DUP1 0093 92 SWAP3 0094 50 POP 0095 50 POP 0096 50 POP 0097 91 SWAP2 0098 50 POP 0099 50 POP 009A 80 DUP1 009B 51 MLOAD 009C 90 SWAP1 009D 60 PUSH1 0x20 009F 01 ADD 00A0 F3 *RETURN // Stack delta = -5 // Outputs[1] { @00A0 return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_00A1: // Incoming call from 0x00C4, returns to 0x00C5 // Inputs[3] // { // @00A4 stack[-1] // @00A7 stack[-3] // @00A8 stack[-2] // } 00A1 5B JUMPDEST 00A2 60 PUSH1 0x00 00A4 81 DUP2 00A5 90 SWAP1 00A6 50 POP 00A7 92 SWAP3 00A8 91 SWAP2 00A9 50 POP 00AA 50 POP 00AB 56 *JUMP // Stack delta = -2 // Outputs[1] { @00A7 stack[-3] = stack[-1] } // Block ends with unconditional jump to stack[-3] label_00AC: // Incoming call from 0x00CF, returns to 0x00D0 // Inputs[5] // { // @00AD stack[-3] // @00AE stack[-1] // @00AF stack[-2] // @00B0 msg.data[stack[-1]:stack[-1] + stack[-3]] // @00BA stack[-4] // } 00AC 5B JUMPDEST 00AD 82 DUP3 00AE 81 DUP2 00AF 83 DUP4 00B0 37 CALLDATACOPY 00B1 60 PUSH1 0x00 00B3 83 DUP4 00B4 83 DUP4 00B5 01 ADD 00B6 52 MSTORE 00B7 50 POP 00B8 50 POP 00B9 50 POP 00BA 56 *JUMP // Stack delta = -4 // Outputs[2] // { // @00B0 memory[stack[-2]:stack[-2] + stack[-3]] = msg.data[stack[-1]:stack[-1] + stack[-3]] // @00B6 memory[stack[-2] + stack[-3]:stack[-2] + stack[-3] + 0x20] = 0x00 // } // Block ends with unconditional jump to stack[-4] label_00BB: // Incoming call from 0x00E6, returns to 0x00E7 // Inputs[2] // { // @00C0 stack[-2] // @00C1 stack[-3] // } 00BB 5B JUMPDEST 00BC 60 PUSH1 0x00 00BE 60 PUSH1 0xc5 00C0 83 DUP4 00C1 85 DUP6 00C2 60 PUSH1 0xa1 00C4 56 *JUMP // Stack delta = +4 // Outputs[4] // { // @00BC stack[0] = 0x00 // @00BE stack[1] = 0xc5 // @00C0 stack[2] = stack[-2] // @00C1 stack[3] = stack[-3] // } // Block ends with call to 0x00a1, returns to 0x00C5 label_00C5: // Incoming return from call to 0x00A1 at 0x00C4 // Inputs[4] // { // @00C6 stack[-5] // @00C6 stack[-1] // @00CA stack[-4] // @00CC stack[-3] // } 00C5 5B JUMPDEST 00C6 93 SWAP4 00C7 50 POP 00C8 60 PUSH1 0xd0 00CA 83 DUP4 00CB 85 DUP6 00CC 84 DUP5 00CD 60 PUSH1 0xac 00CF 56 *JUMP // Stack delta = +3 // Outputs[5] // { // @00C6 stack[-5] = stack[-1] // @00C8 stack[-1] = 0xd0 // @00CA stack[0] = stack[-4] // @00CB stack[1] = stack[-1] // @00CC stack[2] = stack[-3] // } // Block ends with call to 0x00ac, returns to 0x00D0 label_00D0: // Incoming return from call to 0x00AC at 0x00CF // Inputs[4] // { // @00D1 stack[-3] // @00D2 stack[-4] // @00D4 stack[-1] // @00D6 stack[-5] // } 00D0 5B JUMPDEST 00D1 82 DUP3 00D2 84 DUP5 00D3 01 ADD 00D4 90 SWAP1 00D5 50 POP 00D6 93 SWAP4 00D7 92 SWAP3 00D8 50 POP 00D9 50 POP 00DA 50 POP 00DB 56 *JUMP // Stack delta = -4 // Outputs[1] { @00D6 stack[-5] = stack[-4] + stack[-3] } // Block ends with unconditional jump to stack[-5] label_00DC: // Incoming call from 0x0044, returns to 0x0045 // Inputs[3] // { // @00E1 stack[-1] // @00E2 stack[-2] // @00E3 stack[-3] // } 00DC 5B JUMPDEST 00DD 60 PUSH1 0x00 00DF 60 PUSH1 0xe7 00E1 82 DUP3 00E2 84 DUP5 00E3 86 DUP7 00E4 60 PUSH1 0xbb 00E6 56 *JUMP // Stack delta = +5 // Outputs[5] // { // @00DD stack[0] = 0x00 // @00DF stack[1] = 0xe7 // @00E1 stack[2] = stack[-1] // @00E2 stack[3] = stack[-2] // @00E3 stack[4] = stack[-3] // } // Block ends with call to 0x00bb, returns to 0x00E7 label_00E7: // Incoming return from call to 0x00BB at 0x00E6 // Inputs[5] // { // @00E8 stack[-1] // @00E8 stack[-3] // @00EB stack[-2] // @00ED stack[-6] // @00EE stack[-5] // } 00E7 5B JUMPDEST 00E8 91 SWAP2 00E9 50 POP 00EA 81 DUP2 00EB 90 SWAP1 00EC 50 POP 00ED 93 SWAP4 00EE 92 SWAP3 00EF 50 POP 00F0 50 POP 00F1 50 POP 00F2 56 *JUMP // Stack delta = -5 // Outputs[1] { @00ED stack[-6] = stack[-1] } // Block ends with unconditional jump to stack[-6] 00F3 FE *ASSERT 00F4 A2 LOG2 00F5 64 PUSH5 0x6970667358 00FB 22 22 00FC 12 SLT 00FD 20 SHA3 00FE EA EA 00FF 49 49 0100 73 PUSH20 0x6c06f06bdc95fdf74c90c5c30c1508eb579bc931 0115 03 SUB 0116 AA AA 0117 6F PUSH16 0xad38ea66efed64736f6c634300080d00 0128 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]