Online Solidity Decompiler

« Decompile another contract

Address

0x59da69c6c616856a94daa75b6a05918f44eeb311 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00CA(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 & 0xb81d52273b461db9e9690293dc4463119f6eef96; var var6 = 0x38; var var7 = var0; var var9 = memory[0x40:0x60]; var var8 = var1; var6 = func_00CA(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_00BD: 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] = 0x0f; memory[temp3 + 0x44:temp3 + 0x44 + 0x20] = 0x24ba32b69034b9902637b1b5b2b217 << 0x89; 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_00BD; } else { goto label_0080; } } } function func_00CA(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 0xb81d52273b461db9e9690293dc4463119f6eef96 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 0xca 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 & 0xb81d52273b461db9e9690293dc4463119f6eef96 // @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 0x00ca, returns to 0x0038 label_0038: // Incoming return from call to 0x00CA 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 0xbd 007F 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @0078 stack[-4] = 0x60 // @007A stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x00bd, 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] // @00B7 memory[0x40:0x60] // @00BC 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 0x0f 0095 60 PUSH1 0x24 0097 82 DUP3 0098 01 ADD 0099 52 MSTORE 009A 6E PUSH15 0x24ba32b69034b9902637b1b5b2b217 00AA 60 PUSH1 0x89 00AC 1B SHL 00AD 60 PUSH1 0x44 00AF 82 DUP3 00B0 01 ADD 00B1 52 MSTORE 00B2 60 PUSH1 0x64 00B4 01 ADD 00B5 60 PUSH1 0x40 00B7 51 MLOAD 00B8 80 DUP1 00B9 91 SWAP2 00BA 03 SUB 00BB 90 SWAP1 00BC 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] = 0x0f // @00B1 memory[memory[0x40:0x60] + 0x44:memory[0x40:0x60] + 0x44 + 0x20] = 0x24ba32b69034b9902637b1b5b2b217 << 0x89 // @00BC revert(memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x64 + memory[0x40:0x60]) - memory[0x40:0x60]]); // } // Block terminates label_00BD: // Incoming jump from 0x007F, if stack[-3] // Incoming jump from 0x007F, if stack[-3] // Inputs[5] // { // @00BE stack[-1] // @00BF memory[stack[-1]:stack[-1] + 0x20] // @00C0 stack[-5] // @00C5 stack[-4] // @00C9 memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 00BD 5B JUMPDEST 00BE 80 DUP1 00BF 51 MLOAD 00C0 94 SWAP5 00C1 50 POP 00C2 60 PUSH1 0x20 00C4 01 ADD 00C5 92 SWAP3 00C6 50 POP 00C7 50 POP 00C8 50 POP 00C9 F3 *RETURN // Stack delta = -5 // Outputs[1] { @00C9 return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_00CA: // Incoming call from 0x0037, returns to 0x0038 // Inputs[5] // { // @00CB stack[-2] // @00CC stack[-3] // @00CD stack[-1] // @00CE msg.data[stack[-3]:stack[-3] + stack[-2]] // @00D6 stack[-4] // } 00CA 5B JUMPDEST 00CB 81 DUP2 00CC 83 DUP4 00CD 82 DUP3 00CE 37 CALLDATACOPY 00CF 60 PUSH1 0x00 00D1 91 SWAP2 00D2 01 ADD 00D3 90 SWAP1 00D4 81 DUP2 00D5 52 MSTORE 00D6 91 SWAP2 00D7 90 SWAP1 00D8 50 POP 00D9 56 *JUMP // Stack delta = -3 // Outputs[3] // { // @00CE memory[stack[-1]:stack[-1] + stack[-2]] = msg.data[stack[-3]:stack[-3] + stack[-2]] // @00D5 memory[stack[-2] + stack[-1]:stack[-2] + stack[-1] + 0x20] = 0x00 // @00D6 stack[-4] = stack[-2] + stack[-1] // } // Block ends with unconditional jump to stack[-4] 00DA FE *ASSERT 00DB A2 LOG2 00DC 64 PUSH5 0x6970667358 00E2 22 22 00E3 12 SLT 00E4 20 SHA3 00E5 20 SHA3 00E6 52 MSTORE 00E7 E9 E9 00E8 16 AND 00E9 E9 E9 00EA 81 DUP2 00EB 48 BASEFEE 00EC 46 CHAINID 00ED A7 A7 00EE 27 27 00EF EC EC 00F0 AE AE 00F1 B7 B7 00F2 8C DUP13 00F3 4F 4F 00F4 D8 D8 00F5 78 PUSH25 0xe14f6bae2c9f0706bc21a1a01e885364736f6c634300080700 010F 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]