Online Solidity Decompiler

« Decompile another contract

Address

0xb86f724cd0732106747dabc3f585f45e8871e8dd [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00CE(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; if (!msg.data.length) { stop(); } var var0 = 0x00; var var1 = msg.data.length; var var2 = 0x60; var var3 = 0x00; var var4 = var3; var var5 = (0x01 << 0xa0) - 0x01 & 0x475524de13f635cbbca065c3b70c35cdeb6125ea; var var6 = 0x3e; var var7 = var0; var var8 = var1; var var9 = memory[0x40:0x60]; var6 = func_00CE(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_00C1: var temp2 = var4; return memory[temp2 + 0x20:temp2 + 0x20 + memory[temp2:temp2 + 0x20]]; } else { label_0086: var temp3 = memory[0x40:0x60]; memory[temp3:temp3 + 0x20] = 0x461bcd << 0xe5; memory[temp3 + 0x04:temp3 + 0x04 + 0x20] = 0x20; memory[temp3 + 0x24:temp3 + 0x24 + 0x20] = 0x0d; memory[temp3 + 0x44:temp3 + 0x44 + 0x20] = 0x2b32b934b334b1b0ba34b7b717 << 0x99; 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_00C1; } else { goto label_0086; } } } function func_00CE(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[1] { @0005 msg.data.length } 0000 60 PUSH1 0x80 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 36 CALLDATASIZE 0006 60 PUSH1 0x0a 0008 57 *JUMPI // Stack delta = +0 // Outputs[1] { @0004 memory[0x40:0x60] = 0x80 } // Block ends with conditional jump to 0x000a, if msg.data.length label_0009: // Incoming jump from 0x0008, if not msg.data.length 0009 00 *STOP // Stack delta = +0 // Outputs[1] { @0009 stop(); } // Block terminates label_000A: // Incoming jump from 0x0008, if msg.data.length // Inputs[2] // { // @000D msg.data.length // @0035 memory[0x40:0x60] // } 000A 5B JUMPDEST 000B 60 PUSH1 0x00 000D 36 CALLDATASIZE 000E 60 PUSH1 0x60 0010 60 PUSH1 0x00 0012 80 DUP1 0013 73 PUSH20 0x475524de13f635cbbca065c3b70c35cdeb6125ea 0028 60 PUSH1 0x01 002A 60 PUSH1 0x01 002C 60 PUSH1 0xa0 002E 1B SHL 002F 03 SUB 0030 16 AND 0031 85 DUP6 0032 85 DUP6 0033 60 PUSH1 0x40 0035 51 MLOAD 0036 60 PUSH1 0x3e 0038 92 SWAP3 0039 91 SWAP2 003A 90 SWAP1 003B 60 PUSH1 0xce 003D 56 *JUMP // Stack delta = +10 // Outputs[10] // { // @000B stack[0] = 0x00 // @000D stack[1] = msg.data.length // @000E stack[2] = 0x60 // @0010 stack[3] = 0x00 // @0012 stack[4] = 0x00 // @0030 stack[5] = (0x01 << 0xa0) - 0x01 & 0x475524de13f635cbbca065c3b70c35cdeb6125ea // @0038 stack[6] = 0x3e // @0039 stack[7] = 0x00 // @003A stack[8] = msg.data.length // @003A stack[9] = memory[0x40:0x60] // } // Block ends with call to 0x00ce, returns to 0x003E label_003E: // Incoming return from call to 0x00CE at 0x003D // Inputs[7] // { // @0043 memory[0x40:0x60] // @0045 stack[-1] // @0048 stack[-2] // @0049 msg.gas // @004A address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @004A memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]] // @004E returndata.length // } 003E 5B JUMPDEST 003F 60 PUSH1 0x00 0041 60 PUSH1 0x40 0043 51 MLOAD 0044 80 DUP1 0045 83 DUP4 0046 03 SUB 0047 81 DUP2 0048 85 DUP6 0049 5A GAS 004A F4 DELEGATECALL 004B 91 SWAP2 004C 50 POP 004D 50 POP 004E 3D RETURNDATASIZE 004F 80 DUP1 0050 60 PUSH1 0x00 0052 81 DUP2 0053 14 EQ 0054 60 PUSH1 0x77 0056 57 *JUMPI // Stack delta = +1 // Outputs[4] // { // @004A 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]]) // @004B stack[-2] = address(stack[-2]).delegatecall.gas(msg.gas)(memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]) // @004E stack[-1] = returndata.length // @004F stack[0] = returndata.length // } // Block ends with conditional jump to 0x0077, if returndata.length == 0x00 label_0057: // Incoming jump from 0x0056, if not returndata.length == 0x00 // Inputs[6] // { // @0059 memory[0x40:0x60] // @005A stack[-2] // @0061 returndata.length // @0069 returndata.length // @006C returndata.length // @0073 returndata[0x00:0x00 + returndata.length] // } 0057 60 PUSH1 0x40 0059 51 MLOAD 005A 91 SWAP2 005B 50 POP 005C 60 PUSH1 0x1f 005E 19 NOT 005F 60 PUSH1 0x3f 0061 3D RETURNDATASIZE 0062 01 ADD 0063 16 AND 0064 82 DUP3 0065 01 ADD 0066 60 PUSH1 0x40 0068 52 MSTORE 0069 3D RETURNDATASIZE 006A 82 DUP3 006B 52 MSTORE 006C 3D RETURNDATASIZE 006D 60 PUSH1 0x00 006F 60 PUSH1 0x20 0071 84 DUP5 0072 01 ADD 0073 3E RETURNDATACOPY 0074 60 PUSH1 0x7c 0076 56 *JUMP // Stack delta = +0 // Outputs[4] // { // @005A stack[-2] = memory[0x40:0x60] // @0068 memory[0x40:0x60] = memory[0x40:0x60] + (returndata.length + 0x3f & ~0x1f) // @006B memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = returndata.length // @0073 memory[memory[0x40:0x60] + 0x20:memory[0x40:0x60] + 0x20 + returndata.length] = returndata[0x00:0x00 + returndata.length] // } // Block ends with unconditional jump to 0x007c label_0077: // Incoming jump from 0x0056, if returndata.length == 0x00 // Inputs[4] // { // @007A stack[-2] // @007E stack[-4] // @0080 stack[-3] // @0080 stack[-5] // } 0077 5B JUMPDEST 0078 60 PUSH1 0x60 007A 91 SWAP2 007B 50 POP 007C 5B JUMPDEST 007D 50 POP 007E 91 SWAP2 007F 50 POP 0080 91 SWAP2 0081 50 POP 0082 81 DUP2 0083 60 PUSH1 0xc1 0085 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @007E stack[-4] = 0x60 // @0080 stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x00c1, if stack[-3] label_0086: // Incoming jump from 0x0085, if not stack[-3] // Incoming jump from 0x0085, if not stack[-3] // Inputs[3] // { // @0088 memory[0x40:0x60] // @00BB memory[0x40:0x60] // @00C0 memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]] // } 0086 60 PUSH1 0x40 0088 51 MLOAD 0089 62 PUSH3 0x461bcd 008D 60 PUSH1 0xe5 008F 1B SHL 0090 81 DUP2 0091 52 MSTORE 0092 60 PUSH1 0x20 0094 60 PUSH1 0x04 0096 82 DUP3 0097 01 ADD 0098 52 MSTORE 0099 60 PUSH1 0x0d 009B 60 PUSH1 0x24 009D 82 DUP3 009E 01 ADD 009F 52 MSTORE 00A0 6C PUSH13 0x2b32b934b334b1b0ba34b7b717 00AE 60 PUSH1 0x99 00B0 1B SHL 00B1 60 PUSH1 0x44 00B3 82 DUP3 00B4 01 ADD 00B5 52 MSTORE 00B6 60 PUSH1 0x64 00B8 01 ADD 00B9 60 PUSH1 0x40 00BB 51 MLOAD 00BC 80 DUP1 00BD 91 SWAP2 00BE 03 SUB 00BF 90 SWAP1 00C0 FD *REVERT // Stack delta = +0 // Outputs[5] // { // @0091 memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = 0x461bcd << 0xe5 // @0098 memory[memory[0x40:0x60] + 0x04:memory[0x40:0x60] + 0x04 + 0x20] = 0x20 // @009F memory[memory[0x40:0x60] + 0x24:memory[0x40:0x60] + 0x24 + 0x20] = 0x0d // @00B5 memory[memory[0x40:0x60] + 0x44:memory[0x40:0x60] + 0x44 + 0x20] = 0x2b32b934b334b1b0ba34b7b717 << 0x99 // @00C0 revert(memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]]); // } // Block terminates label_00C1: // Incoming jump from 0x0085, if stack[-3] // Incoming jump from 0x0085, if stack[-3] // Inputs[5] // { // @00C2 stack[-1] // @00C3 memory[stack[-1]:stack[-1] + 0x20] // @00C4 stack[-5] // @00C9 stack[-4] // @00CD memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 00C1 5B JUMPDEST 00C2 80 DUP1 00C3 51 MLOAD 00C4 94 SWAP5 00C5 50 POP 00C6 60 PUSH1 0x20 00C8 01 ADD 00C9 92 SWAP3 00CA 50 POP 00CB 50 POP 00CC 50 POP 00CD F3 *RETURN // Stack delta = -5 // Outputs[1] { @00CD return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_00CE: // Incoming call from 0x003D, returns to 0x003E // Inputs[5] // { // @00CF stack[-2] // @00D0 stack[-3] // @00D1 stack[-1] // @00D2 msg.data[stack[-3]:stack[-3] + stack[-2]] // @00DA stack[-4] // } 00CE 5B JUMPDEST 00CF 81 DUP2 00D0 83 DUP4 00D1 82 DUP3 00D2 37 CALLDATACOPY 00D3 60 PUSH1 0x00 00D5 91 SWAP2 00D6 01 ADD 00D7 90 SWAP1 00D8 81 DUP2 00D9 52 MSTORE 00DA 91 SWAP2 00DB 90 SWAP1 00DC 50 POP 00DD 56 *JUMP // Stack delta = -3 // Outputs[3] // { // @00D2 memory[stack[-1]:stack[-1] + stack[-2]] = msg.data[stack[-3]:stack[-3] + stack[-2]] // @00D9 memory[stack[-2] + stack[-1]:stack[-2] + stack[-1] + 0x20] = 0x00 // @00DA stack[-4] = stack[-2] + stack[-1] // } // Block ends with unconditional jump to stack[-4] 00DE FE *ASSERT 00DF A2 LOG2 00E0 64 PUSH5 0x6970667358 00E6 22 22 00E7 12 SLT 00E8 20 SHA3 00E9 C6 C6 00EA AD AD 00EB 50 POP 00EC D6 D6 00ED EF EF 00EE C8 C8 00EF 15 ISZERO 00F0 76 PUSH23 0x00c63c61bfce641d171fde2b7330a5d25dbf5b3516c7ba 0108 91 SWAP2 0109 64 PUSH5 0x736f6c6343 010F 00 *STOP 0110 08 ADDMOD 0111 1E 1E 0112 00 *STOP 0113 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]