Online Solidity Decompiler

« Decompile another contract

Address

0x4e8f6b53224ac8eee9a9311ed94ae6bdc09a9772 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_0044(arg0) returns (r0)
func_0049(arg0) returns (r0)
func_0052(arg0, arg1)
func_005F(arg0, arg1) 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 = msg.value; if (var0) { revert(memory[0x00:0x00]); } if (msg.data.length < 0x04) { revert(memory[0x00:0x00]); } var0 = msg.data[0x00:0x20] >> 0xe0; if (var0 != 0x3fa4f245) { revert(memory[0x00:0x00]); } var var1 = 0x30; var var2 = func_0044(); var temp0 = var2; var2 = 0x3b; var var3 = temp0; var var4 = memory[0x40:0x60]; var2 = func_005F(var3, var4); var temp1 = memory[0x40:0x60]; return memory[temp1:temp1 + var2 - temp1]; } function func_0044() returns (var r0) { return storage[0x00]; } function func_0049(var arg0) returns (var r0) { return arg0; } function func_0052(var arg0, var arg1) { var var0 = 0x59; var var1 = arg1; var0 = func_0049(var1); memory[arg0:arg0 + 0x20] = var0; } function func_005F(var arg0, var arg1) returns (var r0) { var temp0 = arg1; var var0 = temp0 + 0x20; var var1 = 0x70; var var2 = temp0; var var3 = arg0; func_0052(var2, var3); return var0; } }

Disassembly

