Online Solidity Decompiler

« Decompile another contract

Address

0xa4b609dd352c1298bd23f938c6fd7187b3ea5c5f [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 0x0027, if msg.data.length // Incoming jump from 0x0021 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 0x0038 // Incoming jump from 0x002E // 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 0x02d5 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 0x0255 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 0x0219 01B0 57 *JUMPI 01B1 82 DUP3 01B2 51 MLOAD 01B3 61 PUSH2 0x0212 01B6 57 *JUMPI 01B7 60 PUSH1 0x01 01B9 60 PUSH1 0x01 01BB 60 PUSH1 0xa0 01BD 1B SHL 01BE 03 SUB 01BF 85 DUP6 01C0 16 AND 01C1 3B EXTCODESIZE 01C2 61 PUSH2 0x0212 01C5 57 *JUMPI 01C6 60 PUSH1 0x40 01C8 51 MLOAD 01C9 62 PUSH3 0x461bcd 01CD 60 PUSH1 0xe5 01CF 1B SHL 01D0 81 DUP2 01D1 52 MSTORE 01D2 60 PUSH1 0x20 01D4 60 PUSH1 0x04 01D6 82 DUP3 01D7 01 ADD 01D8 52 MSTORE 01D9 60 PUSH1 0x1d 01DB 60 PUSH1 0x24 01DD 82 DUP3 01DE 01 ADD 01DF 52 MSTORE 01E0 7F PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 0201 60 PUSH1 0x44 0203 82 DUP3 0204 01 ADD 0205 52 MSTORE 0206 60 PUSH1 0x64 0208 01 ADD 0209 5B JUMPDEST 020A 60 PUSH1 0x40 020C 51 MLOAD 020D 80 DUP1 020E 91 SWAP2 020F 03 SUB 0210 90 SWAP1 0211 FD *REVERT 0212 5B JUMPDEST 0213 50 POP 0214 81 DUP2 0215 61 PUSH2 0x0223 0218 56 *JUMP 0219 5B JUMPDEST 021A 61 PUSH2 0x0223 021D 83 DUP4 021E 83 DUP4 021F 61 PUSH2 0x022b 0222 56 *JUMP 0223 5B JUMPDEST 0224 94 SWAP5 0225 93 SWAP4 0226 50 POP 0227 50 POP 0228 50 POP 0229 50 POP 022A 56 *JUMP 022B 5B JUMPDEST 022C 81 DUP2 022D 51 MLOAD 022E 15 ISZERO 022F 61 PUSH2 0x023b 0232 57 *JUMPI 0233 81 DUP2 0234 51 MLOAD 0235 80 DUP1 0236 83 DUP4 0237 60 PUSH1 0x20 0239 01 ADD 023A FD *REVERT 023B 5B JUMPDEST 023C 80 DUP1 023D 60 PUSH1 0x40 023F 51 MLOAD 0240 62 PUSH3 0x461bcd 0244 60 PUSH1 0xe5 0246 1B SHL 0247 81 DUP2 0248 52 MSTORE 0249 60 PUSH1 0x04 024B 01 ADD 024C 61 PUSH2 0x0209 024F 91 SWAP2 0250 90 SWAP1 0251 61 PUSH2 0x0271 0254 56 *JUMP 0255 5B JUMPDEST 0256 60 PUSH1 0x00 0258 82 DUP3 0259 51 MLOAD 025A 61 PUSH2 0x0267 025D 81 DUP2 025E 84 DUP5 025F 60 PUSH1 0x20 0261 87 DUP8 0262 01 ADD 0263 61 PUSH2 0x02a4 0266 56 *JUMP 0267 5B JUMPDEST 0268 91 SWAP2 0269 90 SWAP1 026A 91 SWAP2 026B 01 ADD 026C 92 SWAP3 026D 91 SWAP2 026E 50 POP 026F 50 POP 0270 56 *JUMP 0271 5B JUMPDEST 0272 60 PUSH1 0x20 0274 81 DUP2 0275 52 MSTORE 0276 60 PUSH1 0x00 0278 82 DUP3 0279 51 MLOAD 027A 80 DUP1 027B 60 PUSH1 0x20 027D 84 DUP5 027E 01 ADD 027F 52 MSTORE 0280 61 PUSH2 0x0290 0283 81 DUP2 0284 60 PUSH1 0x40 0286 85 DUP6 0287 01 ADD 0288 60 PUSH1 0x20 028A 87 DUP8 028B 01 ADD 028C 61 PUSH2 0x02a4 028F 56 *JUMP 0290 5B JUMPDEST 0291 60 PUSH1 0x1f 0293 01 ADD 0294 60 PUSH1 0x1f 0296 19 NOT 0297 16 AND 0298 91 SWAP2 0299 90 SWAP1 029A 91 SWAP2 029B 01 ADD 029C 60 PUSH1 0x40 029E 01 ADD 029F 92 SWAP3 02A0 91 SWAP2 02A1 50 POP 02A2 50 POP 02A3 56 *JUMP 02A4 5B JUMPDEST 02A5 60 PUSH1 0x00 02A7 5B JUMPDEST 02A8 83 DUP4 02A9 81 DUP2 02AA 10 LT 02AB 15 ISZERO 02AC 61 PUSH2 0x02bf 02AF 57 *JUMPI 02B0 81 DUP2 02B1 81 DUP2 02B2 01 ADD 02B3 51 MLOAD 02B4 83 DUP4 02B5 82 DUP3 02B6 01 ADD 02B7 52 MSTORE 02B8 60 PUSH1 0x20 02BA 01 ADD 02BB 61 PUSH2 0x02a7 02BE 56 *JUMP 02BF 5B JUMPDEST 02C0 83 DUP4 02C1 81 DUP2 02C2 11 GT 02C3 15 ISZERO 02C4 61 PUSH2 0x02ce 02C7 57 *JUMPI 02C8 60 PUSH1 0x00 02CA 84 DUP5 02CB 84 DUP5 02CC 01 ADD 02CD 52 MSTORE 02CE 5B JUMPDEST 02CF 50 POP 02D0 50 POP 02D1 50 POP 02D2 50 POP 02D3 56 *JUMP 02D4 FE *ASSERT 02D5 41 COINBASE 02D6 64 PUSH5 0x6472657373 02DC 3A GASPRICE 02DD 20 SHA3 02DE 6C PUSH13 0x6f772d6c6576656c2064656c65 02EC 67 PUSH8 0x6174652063616c6c 02F5 20 SHA3 02F6 66 PUSH7 0x61696c6564a264 02FE 69 PUSH10 0x70667358221220493f6a 0309 E4 E4 030A A4 LOG4 030B 79 PUSH26 0x0c1e8f5ebf7f96b8ff70ec43f297283d291bb403073921c1b6d8 0326 64 PUSH5 0x736f6c6343 032C 00 *STOP 032D 08 ADDMOD 032E 07 SMOD 032F 00 *STOP 0330 33 CALLER
Found this site useful?
Donations are greatly appreciated!
ETH: 0xB3F04f0c276fa1177c1779f6E1E156B2738ea392
Contact/hire: [email protected]