Online Solidity Decompiler

« Decompile another contract

Address

0x66d796e7ae8608bba361c97ba7682689cc5bf320 [etherscan.io | etherchain.org]

Public Methods

Method names cached from 4byte.directory.
0xb19eaf1e Unknown

Internal Methods

func_005C(arg0) returns (r0)

Decompilation

contract Contract { function main() { memory[0x40:0x60] = 0x60; var var0 = msg.data[0x00:0x20] / 0x0100000000000000000000000000000000000000000000000000000000; if (var0 != 0xb19eaf1e) { stop(); } var var1 = 0x46; var var2 = msg.data[0x04:0x24]; var1 = func_005C(var2); var temp0 = memory[0x40:0x60]; memory[temp0:temp0 + 0x20] = var1; var temp1 = memory[0x40:0x60]; return memory[temp1:temp1 + (temp0 + 0x20) - temp1]; } function func_005C(var arg0) returns (var r0) { var var0 = 0x00; var var1 = 0x02; if (var1 * var1 > arg0) { label_008D: var0 = arg0; label_0094: return var0; } else { label_0070: if (arg0 % var1 != 0x00) { var1 = var1 + 0x01; var temp0 = var1; if (temp0 * temp0 > arg0) { goto label_008D; } else { goto label_0070; } } else { var0 = var1; goto label_0094; } } } }

Disassembly