label_0000: // Inputs[1] { @0005 msg.value } 0000 60 PUSH1 0x80 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 34 CALLVALUE 0006 80 DUP1 0007 15 ISZERO 0008 60 PUSH1 0x0e 000A 57 *JUMPI // Stack delta = +1 // Outputs[2] // { // @0004 memory[0x40:0x60] = 0x80 // @0005 stack[0] = msg.value // } // Block ends with conditional jump to 0x000e, if !msg.value label_000B: // Incoming jump from 0x000A, if not !msg.value // Inputs[1] { @000D memory[0x00:0x00] } 000B 5F PUSH0 000C 80 DUP1 000D FD *REVERT // Stack delta = +0 // Outputs[1] { @000D revert(memory[0x00:0x00]); } // Block terminates label_000E: // Incoming jump from 0x000A, if !msg.value // Inputs[1] { @0012 msg.data.length } 000E 5B JUMPDEST 000F 50 POP 0010 60 PUSH1 0x04 0012 36 CALLDATASIZE 0013 10 LT 0014 60 PUSH1 0x26 0016 57 *JUMPI // Stack delta = -1 // Block ends with conditional jump to 0x0026, if msg.data.length < 0x04 label_0017: // Incoming jump from 0x0016, if not msg.data.length < 0x04 // Inputs[1] { @0018 msg.data[0x00:0x20] } 0017 5F PUSH0 0018 35 CALLDATALOAD 0019 60 PUSH1 0xe0 001B 1C SHR 001C 80 DUP1 001D 63 PUSH4 0x3fa4f245 0022 14 EQ 0023 60 PUSH1 0x2a 0025 57 *JUMPI // Stack delta = +1 // Outputs[1] { @001B stack[0] = msg.data[0x00:0x20] >> 0xe0 } // Block ends with conditional jump to 0x002a, if 0x3fa4f245 == msg.data[0x00:0x20] >> 0xe0 label_0026: // Incoming jump from 0x0025, if not 0x3fa4f245 == msg.data[0x00:0x20] >> 0xe0 // Incoming jump from 0x0016, if msg.data.length < 0x04 // Inputs[1] { @0029 memory[0x00:0x00] } 0026 5B JUMPDEST 0027 5F PUSH0 0028 80 DUP1 0029 FD *REVERT // Stack delta = +0 // Outputs[1] { @0029 revert(memory[0x00:0x00]); } // Block terminates label_002A: // Incoming jump from 0x0025, if 0x3fa4f245 == msg.data[0x00:0x20] >> 0xe0 002A 5B JUMPDEST 002B 60 PUSH1 0x30 002D 60 PUSH1 0x44 002F 56 *JUMP // Stack delta = +1 // Outputs[1] { @002B stack[0] = 0x30 } // Block ends with call to 0x0044, returns to 0x0030 label_0030: // Incoming return from call to 0x0044 at 0x002F // Inputs[2] // { // @0033 memory[0x40:0x60] // @0036 stack[-1] // } 0030 5B JUMPDEST 0031 60 PUSH1 0x40 0033 51 MLOAD 0034 60 PUSH1 0x3b 0036 91 SWAP2 0037 90 SWAP1 0038 60 PUSH1 0x5f 003A 56 *JUMP // Stack delta = +2 // Outputs[3] // { // @0036 stack[-1] = 0x3b // @0037 stack[1] = memory[0x40:0x60] // @0037 stack[0] = stack[-1] // } // Block ends with call to 0x005f, returns to 0x003B label_003B: // Incoming return from call to 0x005F at 0x003A // Inputs[3] // { // @003E memory[0x40:0x60] // @0040 stack[-1] // @0043 memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]] // } 003B 5B JUMPDEST 003C 60 PUSH1 0x40 003E 51 MLOAD 003F 80 DUP1 0040 91 SWAP2 0041 03 SUB 0042 90 SWAP1 0043 F3 *RETURN // Stack delta = -1 // Outputs[1] { @0043 return memory[memory[0x40:0x60]:memory[0x40:0x60] + stack[-1] - memory[0x40:0x60]]; } // Block terminates label_0044: // Incoming call from 0x002F, returns to 0x0030 // Inputs[2] // { // @0046 storage[0x00] // @0047 stack[-1] // } 0044 5B JUMPDEST 0045 5F PUSH0 0046 54 SLOAD 0047 81 DUP2 0048 56 *JUMP // Stack delta = +1 // Outputs[1] { @0046 stack[0] = storage[0x00] } // Block ends with unconditional jump to stack[-1] label_0049: // Incoming call from 0x0058, returns to 0x0059 // Inputs[2] // { // @004B stack[-1] // @004E stack[-2] // } 0049 5B JUMPDEST 004A 5F PUSH0 004B 81 DUP2 004C 90 SWAP1 004D 50 POP 004E 91 SWAP2 004F 90 SWAP1 0050 50 POP 0051 56 *JUMP // Stack delta = -1 // Outputs[1] { @004E stack[-2] = stack[-1] } // Block ends with unconditional jump to stack[-2] label_0052: // Incoming call from 0x006F, returns to 0x0070 // Inputs[1] { @0055 stack[-1] } 0052 5B JUMPDEST 0053 60 PUSH1 0x59 0055 81 DUP2 0056 60 PUSH1 0x49 0058 56 *JUMP // Stack delta = +2 // Outputs[2] // { // @0053 stack[0] = 0x59 // @0055 stack[1] = stack[-1] // } // Block ends with call to 0x0049, returns to 0x0059 label_0059: // Incoming return from call to 0x0049 at 0x0058 // Inputs[3] // { // @005A stack[-3] // @005B stack[-1] // @005E stack[-4] // } 0059 5B JUMPDEST 005A 82 DUP3 005B 52 MSTORE 005C 50 POP 005D 50 POP 005E 56 *JUMP // Stack delta = -4 // Outputs[1] { @005B memory[stack[-3]:stack[-3] + 0x20] = stack[-1] } // Block ends with unconditional jump to stack[-4] label_005F: // Incoming call from 0x003A, returns to 0x003B // Inputs[2] // { // @0063 stack[-1] // @006C stack[-2] // } 005F 5B JUMPDEST 0060 5F PUSH0 0061 60 PUSH1 0x20 0063 82 DUP3 0064 01 ADD 0065 90 SWAP1 0066 50 POP 0067 60 PUSH1 0x70 0069 5F PUSH0 006A 83 DUP4 006B 01 ADD 006C 84 DUP5 006D 60 PUSH1 0x52 006F 56 *JUMP // Stack delta = +4 // Outputs[4] // { // @0065 stack[0] = stack[-1] + 0x20 // @0067 stack[1] = 0x70 // @006B stack[2] = stack[-1] + 0x00 // @006C stack[3] = stack[-2] // } // Block ends with call to 0x0052, returns to 0x0070 label_0070: // Incoming return from call to 0x0052 at 0x006F // Inputs[3] // { // @0071 stack[-1] // @0071 stack[-4] // @0072 stack[-3] // } 0070 5B JUMPDEST 0071 92 SWAP3 0072 91 SWAP2 0073 50 POP 0074 50 POP 0075 56 *JUMP // Stack delta = -3 // Outputs[1] { @0071 stack[-4] = stack[-1] } // Block ends with unconditional jump to stack[-4] 0076 FE *ASSERT 0077 A2 LOG2 0078 64 PUSH5 0x6970667358 007E 22 22 007F 12 SLT 0080 20 SHA3 0081 16 AND 0082 65 PUSH6 0x2cbae43155ec 0089 4B 4B 008A 32 ORIGIN 008B 3F EXTCODEHASH 008C 01 ADD 008D A6 A6 008E EB EB 008F 52 MSTORE 0090 E5 E5 0091 C0 C0 0092 E4 E4 0093 5D 5D 0094 DF DF 0095 EC EC 0096 9F SWAP16 0097 2C 2C 0098 3B EXTCODESIZE 0099 51 MLOAD 009A 78 PUSH25 0x33e1d50d6b4364736f6c63430008160033
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]