Online Solidity Decompiler

« Decompile another contract

Address

0xf232a0c5c2db1390bad71c886fd7844d5ca42603 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_0091(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 & 0x3e75ba25fa88011b2cb7a6c9309d2701eb274486; var var6 = 0x38; var var7 = var0; var var8 = var1; var var9 = memory[0x40:0x60]; var6 = func_0091(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_0084: 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_0084; } else { revert(memory[0x00:0x00]); } } } function func_0091(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 0x3e75ba25fa88011b2cb7a6c9309d2701eb274486 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 0x91 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 & 0x3e75ba25fa88011b2cb7a6c9309d2701eb274486 // @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 0x0091, returns to 0x0038 label_0038: // Incoming return from call to 0x0091 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 0x84 007F 57 *JUMPI // Stack delta = -3 // Outputs[2] // { // @0078 stack[-4] = 0x60 // @007A stack[-5] = stack[-3] // } // Block ends with conditional jump to 0x0084, if stack[-3] label_0080: // Incoming jump from 0x007F, if not stack[-3] // Incoming jump from 0x007F, if not stack[-3] // Inputs[1] { @0083 memory[0x00:0x00] } 0080 60 PUSH1 0x00 0082 80 DUP1 0083 FD *REVERT // Stack delta = +0 // Outputs[1] { @0083 revert(memory[0x00:0x00]); } // Block terminates label_0084: // Incoming jump from 0x007F, if stack[-3] // Incoming jump from 0x007F, if stack[-3] // Inputs[5] // { // @0085 stack[-1] // @0086 memory[stack[-1]:stack[-1] + 0x20] // @0087 stack[-5] // @008C stack[-4] // @0090 memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]] // } 0084 5B JUMPDEST 0085 80 DUP1 0086 51 MLOAD 0087 94 SWAP5 0088 50 POP 0089 60 PUSH1 0x20 008B 01 ADD 008C 92 SWAP3 008D 50 POP 008E 50 POP 008F 50 POP 0090 F3 *RETURN // Stack delta = -5 // Outputs[1] { @0090 return memory[0x20 + stack[-1]:0x20 + stack[-1] + memory[stack[-1]:stack[-1] + 0x20]]; } // Block terminates label_0091: // Incoming call from 0x0037, returns to 0x0038 // Inputs[5] // { // @0092 stack[-2] // @0093 stack[-3] // @0094 stack[-1] // @0095 msg.data[stack[-3]:stack[-3] + stack[-2]] // @009D stack[-4] // } 0091 5B JUMPDEST 0092 81 DUP2 0093 83 DUP4 0094 82 DUP3 0095 37 CALLDATACOPY 0096 60 PUSH1 0x00 0098 91 SWAP2 0099 01 ADD 009A 90 SWAP1 009B 81 DUP2 009C 52 MSTORE 009D 91 SWAP2 009E 90 SWAP1 009F 50 POP 00A0 56 *JUMP // Stack delta = -3 // Outputs[3] // { // @0095 memory[stack[-1]:stack[-1] + stack[-2]] = msg.data[stack[-3]:stack[-3] + stack[-2]] // @009C memory[stack[-2] + stack[-1]:stack[-2] + stack[-1] + 0x20] = 0x00 // @009D stack[-4] = stack[-2] + stack[-1] // } // Block ends with unconditional jump to stack[-4] 00A1 FE *ASSERT 00A2 A2 LOG2 00A3 64 PUSH5 0x6970667358 00A9 22 22 00AA 12 SLT 00AB 20 SHA3 00AC B8 B8 00AD CA CA 00AE 35 CALLDATALOAD 00AF 43 NUMBER 00B0 C3 C3 00B1 9B SWAP12 00B2 EB EB 00B3 4D 4D 00B4 8D DUP14 00B5 E4 E4 00B6 54 SLOAD 00B7 EF EF 00B8 EE EE 00B9 8F DUP16 00BA E8 E8 00BB 62 PUSH3 0x85e8d6 00BF F2 CALLCODE 00C0 EF EF 00C1 46 CHAINID 00C2 B7 B7 00C3 14 EQ 00C4 A6 A6 00C5 02 MUL 00C6 46 CHAINID 00C7 7A PUSH27 0x3a6852d264736f6c634300080d0033
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]