label_0000: // Inputs[1] { @0007 msg.data[0x00:0x20] } 0000 60 PUSH1 0x60 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 60 PUSH1 0x00 0007 35 CALLDATALOAD 0008 7C PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0026 90 SWAP1 0027 04 DIV 0028 80 DUP1 0029 63 PUSH4 0xb19eaf1e 002E 14 EQ 002F 60 PUSH1 0x37 0031 57 *JUMPI // Stack delta = +1 // Outputs[2] // { // @0004 memory[0x40:0x60] = 0x60 // @0027 stack[0] = msg.data[0x00:0x20] / 0x0100000000000000000000000000000000000000000000000000000000 // } // Block ends with conditional jump to 0x0037, if 0xb19eaf1e == msg.data[0x00:0x20] / 0x0100000000000000000000000000000000000000000000000000000000 label_0032: // Incoming jump from 0x0031, if not 0xb19eaf1e == msg.data[0x00:0x20] / 0x0100000000000000000000000000000000000000000000000000000000 0032 60 PUSH1 0x35 0034 56 *JUMP // Stack delta = +0 // Block ends with unconditional jump to 0x0035 label_0035: // Incoming jump from 0x0034 0035 5B JUMPDEST 0036 00 *STOP // Stack delta = +0 // Outputs[1] { @0036 stop(); } // Block terminates label_0037: // Incoming jump from 0x0031, if 0xb19eaf1e == msg.data[0x00:0x20] / 0x0100000000000000000000000000000000000000000000000000000000 // Inputs[1] { @003D msg.data[0x04:0x24] } 0037 5B JUMPDEST 0038 60 PUSH1 0x46 003A 60 PUSH1 0x04 003C 80 DUP1 003D 35 CALLDATALOAD 003E 90 SWAP1 003F 60 PUSH1 0x20 0041 01 ADD 0042 50 POP 0043 60 PUSH1 0x5c 0045 56 *JUMP // Stack delta = +2 // Outputs[2] // { // @0038 stack[0] = 0x46 // @003E stack[1] = msg.data[0x04:0x24] // } // Block ends with call to 0x005c, returns to 0x0046 label_0046: // Incoming return from call to 0x005C at 0x0045 // Inputs[4] // { // @0049 memory[0x40:0x60] // @004B stack[-1] // @0056 memory[0x40:0x60] // @005B memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x20 + memory[0x40:0x60]) - memory[0x40:0x60]] // } 0046 5B JUMPDEST 0047 60 PUSH1 0x40 0049 51 MLOAD 004A 80 DUP1 004B 82 DUP3 004C 81 DUP2 004D 52 MSTORE 004E 60 PUSH1 0x20 0050 01 ADD 0051 91 SWAP2 0052 50 POP 0053 50 POP 0054 60 PUSH1 0x40 0056 51 MLOAD 0057 80 DUP1 0058 91 SWAP2 0059 03 SUB 005A 90 SWAP1 005B F3 *RETURN // Stack delta = -1 // Outputs[2] // { // @004D memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = stack[-1] // @005B return memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x20 + memory[0x40:0x60]) - memory[0x40:0x60]]; // } // Block terminates label_005C: // Incoming call from 0x0045, returns to 0x0046 // Inputs[1] { @0066 stack[-1] } 005C 5B JUMPDEST 005D 60 PUSH1 0x00 005F 60 PUSH1 0x00 0061 60 PUSH1 0x02 0063 90 SWAP1 0064 50 POP 0065 5B JUMPDEST 0066 82 DUP3 0067 81 DUP2 0068 82 DUP3 0069 02 MUL 006A 11 GT 006B 15 ISZERO 006C 15 ISZERO 006D 60 PUSH1 0x8d 006F 57 *JUMPI // Stack delta = +2 // Outputs[2] // { // @005D stack[0] = 0x00 // @0063 stack[1] = 0x02 // } // Block ends with conditional jump to 0x008d, if !!(0x02 * 0x02 > stack[-1]) label_0070: // Incoming jump from 0x006F, if not !!(0x02 * 0x02 > stack[-1]) // Incoming jump from 0x006F, if not !!(stack[-1] * stack[-1] > stack[-3]) // Inputs[2] // { // @0072 stack[-1] // @0073 stack[-3] // } 0070 60 PUSH1 0x00 0072 81 DUP2 0073 84 DUP5 0074 06 MOD 0075 14 EQ 0076 15 ISZERO 0077 60 PUSH1 0x80 0079 57 *JUMPI // Stack delta = +0 // Block ends with conditional jump to 0x0080, if !(stack[-3] % stack[-1] == 0x00) label_007A: // Incoming jump from 0x0079, if not !(stack[-3] % stack[-1] == 0x00) // Inputs[2] // { // @007A stack[-1] // @007B stack[-2] // } 007A 80 DUP1 007B 91 SWAP2 007C 50 POP 007D 60 PUSH1 0x94 007F 56 *JUMP // Stack delta = +0 // Outputs[1] { @007B stack[-2] = stack[-1] } // Block ends with unconditional jump to 0x0094 label_0080: // Incoming jump from 0x0079, if !(stack[-3] % stack[-1] == 0x00) // Inputs[1] { @0082 stack[-1] } 0080 5B JUMPDEST 0081 5B JUMPDEST 0082 80 DUP1 0083 80 DUP1 0084 60 PUSH1 0x01 0086 01 ADD 0087 91 SWAP2 0088 50 POP 0089 50 POP 008A 60 PUSH1 0x65 008C 56 *JUMP // Stack delta = +0 // Outputs[1] { @0087 stack[-1] = 0x01 + stack[-1] } // Block ends with unconditional jump to 0x0065 label_008D: // Incoming jump from 0x006F, if !!(0x02 * 0x02 > stack[-1]) // Incoming jump from 0x006F, if !!(stack[-1] * stack[-1] > stack[-3]) // Inputs[2] // { // @008E stack[-3] // @008F stack[-2] // } 008D 5B JUMPDEST 008E 82 DUP3 008F 91 SWAP2 0090 50 POP 0091 60 PUSH1 0x94 0093 56 *JUMP // Stack delta = +0 // Outputs[1] { @008F stack[-2] = stack[-3] } // Block ends with unconditional jump to 0x0094 label_0094: // Incoming jump from 0x007F // Incoming jump from 0x0093 // Inputs[3] // { // @0096 stack[-4] // @0096 stack[-2] // @0097 stack[-3] // } 0094 5B JUMPDEST 0095 50 POP 0096 91 SWAP2 0097 90 SWAP1 0098 50 POP 0099 56 *JUMP // Stack delta = -3 // Outputs[1] { @0096 stack[-4] = stack[-2] } // Block ends with unconditional jump to stack[-4]
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]