Online Solidity Decompiler

« Decompile another contract

Address

0x3ffd2fae14f5c7eeb93f5b5894767f1784c40a3c [etherscan.io | etherchain.org]

Public Methods

No public methods detected.

Internal Methods

func_00A5() 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; if (msg.data.length >= 0x04) { var0 = msg.data[0x00:0x20] >> 0xe0; if (var0 != 0x5c60da1b) { goto label_0031; } var1 = msg.value; if (var1) { revert(memory[0x00:0x00]); } var1 = 0x004e; var1 = func_00A5(); var temp3 = memory[0x40:0x60]; memory[temp3:temp3 + 0x20] = var1 & (0x01 << 0xa0) - 0x01; var temp4 = memory[0x40:0x60]; return memory[temp4:temp4 + (temp3 + 0x20) - temp4]; } else if (msg.data.length) { label_0031: var var0 = 0x002f; label_006A: var var1 = 0x00a3; var var2 = storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] & (0x01 << 0xa0) - 0x01; var temp0 = msg.data.length; memory[0x00:0x00 + temp0] = msg.data[0x00:0x00 + temp0]; var temp1; temp1, memory[0x00:0x00] = address(var2).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]); var temp2 = returndata.length; memory[0x00:0x00 + temp2] = returndata[0x00:0x00 + temp2]; if (!temp1) { revert(memory[0x00:0x00 + returndata.length]); } else { return memory[0x00:0x00 + returndata.length]; } } else { var0 = 0x002f; goto label_006A; } } function func_00A5() returns (var r0) { var var0 = 0x00; var var1 = storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] & (0x01 << 0xa0) - 0x01; return var1; } }

Disassembly

