Online Solidity Decompiler

« Decompile another contract

Address

0xfbffef83b1c172fe3bc86c1ccb036ab9f3efcaf2 [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_0041(arg0, arg1)

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 != 0x804e1f0a) { revert(memory[0x00:0x00]); } var var1 = 0x6c; var var2 = 0x04; var var3 = msg.data.length - var2; if (var3 < 0x20) { revert(memory[0x00:0x00]); } func_0041(var2, var3); stop(); } function func_0041(var arg0, var arg1) { arg0 = msg.data[arg0:arg0 + 0x20] & 0xffffffffffffffffffffffffffffffffffffffff; storage[0x00] = arg0; } }

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 0x0f 000A 57 *JUMPI // Stack delta = +1 // Outputs[2] // { // @0004 memory[0x40:0x60] = 0x80 // @0005 stack[0] = msg.value // } // Block ends with conditional jump to 0x000f, if !msg.value label_000B: // Incoming jump from 0x000A, if not !msg.value // Inputs[1] { @000E memory[0x00:0x00] } 000B 60 PUSH1 0x00 000D 80 DUP1 000E FD *REVERT // Stack delta = +0 // Outputs[1] { @000E revert(memory[0x00:0x00]); } // Block terminates label_000F: // Incoming jump from 0x000A, if !msg.value // Inputs[1] { @0013 msg.data.length } 000F 5B JUMPDEST 0010 50 POP 0011 60 PUSH1 0x04 0013 36 CALLDATASIZE 0014 10 LT 0015 60 PUSH1 0x28 0017 57 *JUMPI // Stack delta = -1 // Block ends with conditional jump to 0x0028, if msg.data.length < 0x04 label_0018: // Incoming jump from 0x0017, if not msg.data.length < 0x04 // Inputs[1] { @001A msg.data[0x00:0x20] } 0018 60 PUSH1 0x00 001A 35 CALLDATALOAD 001B 60 PUSH1 0xe0 001D 1C SHR 001E 80 DUP1 001F 63 PUSH4 0x804e1f0a 0024 14 EQ 0025 60 PUSH1 0x2d 0027 57 *JUMPI // Stack delta = +1 // Outputs[1] { @001D stack[0] = msg.data[0x00:0x20] >> 0xe0 } // Block ends with conditional jump to 0x002d, if 0x804e1f0a == msg.data[0x00:0x20] >> 0xe0 label_0028: // Incoming jump from 0x0027, if not 0x804e1f0a == msg.data[0x00:0x20] >> 0xe0 // Incoming jump from 0x0017, if msg.data.length < 0x04 // Inputs[1] { @002C memory[0x00:0x00] } 0028 5B JUMPDEST 0029 60 PUSH1 0x00 002B 80 DUP1 002C FD *REVERT // Stack delta = +0 // Outputs[1] { @002C revert(memory[0x00:0x00]); } // Block terminates label_002D: // Incoming jump from 0x0027, if 0x804e1f0a == msg.data[0x00:0x20] >> 0xe0 // Inputs[1] { @0033 msg.data.length } 002D 5B JUMPDEST 002E 60 PUSH1 0x6c 0030 60 PUSH1 0x04 0032 80 DUP1 0033 36 CALLDATASIZE 0034 03 SUB 0035 60 PUSH1 0x20 0037 81 DUP2 0038 10 LT 0039 15 ISZERO 003A 60 PUSH1 0x41 003C 57 *JUMPI // Stack delta = +3 // Outputs[3] // { // @002E stack[0] = 0x6c // @0030 stack[1] = 0x04 // @0034 stack[2] = msg.data.length - 0x04 // } // Block ends with conditional call to 0x0041, returns to 0x006C, if !(msg.data.length - 0x04 < 0x20) label_003D: // Incoming jump from 0x003C, if not !(msg.data.length - 0x04 < 0x20) // Inputs[1] { @0040 memory[0x00:0x00] } 003D 60 PUSH1 0x00 003F 80 DUP1 0040 FD *REVERT // Stack delta = +0 // Outputs[1] { @0040 revert(memory[0x00:0x00]); } // Block terminates label_0041: // Incoming call from 0x003C, returns to 0x006C, if !(msg.data.length - 0x04 < 0x20) // Inputs[3] // { // @0042 stack[-2] // @0043 stack[-1] // @0047 msg.data[stack[-2]:stack[-2] + 0x20] // } 0041 5B JUMPDEST 0042 81 DUP2 0043 01 ADD 0044 90 SWAP1 0045 80 DUP1 0046 80 DUP1 0047 35 CALLDATALOAD 0048 73 PUSH20 0xffffffffffffffffffffffffffffffffffffffff 005D 16 AND 005E 90 SWAP1 005F 60 PUSH1 0x20 0061 01 ADD 0062 90 SWAP1 0063 92 SWAP3 0064 91 SWAP2 0065 90 SWAP1 0066 50 POP 0067 50 POP 0068 50 POP 0069 60 PUSH1 0x6e 006B 56 *JUMP // Stack delta = -1 // Outputs[1] { @0063 stack[-2] = 0xffffffffffffffffffffffffffffffffffffffff & msg.data[stack[-2]:stack[-2] + 0x20] } // Block ends with unconditional jump to 0x006e label_006C: // Incoming return from call to 0x0041 at 0x003C 006C 5B JUMPDEST 006D 00 *STOP // Stack delta = +0 // Outputs[1] { @006D stop(); } // Block terminates label_006E: // Incoming jump from 0x006B // Inputs[2] // { // @006F stack[-1] // @0074 stack[-2] // } 006E 5B JUMPDEST 006F 80 DUP1 0070 60 PUSH1 0x00 0072 55 SSTORE 0073 50 POP 0074 56 *JUMP // Stack delta = -2 // Outputs[1] { @0072 storage[0x00] = stack[-1] } // Block ends with unconditional jump to stack[-2] 0075 FE *ASSERT 0076 A2 LOG2 0077 64 PUSH5 0x6970667358 007D 22 22 007E 12 SLT 007F 20 SHA3 0080 11 GT 0081 AE AE 0082 86 DUP7 0083 FE *ASSERT 0084 3A GASPRICE 0085 7B PUSH28 0x3ec4954b21efbd3ab33baab7967abaa3195cf255ca79b30912f96473 00A2 6F PUSH16 0x6c63430007060033
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]