Online Solidity Decompiler

« Decompile another contract

Address

0x40f48526fdca9bc212e8150cc44491b1acf018da [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[-1] // @00D9 stack[-2] // @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 0x02c2 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 memory[0x00:0x00 + msg.data.length] // @011A address(stack[-1]).delegatecall.gas(msg.gas)(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 83 DUP4 0134 3B EXTCODESIZE 0135 61 PUSH2 0x0194 0138 57 *JUMPI 0139 60 PUSH1 0x40 013B 51 MLOAD 013C 62 PUSH3 0x461bcd 0140 60 PUSH1 0xe5 0142 1B SHL 0143 81 DUP2 0144 52 MSTORE 0145 60 PUSH1 0x20 0147 60 PUSH1 0x04 0149 82 DUP3 014A 01 ADD 014B 52 MSTORE 014C 60 PUSH1 0x26 014E 60 PUSH1 0x24 0150 82 DUP3 0151 01 ADD 0152 52 MSTORE 0153 7F PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f 0174 60 PUSH1 0x44 0176 82 DUP3 0177 01 ADD 0178 52 MSTORE 0179 65 PUSH6 0x1b9d1c9858dd 0180 60 PUSH1 0xd2 0182 1B SHL 0183 60 PUSH1 0x64 0185 82 DUP3 0186 01 ADD 0187 52 MSTORE 0188 60 PUSH1 0x84 018A 01 ADD 018B 5B JUMPDEST 018C 60 PUSH1 0x40 018E 51 MLOAD 018F 80 DUP1 0190 91 SWAP2 0191 03 SUB 0192 90 SWAP1 0193 FD *REVERT 0194 5B JUMPDEST 0195 60 PUSH1 0x00 0197 80 DUP1 0198 85 DUP6 0199 60 PUSH1 0x01 019B 60 PUSH1 0x01 019D 60 PUSH1 0xa0 019F 1B SHL 01A0 03 SUB 01A1 16 AND 01A2 85 DUP6 01A3 60 PUSH1 0x40 01A5 51 MLOAD 01A6 61 PUSH2 0x01af 01A9 91 SWAP2 01AA 90 SWAP1 01AB 61 PUSH2 0x0242 01AE 56 *JUMP 01AF 5B JUMPDEST 01B0 60 PUSH1 0x00 01B2 60 PUSH1 0x40 01B4 51 MLOAD 01B5 80 DUP1 01B6 83 DUP4 01B7 03 SUB 01B8 81 DUP2 01B9 85 DUP6 01BA 5A GAS 01BB F4 DELEGATECALL 01BC 91 SWAP2 01BD 50 POP 01BE 50 POP 01BF 3D RETURNDATASIZE 01C0 80 DUP1 01C1 60 PUSH1 0x00 01C3 81 DUP2 01C4 14 EQ 01C5 61 PUSH2 0x01ea 01C8 57 *JUMPI 01C9 60 PUSH1 0x40 01CB 51 MLOAD 01CC 91 SWAP2 01CD 50 POP 01CE 60 PUSH1 0x1f 01D0 19 NOT 01D1 60 PUSH1 0x3f 01D3 3D RETURNDATASIZE 01D4 01 ADD 01D5 16 AND 01D6 82 DUP3 01D7 01 ADD 01D8 60 PUSH1 0x40 01DA 52 MSTORE 01DB 3D RETURNDATASIZE 01DC 82 DUP3 01DD 52 MSTORE 01DE 3D RETURNDATASIZE 01DF 60 PUSH1 0x00 01E1 60 PUSH1 0x20 01E3 84 DUP5 01E4 01 ADD 01E5 3E RETURNDATACOPY 01E6 61 PUSH2 0x01ef 01E9 56 *JUMP 01EA 5B JUMPDEST 01EB 60 PUSH1 0x60 01ED 91 SWAP2 01EE 50 POP 01EF 5B JUMPDEST 01F0 50 POP 01F1 91 SWAP2 01F2 50 POP 01F3 91 SWAP2 01F4 50 POP 01F5 61 PUSH2 0x01ff 01F8 82 DUP3 01F9 82 DUP3 01FA 86 DUP7 01FB 61 PUSH2 0x0209 01FE 56 *JUMP 01FF 5B JUMPDEST 0200 96 SWAP7 0201 95 SWAP6 0202 50 POP 0203 50 POP 0204 50 POP 0205 50 POP 0206 50 POP 0207 50 POP 0208 56 *JUMP 0209 5B JUMPDEST 020A 60 PUSH1 0x60 020C 83 DUP4 020D 15 ISZERO 020E 61 PUSH2 0x0218 0211 57 *JUMPI 0212 50 POP 0213 81 DUP2 0214 61 PUSH2 0x0105 0217 56 *JUMP 0218 5B JUMPDEST 0219 82 DUP3 021A 51 MLOAD 021B 15 ISZERO 021C 61 PUSH2 0x0228 021F 57 *JUMPI 0220 82 DUP3 0221 51 MLOAD 0222 80 DUP1 0223 84 DUP5 0224 60 PUSH1 0x20 0226 01 ADD 0227 FD *REVERT 0228 5B JUMPDEST 0229 81 DUP2 022A 60 PUSH1 0x40 022C 51 MLOAD 022D 62 PUSH3 0x461bcd 0231 60 PUSH1 0xe5 0233 1B SHL 0234 81 DUP2 0235 52 MSTORE 0236 60 PUSH1 0x04 0238 01 ADD 0239 61 PUSH2 0x018b 023C 91 SWAP2 023D 90 SWAP1 023E 61 PUSH2 0x025e 0241 56 *JUMP 0242 5B JUMPDEST 0243 60 PUSH1 0x00 0245 82 DUP3 0246 51 MLOAD 0247 61 PUSH2 0x0254 024A 81 DUP2 024B 84 DUP5 024C 60 PUSH1 0x20 024E 87 DUP8 024F 01 ADD 0250 61 PUSH2 0x0291 0253 56 *JUMP 0254 5B JUMPDEST 0255 91 SWAP2 0256 90 SWAP1 0257 91 SWAP2 0258 01 ADD 0259 92 SWAP3 025A 91 SWAP2 025B 50 POP 025C 50 POP 025D 56 *JUMP 025E 5B JUMPDEST 025F 60 PUSH1 0x00 0261 60 PUSH1 0x20 0263 82 DUP3 0264 52 MSTORE 0265 82 DUP3 0266 51 MLOAD 0267 80 DUP1 0268 60 PUSH1 0x20 026A 84 DUP5 026B 01 ADD 026C 52 MSTORE 026D 61 PUSH2 0x027d 0270 81 DUP2 0271 60 PUSH1 0x40 0273 85 DUP6 0274 01 ADD 0275 60 PUSH1 0x20 0277 87 DUP8 0278 01 ADD 0279 61 PUSH2 0x0291 027C 56 *JUMP 027D 5B JUMPDEST 027E 60 PUSH1 0x1f 0280 01 ADD 0281 60 PUSH1 0x1f 0283 19 NOT 0284 16 AND 0285 91 SWAP2 0286 90 SWAP1 0287 91 SWAP2 0288 01 ADD 0289 60 PUSH1 0x40 028B 01 ADD 028C 92 SWAP3 028D 91 SWAP2 028E 50 POP 028F 50 POP 0290 56 *JUMP 0291 5B JUMPDEST 0292 60 PUSH1 0x00 0294 5B JUMPDEST 0295 83 DUP4 0296 81 DUP2 0297 10 LT 0298 15 ISZERO 0299 61 PUSH2 0x02ac 029C 57 *JUMPI 029D 81 DUP2 029E 81 DUP2 029F 01 ADD 02A0 51 MLOAD 02A1 83 DUP4 02A2 82 DUP3 02A3 01 ADD 02A4 52 MSTORE 02A5 60 PUSH1 0x20 02A7 01 ADD 02A8 61 PUSH2 0x0294 02AB 56 *JUMP 02AC 5B JUMPDEST 02AD 83 DUP4 02AE 81 DUP2 02AF 11 GT 02B0 15 ISZERO 02B1 61 PUSH2 0x02bb 02B4 57 *JUMPI 02B5 60 PUSH1 0x00 02B7 84 DUP5 02B8 84 DUP5 02B9 01 ADD 02BA 52 MSTORE 02BB 5B JUMPDEST 02BC 50 POP 02BD 50 POP 02BE 50 POP 02BF 50 POP 02C0 56 *JUMP 02C1 FE *ASSERT 02C2 41 COINBASE 02C3 64 PUSH5 0x6472657373 02C9 3A GASPRICE 02CA 20 SHA3 02CB 6C PUSH13 0x6f772d6c6576656c2064656c65 02D9 67 PUSH8 0x6174652063616c6c 02E2 20 SHA3 02E3 66 PUSH7 0x61696c6564a264 02EB 69 PUSH10 0x706673582212204148f0 02F6 D0 D0 02F7 2F 2F 02F8 9A SWAP11 02F9 EC EC 02FA 37 CALLDATACOPY 02FB 46 CHAINID 02FC 44 DIFFICULTY 02FD 9B SWAP12 02FE 4F 4F 02FF C5 C5 0300 25 25 0301 33 CALLER 0302 78 PUSH25 0x761e013a9a5ba053423a5811b29a77ab64736f6c6343000802 031C 00 *STOP 031D 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]