label_0000: // Inputs[1] { @0007 msg.data.length } 0000 60 PUSH1 0x80 0002 60 PUSH1 0x40 0004 52 MSTORE 0005 60 PUSH1 0x04 0007 36 CALLDATASIZE 0008 10 LT 0009 61 PUSH2 0x0022 000C 57 *JUMPI // Stack delta = +0 // Outputs[1] { @0004 memory[0x40:0x60] = 0x80 } // Block ends with conditional jump to 0x0022, if msg.data.length < 0x04 label_000D: // Incoming jump from 0x000C, if not msg.data.length < 0x04 // Inputs[1] { @000F msg.data[0x00:0x20] } 000D 60 PUSH1 0x00 000F 35 CALLDATALOAD 0010 60 PUSH1 0xe0 0012 1C SHR 0013 80 DUP1 0014 63 PUSH4 0x5c60da1b 0019 14 EQ 001A 61 PUSH2 0x0039 001D 57 *JUMPI // Stack delta = +1 // Outputs[1] { @0012 stack[0] = msg.data[0x00:0x20] >> 0xe0 } // Block ends with conditional jump to 0x0039, if 0x5c60da1b == msg.data[0x00:0x20] >> 0xe0 label_001E: // Incoming jump from 0x001D, if not 0x5c60da1b == msg.data[0x00:0x20] >> 0xe0 001E 61 PUSH2 0x0031 0021 56 *JUMP // Stack delta = +0 // Block ends with unconditional jump to 0x0031 label_0022: // Incoming jump from 0x000C, if msg.data.length < 0x04 // Inputs[1] { @0023 msg.data.length } 0022 5B JUMPDEST 0023 36 CALLDATASIZE 0024 61 PUSH2 0x0031 0027 57 *JUMPI // Stack delta = +0 // Block ends with conditional jump to 0x0031, if msg.data.length label_0028: // Incoming jump from 0x0027, if not msg.data.length 0028 61 PUSH2 0x002f 002B 61 PUSH2 0x006a 002E 56 *JUMP // Stack delta = +1 // Outputs[1] { @0028 stack[0] = 0x002f } // Block ends with unconditional jump to 0x006a 002F 5B JUMPDEST 0030 00 *STOP label_0031: // Incoming jump from 0x0021 // Incoming jump from 0x0027, if msg.data.length 0031 5B JUMPDEST 0032 61 PUSH2 0x002f 0035 61 PUSH2 0x006a 0038 56 *JUMP // Stack delta = +1 // Outputs[1] { @0032 stack[0] = 0x002f } // Block ends with unconditional jump to 0x006a label_0039: // Incoming jump from 0x001D, if 0x5c60da1b == msg.data[0x00:0x20] >> 0xe0 // Inputs[1] { @003A msg.value } 0039 5B JUMPDEST 003A 34 CALLVALUE 003B 80 DUP1 003C 15 ISZERO 003D 61 PUSH2 0x0045 0040 57 *JUMPI // Stack delta = +1 // Outputs[1] { @003A stack[0] = msg.value } // Block ends with conditional jump to 0x0045, if !msg.value label_0041: // Incoming jump from 0x0040, if not !msg.value // Inputs[1] { @0044 memory[0x00:0x00] } 0041 60 PUSH1 0x00 0043 80 DUP1 0044 FD *REVERT // Stack delta = +0 // Outputs[1] { @0044 revert(memory[0x00:0x00]); } // Block terminates label_0045: // Incoming jump from 0x0040, if !msg.value 0045 5B JUMPDEST 0046 50 POP 0047 61 PUSH2 0x004e 004A 61 PUSH2 0x00a5 004D 56 *JUMP // Stack delta = +0 // Outputs[1] { @0047 stack[-1] = 0x004e } // Block ends with call to 0x00a5, returns to 0x004E label_004E: // Incoming return from call to 0x00A5 at 0x004D // Inputs[4] // { // @0051 memory[0x40:0x60] // @005B stack[-1] // @0064 memory[0x40:0x60] // @0069 memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x20 + memory[0x40:0x60]) - memory[0x40:0x60]] // } 004E 5B JUMPDEST 004F 60 PUSH1 0x40 0051 51 MLOAD 0052 60 PUSH1 0x01 0054 60 PUSH1 0x01 0056 60 PUSH1 0xa0 0058 1B SHL 0059 03 SUB 005A 90 SWAP1 005B 91 SWAP2 005C 16 AND 005D 81 DUP2 005E 52 MSTORE 005F 60 PUSH1 0x20 0061 01 ADD 0062 60 PUSH1 0x40 0064 51 MLOAD 0065 80 DUP1 0066 91 SWAP2 0067 03 SUB 0068 90 SWAP1 0069 F3 *RETURN // Stack delta = -1 // Outputs[2] // { // @005E memory[memory[0x40:0x60]:memory[0x40:0x60] + 0x20] = stack[-1] & (0x01 << 0xa0) - 0x01 // @0069 return memory[memory[0x40:0x60]:memory[0x40:0x60] + (0x20 + memory[0x40:0x60]) - memory[0x40:0x60]]; // } // Block terminates label_006A: // Incoming jump from 0x002E // Incoming jump from 0x0038 // Inputs[1] { @0092 storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] } 006A 5B JUMPDEST 006B 61 PUSH2 0x00a3 006E 61 PUSH2 0x009e 0071 7F PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 0092 54 SLOAD 0093 60 PUSH1 0x01 0095 60 PUSH1 0x01 0097 60 PUSH1 0xa0 0099 1B SHL 009A 03 SUB 009B 16 AND 009C 90 SWAP1 009D 56 *JUMP // Stack delta = +2 // Outputs[2] // { // @006B stack[0] = 0x00a3 // @009C stack[1] = (0x01 << 0xa0) - 0x01 & storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] // } // Block ends with unconditional jump to 0x009e label_009E: // Incoming jump from 0x009D 009E 5B JUMPDEST 009F 61 PUSH2 0x010c 00A2 56 *JUMP // Stack delta = +0 // Block ends with unconditional jump to 0x010c 00A3 5B JUMPDEST 00A4 56 *JUMP label_00A5: // Incoming call from 0x004D, returns to 0x004E // Inputs[1] { @00CC storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] } 00A5 5B JUMPDEST 00A6 60 PUSH1 0x00 00A8 61 PUSH2 0x00d8 00AB 7F PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00CC 54 SLOAD 00CD 60 PUSH1 0x01 00CF 60 PUSH1 0x01 00D1 60 PUSH1 0xa0 00D3 1B SHL 00D4 03 SUB 00D5 16 AND 00D6 90 SWAP1 00D7 56 *JUMP // Stack delta = +2 // Outputs[2] // { // @00A6 stack[0] = 0x00 // @00D6 stack[1] = (0x01 << 0xa0) - 0x01 & storage[0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc] // } // Block ends with unconditional jump to 0x00d8 label_00D8: // Incoming jump from 0x00D7 // Inputs[3] // { // @00D9 stack[-2] // @00D9 stack[-1] // @00DB stack[-3] // } 00D8 5B JUMPDEST 00D9 90 SWAP1 00DA 50 POP 00DB 90 SWAP1 00DC 56 *JUMP // Stack delta = -2 // Outputs[1] { @00DB stack[-3] = stack[-1] } // Block ends with unconditional jump to stack[-3] 00DD 5B JUMPDEST 00DE 90 SWAP1 00DF 56 *JUMP 00E0 5B JUMPDEST 00E1 60 PUSH1 0x60 00E3 61 PUSH2 0x0105 00E6 83 DUP4 00E7 83 DUP4 00E8 60 PUSH1 0x40 00EA 51 MLOAD 00EB 80 DUP1 00EC 60 PUSH1 0x60 00EE 01 ADD 00EF 60 PUSH1 0x40 00F1 52 MSTORE 00F2 80 DUP1 00F3 60 PUSH1 0x27 00F5 81 DUP2 00F6 52 MSTORE 00F7 60 PUSH1 0x20 00F9 01 ADD 00FA 61 PUSH2 0x02cc 00FD 60 PUSH1 0x27 00FF 91 SWAP2 0100 39 CODECOPY 0101 61 PUSH2 0x0130 0104 56 *JUMP 0105 5B JUMPDEST 0106 93 SWAP4 0107 92 SWAP3 0108 50 POP 0109 50 POP 010A 50 POP 010B 56 *JUMP label_010C: // Incoming jump from 0x00A2 // Inputs[9] // { // @010D msg.data.length // @0111 msg.data[0x00:0x00 + msg.data.length] // @0115 msg.data.length // @0118 stack[-1] // @0119 msg.gas // @011A address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @011A memory[0x00:0x00 + msg.data.length] // @011B returndata.length // @011F returndata[0x00:0x00 + returndata.length] // } 010C 5B JUMPDEST 010D 36 CALLDATASIZE 010E 60 PUSH1 0x00 0110 80 DUP1 0111 37 CALLDATACOPY 0112 60 PUSH1 0x00 0114 80 DUP1 0115 36 CALLDATASIZE 0116 60 PUSH1 0x00 0118 84 DUP5 0119 5A GAS 011A F4 DELEGATECALL 011B 3D RETURNDATASIZE 011C 60 PUSH1 0x00 011E 80 DUP1 011F 3E RETURNDATACOPY 0120 80 DUP1 0121 80 DUP1 0122 15 ISZERO 0123 61 PUSH2 0x012b 0126 57 *JUMPI // Stack delta = +2 // Outputs[5] // { // @0111 memory[0x00:0x00 + msg.data.length] = msg.data[0x00:0x00 + msg.data.length] // @011A memory[0x00:0x00] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @011A stack[0] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // @011F memory[0x00:0x00 + returndata.length] = returndata[0x00:0x00 + returndata.length] // @0120 stack[1] = address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // } // Block ends with conditional jump to 0x012b, if !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) label_0127: // Incoming jump from 0x0126, if not !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // Inputs[2] // { // @0127 returndata.length // @012A memory[0x00:0x00 + returndata.length] // } 0127 3D RETURNDATASIZE 0128 60 PUSH1 0x00 012A F3 *RETURN // Stack delta = +0 // Outputs[1] { @012A return memory[0x00:0x00 + returndata.length]; } // Block terminates label_012B: // Incoming jump from 0x0126, if !address(stack[-1]).delegatecall.gas(msg.gas)(memory[0x00:0x00 + msg.data.length]) // Inputs[2] // { // @012C returndata.length // @012F memory[0x00:0x00 + returndata.length] // } 012B 5B JUMPDEST 012C 3D RETURNDATASIZE 012D 60 PUSH1 0x00 012F FD *REVERT // Stack delta = +0 // Outputs[1] { @012F revert(memory[0x00:0x00 + returndata.length]); } // Block terminates 0130 5B JUMPDEST 0131 60 PUSH1 0x60 0133 60 PUSH1 0x00 0135 80 DUP1 0136 85 DUP6 0137 60 PUSH1 0x01 0139 60 PUSH1 0x01 013B 60 PUSH1 0xa0 013D 1B SHL 013E 03 SUB 013F 16 AND 0140 85 DUP6 0141 60 PUSH1 0x40 0143 51 MLOAD 0144 61 PUSH2 0x014d 0147 91 SWAP2 0148 90 SWAP1 0149 61 PUSH2 0x027c 014C 56 *JUMP 014D 5B JUMPDEST 014E 60 PUSH1 0x00 0150 60 PUSH1 0x40 0152 51 MLOAD 0153 80 DUP1 0154 83 DUP4 0155 03 SUB 0156 81 DUP2 0157 85 DUP6 0158 5A GAS 0159 F4 DELEGATECALL 015A 91 SWAP2 015B 50 POP 015C 50 POP 015D 3D RETURNDATASIZE 015E 80 DUP1 015F 60 PUSH1 0x00 0161 81 DUP2 0162 14 EQ 0163 61 PUSH2 0x0188 0166 57 *JUMPI 0167 60 PUSH1 0x40 0169 51 MLOAD 016A 91 SWAP2 016B 50 POP 016C 60 PUSH1 0x1f 016E 19 NOT 016F 60 PUSH1 0x3f 0171 3D RETURNDATASIZE 0172 01 ADD 0173 16 AND 0174 82 DUP3 0175 01 ADD 0176 60 PUSH1 0x40 0178 52 MSTORE 0179 3D RETURNDATASIZE 017A 82 DUP3 017B 52 MSTORE 017C 3D RETURNDATASIZE 017D 60 PUSH1 0x00 017F 60 PUSH1 0x20 0181 84 DUP5 0182 01 ADD 0183 3E RETURNDATACOPY 0184 61 PUSH2 0x018d 0187 56 *JUMP 0188 5B JUMPDEST 0189 60 PUSH1 0x60 018B 91 SWAP2 018C 50 POP 018D 5B JUMPDEST 018E 50 POP 018F 91 SWAP2 0190 50 POP 0191 91 SWAP2 0192 50 POP 0193 61 PUSH2 0x019e 0196 86 DUP7 0197 83 DUP4 0198 83 DUP4 0199 87 DUP8 019A 61 PUSH2 0x01a8 019D 56 *JUMP 019E 5B JUMPDEST 019F 96 SWAP7 01A0 95 SWAP6 01A1 50 POP 01A2 50 POP 01A3 50 POP 01A4 50 POP 01A5 50 POP 01A6 50 POP 01A7 56 *JUMP 01A8 5B JUMPDEST 01A9 60 PUSH1 0x60 01AB 83 DUP4 01AC 15 ISZERO 01AD 61 PUSH2 0x021c 01B0 57 *JUMPI 01B1 82 DUP3 01B2 51 MLOAD 01B3 60 PUSH1 0x00 01B5 03 SUB 01B6 61 PUSH2 0x0215 01B9 57 *JUMPI 01BA 60 PUSH1 0x01 01BC 60 PUSH1 0x01 01BE 60 PUSH1 0xa0 01C0 1B SHL 01C1 03 SUB 01C2 85 DUP6 01C3 16 AND 01C4 3B EXTCODESIZE 01C5 61 PUSH2 0x0215 01C8 57 *JUMPI 01C9 60 PUSH1 0x40 01CB 51 MLOAD 01CC 62 PUSH3 0x461bcd 01D0 60 PUSH1 0xe5 01D2 1B SHL 01D3 81 DUP2 01D4 52 MSTORE 01D5 60 PUSH1 0x20 01D7 60 PUSH1 0x04 01D9 82 DUP3 01DA 01 ADD 01DB 52 MSTORE 01DC 60 PUSH1 0x1d 01DE 60 PUSH1 0x24 01E0 82 DUP3 01E1 01 ADD 01E2 52 MSTORE 01E3 7F PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 0204 60 PUSH1 0x44 0206 82 DUP3 0207 01 ADD 0208 52 MSTORE 0209 60 PUSH1 0x64 020B 01 ADD 020C 5B JUMPDEST 020D 60 PUSH1 0x40 020F 51 MLOAD 0210 80 DUP1 0211 91 SWAP2 0212 03 SUB 0213 90 SWAP1 0214 FD *REVERT 0215 5B JUMPDEST 0216 50 POP 0217 81 DUP2 0218 61 PUSH2 0x0226 021B 56 *JUMP 021C 5B JUMPDEST 021D 61 PUSH2 0x0226 0220 83 DUP4 0221 83 DUP4 0222 61 PUSH2 0x022e 0225 56 *JUMP 0226 5B JUMPDEST 0227 94 SWAP5 0228 93 SWAP4 0229 50 POP 022A 50 POP 022B 50 POP 022C 50 POP 022D 56 *JUMP 022E 5B JUMPDEST 022F 81 DUP2 0230 51 MLOAD 0231 15 ISZERO 0232 61 PUSH2 0x023e 0235 57 *JUMPI 0236 81 DUP2 0237 51 MLOAD 0238 80 DUP1 0239 83 DUP4 023A 60 PUSH1 0x20 023C 01 ADD 023D FD *REVERT 023E 5B JUMPDEST 023F 80 DUP1 0240 60 PUSH1 0x40 0242 51 MLOAD 0243 62 PUSH3 0x461bcd 0247 60 PUSH1 0xe5 0249 1B SHL 024A 81 DUP2 024B 52 MSTORE 024C 60 PUSH1 0x04 024E 01 ADD 024F 61 PUSH2 0x020c 0252 91 SWAP2 0253 90 SWAP1 0254 61 PUSH2 0x0298 0257 56 *JUMP 0258 5B JUMPDEST 0259 60 PUSH1 0x00 025B 5B JUMPDEST 025C 83 DUP4 025D 81 DUP2 025E 10 LT 025F 15 ISZERO 0260 61 PUSH2 0x0273 0263 57 *JUMPI 0264 81 DUP2 0265 81 DUP2 0266 01 ADD 0267 51 MLOAD 0268 83 DUP4 0269 82 DUP3 026A 01 ADD 026B 52 MSTORE 026C 60 PUSH1 0x20 026E 01 ADD 026F 61 PUSH2 0x025b 0272 56 *JUMP 0273 5B JUMPDEST 0274 50 POP 0275 50 POP 0276 60 PUSH1 0x00 0278 91 SWAP2 0279 01 ADD 027A 52 MSTORE 027B 56 *JUMP 027C 5B JUMPDEST 027D 60 PUSH1 0x00 027F 82 DUP3 0280 51 MLOAD 0281 61 PUSH2 0x028e 0284 81 DUP2 0285 84 DUP5 0286 60 PUSH1 0x20 0288 87 DUP8 0289 01 ADD 028A 61 PUSH2 0x0258 028D 56 *JUMP 028E 5B JUMPDEST 028F 91 SWAP2 0290 90 SWAP1 0291 91 SWAP2 0292 01 ADD 0293 92 SWAP3 0294 91 SWAP2 0295 50 POP 0296 50 POP 0297 56 *JUMP 0298 5B JUMPDEST 0299 60 PUSH1 0x20 029B 81 DUP2 029C 52 MSTORE 029D 60 PUSH1 0x00 029F 82 DUP3 02A0 51 MLOAD 02A1 80 DUP1 02A2 60 PUSH1 0x20 02A4 84 DUP5 02A5 01 ADD 02A6 52 MSTORE 02A7 61 PUSH2 0x02b7 02AA 81 DUP2 02AB 60 PUSH1 0x40 02AD 85 DUP6 02AE 01 ADD 02AF 60 PUSH1 0x20 02B1 87 DUP8 02B2 01 ADD 02B3 61 PUSH2 0x0258 02B6 56 *JUMP 02B7 5B JUMPDEST 02B8 60 PUSH1 0x1f 02BA 01 ADD 02BB 60 PUSH1 0x1f 02BD 19 NOT 02BE 16 AND 02BF 91 SWAP2 02C0 90 SWAP1 02C1 91 SWAP2 02C2 01 ADD 02C3 60 PUSH1 0x40 02C5 01 ADD 02C6 92 SWAP3 02C7 91 SWAP2 02C8 50 POP 02C9 50 POP 02CA 56 *JUMP 02CB FE *ASSERT 02CC 41 COINBASE 02CD 64 PUSH5 0x6472657373 02D3 3A GASPRICE 02D4 20 SHA3 02D5 6C PUSH13 0x6f772d6c6576656c2064656c65 02E3 67 PUSH8 0x6174652063616c6c 02EC 20 SHA3 02ED 66 PUSH7 0x61696c6564a264 02F5 69 PUSH10 0x70667358221220ee0015 0300 12 SLT 0301 5B JUMPDEST 0302 19 NOT 0303 65 PUSH6 0x56307e456be2 030A 1A BYTE 030B 3D RETURNDATASIZE 030C D1 D1 030D 7A PUSH27 0x7177aa0716f9a05928b0431b107caa64736f6c63430008110033
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]