BNB Chain

0xc63fb27f52ed8d06673c60c3075b2d3bd26cf4aa

Decompiled Solidity recovered from this contract's runtime bytecode. Best-effort reconstruction — confirm behaviour against on-chain state.

Decompilation outputBNB Chain · 0xc63fb27fd26cf4aa2.0 KB4.8 s
Share
//decompiled by exvvul decompiler tool contact@exvul.com https://x.com/exvulsec
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

contract DesolexContract {
    address public constant token = address(0xf12d5048a6bed7ecc572fa7805d03af7b5fb9d2);
    uint256 public constant fee = 3000;
    uint256 public constant marginFee = 2500;
    uint256 public constant poolId = 90310526856941952249835635612342530199996101877573223301000285361169299700248;
    address public constant beneficiary = address(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e);
    
    function _desolexPanic(uint256 code) private pure {
        assembly ("memory-safe") {
            mstore(0x00, shl(224, 0x4e487b71))
            mstore(0x04, code)
            revert(0x00, 0x24)
        }
    }
    receive() external payable {
    }
    
    
    function walk() public payable {
        require(msg.sender == 0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e);
        require(msg.value != 0x0);
        uint256 var_a;
        if (((var_a + 0xc0) > 0xffffffffffffffff) | ((var_a + 0xc0) < var_a)) _desolexPanic(65);
        var_a = var_a + 0xc0;
        (bool success0, bytes memory returnData0) = address(0xb397fe16be79b082f17f1cd96e6489df19e07bcd).exactInput{ value: msg.value }(var_a.length); // call
        require(success0);
        uint256 value0 = returnData0.length;
        if (0x60 <= returnData0.length) {
            value0 = 0x60;
        }
        if (((var_a + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_a + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_a)) _desolexPanic(65);
        var_a = var_a + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
        require(((var_a + value0) - var_a) >= 0x60);
        require(uint24(var_a.length) == var_a.length);
    }
    
    function drain() public {
        require(msg.sender == 0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e);
        (bool success0, bytes memory returnData0) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
        require(success0);
        uint256 value1 = msg.data[0] >> 0xe0;
        uint256 var_c;
        uint256 value2 = var_c.length;
        if (success0) {
            uint256 value0 = returnData0.length;
            if (0x20 <= returnData0.length) {
                value0 = 0x20;
            }
            if (((var_c + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
            var_c = var_c + ((value0 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
            require(((var_c + value0) - var_c) >= 0x20);
        } else {
            value1 = var_c;
            value2 = 0;
        }
        require(value2 != 0x0);
        if (((var_c + 0x80) > 0xffffffffffffffff) | ((var_c + 0x80) < var_c)) _desolexPanic(65);
        var_c = var_c + 0x80;
        uint256 value3 = msg.data[0] >> 0xe0;
        uint256 value4 = value2;
        if ((value2 >> 0x04) != 0x0) {
            value3 = value2;
            value4 = value2 >> 0x04;
        }
        uint256 value6 = value4;
        uint256 value5 = 0;
        while (true) {
            if (value5 >= 0x30) {
                uint256 value11 = msg.data[0] >> 0xe0;
                uint256 value12 = msg.data[0] >> 0xe0;
                if (address(this).balance != 0x0) {
                    (bool success1, bytes memory returnData1) = address(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e).call{ value: address(this).balance }(""); // call
                    if (returnData1.length != 0x0) {
                        if (!(returnData1.length <= 0xffffffffffffffff)) _desolexPanic(65);
                        if (((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData1.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData1.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                        var_c = var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData1.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                        (bool success2, bytes memory returnData2) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
                        require(success2);
                        uint256 value8 = msg.data[0] >> 0xe0;
                        uint256 value9 = var_c.length;
                        if (success2) {
                            uint256 value7 = returnData2.length;
                            if (0x20 <= returnData2.length) {
                                value7 = 0x20;
                            }
                            if (((var_c + ((value7 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value7 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                            var_c = var_c + ((value7 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                            require(((var_c + value7) - var_c) >= 0x20);
                        } else {
                            value8 = var_c;
                            value9 = 0;
                        }
                        (bool success3, bytes memory returnData3) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value9); // call
                        require(success3);
                        uint256 value10 = returnData3.length;
                        if (0x20 <= returnData3.length) {
                            value10 = 0x20;
                        }
                        if (((var_c + ((value10 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value10 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                        var_c = var_c + ((value10 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                        require(((var_c + value10) - var_c) >= 0x20);
                        require(var_c.length == var_c.length);
                    }
                } else {
                    value11 = 0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e;
                    value12 = address(this).balance;
                }
                (bool success4, bytes memory returnData4) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
                require(success4);
                uint256 value14 = msg.data[0] >> 0xe0;
                uint256 value15 = var_c.length;
                if (success4) {
                    uint256 value13 = returnData4.length;
                    if (0x20 <= returnData4.length) {
                        value13 = 0x20;
                    }
                    if (((var_c + ((value13 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value13 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                    var_c = var_c + ((value13 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                    require(((var_c + value13) - var_c) >= 0x20);
                } else {
                    value14 = var_c;
                    value15 = 0;
                }
                (bool success5, bytes memory returnData5) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value15); // call
                require(success5);
                uint256 value16 = returnData5.length;
                if (0x20 <= returnData5.length) {
                    value16 = 0x20;
                }
                if (((var_c + ((value16 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value16 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + ((value16 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                require(((var_c + value16) - var_c) >= 0x20);
                require(var_c.length == var_c.length);
            }
            (bool success6, bytes memory returnData6) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
            if (!success6) {
                revert();
                break;
            }
            uint256 value18 = msg.data[0] >> 0xe0;
            uint256 value19 = var_c.length;
            if (success6) {
                uint256 value17 = returnData6.length;
                if (0x20 <= returnData6.length) {
                    value17 = 0x20;
                }
                if (((var_c + ((value17 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value17 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + ((value17 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                require(((var_c + value17) - var_c) >= 0x20);
            } else {
                value18 = var_c;
                value19 = 0;
            }
            if (value19 == 0x0) {
                uint256 value24 = msg.data[0] >> 0xe0;
                uint256 value25 = msg.data[0] >> 0xe0;
                if (address(this).balance != 0x0) {
                    (bool success7, bytes memory returnData7) = address(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e).call{ value: address(this).balance }(""); // call
                    if (returnData7.length != 0x0) {
                        if (!(returnData7.length <= 0xffffffffffffffff)) _desolexPanic(65);
                        if (((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData7.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData7.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                        var_c = var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData7.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                        (bool success8, bytes memory returnData8) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
                        require(success8);
                        uint256 value21 = msg.data[0] >> 0xe0;
                        uint256 value22 = var_c.length;
                        if (success8) {
                            uint256 value20 = returnData8.length;
                            if (0x20 <= returnData8.length) {
                                value20 = 0x20;
                            }
                            if (((var_c + ((value20 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value20 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                            var_c = var_c + ((value20 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                            require(((var_c + value20) - var_c) >= 0x20);
                        } else {
                            value21 = var_c;
                            value22 = 0;
                        }
                        (bool success9, bytes memory returnData9) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value22); // call
                        require(success9);
                        uint256 value23 = returnData9.length;
                        if (0x20 <= returnData9.length) {
                            value23 = 0x20;
                        }
                        if (((var_c + ((value23 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value23 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                        var_c = var_c + ((value23 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                        require(((var_c + value23) - var_c) >= 0x20);
                        require(var_c.length == var_c.length);
                    }
                } else {
                    value24 = 0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e;
                    value25 = address(this).balance;
                }
                (bool success10, bytes memory returnData10) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
                require(success10);
                uint256 value27 = msg.data[0] >> 0xe0;
                uint256 value28 = var_c.length;
                if (success10) {
                    uint256 value26 = returnData10.length;
                    if (0x20 <= returnData10.length) {
                        value26 = 0x20;
                    }
                    if (((var_c + ((value26 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value26 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                    var_c = var_c + ((value26 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                    require(((var_c + value26) - var_c) >= 0x20);
                } else {
                    value27 = var_c;
                    value28 = 0;
                }
                (bool success11, bytes memory returnData11) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value28); // call
                require(success11);
                uint256 value29 = returnData11.length;
                if (0x20 <= returnData11.length) {
                    value29 = 0x20;
                }
                if (((var_c + ((value29 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value29 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + ((value29 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                require(((var_c + value29) - var_c) >= 0x20);
                require(var_c.length == var_c.length);
                break;
            }
            uint256 value30 = value6;
            if (value19 < value6) {
                value30 = value19;
            }
            if (((var_c + 0xe0) > 0xffffffffffffffff) | ((var_c + 0xe0) < var_c)) {
                _desolexPanic(65);
                break;
            }
            var_c = var_c + 0xe0;
            (bool success12, bytes memory returnData12) = address(0x6bec0c1dc4898484b7f094566ddf8bc82ed7abe8).addMargin(address(var_c.length), address(var_ap)); // call
            uint256 value32 = msg.data[0] >> 0xe0;
            if (success12) {
                uint256 value31 = returnData12.length;
                if (0x60 <= returnData12.length) {
                    value31 = 0x60;
                }
                if (((var_c + ((value31 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value31 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + ((value31 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                require(((var_c + value31) - var_c) >= 0x60);
            } else {
                value32 = var_c;
            }
            if (success12) {
                break;
            }
            uint256 value33 = value30;
            uint256 value34 = value5;
            if (value30 <= 0x1) {
                break;
            }
            if (!(value30 >> 0x01)) {
                break;
            }
            value6 = value30 >> 0x01;
            value5 = value5 + 0x01;
            value33 = value5;
            value34 = value30 >> 0x01;
            value6 = value6;
            value5 = value5 + 0x01;
        }
        uint256 value39 = msg.data[0] >> 0xe0;
        uint256 value40 = msg.data[0] >> 0xe0;
        if (address(this).balance != 0x0) {
            (bool success13, bytes memory returnData13) = address(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e).call{ value: address(this).balance }(""); // call
            if (returnData13.length != 0x0) {
                if (!(returnData13.length <= 0xffffffffffffffff)) _desolexPanic(65);
                if (((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData13.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData13.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + (((0x20 + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData13.length + 0x1f))) + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                (bool success14, bytes memory returnData14) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
                require(success14);
                uint256 value36 = msg.data[0] >> 0xe0;
                uint256 value37 = var_c.length;
                if (success14) {
                    uint256 value35 = returnData14.length;
                    if (0x20 <= returnData14.length) {
                        value35 = 0x20;
                    }
                    if (((var_c + ((value35 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value35 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                    var_c = var_c + ((value35 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                    require(((var_c + value35) - var_c) >= 0x20);
                } else {
                    value36 = var_c;
                    value37 = 0;
                }
                (bool success15, bytes memory returnData15) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value37); // call
                require(success15);
                uint256 value38 = returnData15.length;
                if (0x20 <= returnData15.length) {
                    value38 = 0x20;
                }
                if (((var_c + ((value38 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value38 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
                var_c = var_c + ((value38 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
                require(((var_c + value38) - var_c) >= 0x20);
                require(var_c.length == var_c.length);
            }
        } else {
            value39 = 0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e;
            value40 = address(this).balance;
        }
        (bool success16, bytes memory returnData16) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).balanceOf(address(this)); // staticcall
        require(success16);
        uint256 value42 = msg.data[0] >> 0xe0;
        uint256 value43 = var_c.length;
        if (success16) {
            uint256 value41 = returnData16.length;
            if (0x20 <= returnData16.length) {
                value41 = 0x20;
            }
            if (((var_c + ((value41 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value41 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
            var_c = var_c + ((value41 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
            require(((var_c + value41) - var_c) >= 0x20);
        } else {
            value42 = var_c;
            value43 = 0;
        }
        (bool success17, bytes memory returnData17) = address(0x0f12d5048a6bed7ecc572fa7805d03af7b5fb9d2).transfer(0x90bde1e0bb16b3deeb9d638acf8d01f19fd2f31e, value43); // call
        require(success17);
        uint256 value44 = returnData17.length;
        if (0x20 <= returnData17.length) {
            value44 = 0x20;
        }
        if (((var_c + ((value44 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) > 0xffffffffffffffff) | ((var_c + ((value44 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))) < var_c)) _desolexPanic(65);
        var_c = var_c + ((value44 + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));
        require(((var_c + value44) - var_c) >= 0x20);
        require(var_c.length == var_c.length);
    }
    
    // Note: This selector table is synthetic and is not part of the original Solidity source.
    // It records the recovered selector-to-signature mapping without executable behavior.
    
    // 0x38af3eed => beneficiary()
    // 0x3e0dc34e => poolId()
    // 0x9890220b => drain()
    // 0xb67df1c3 => marginFee()
    // 0xddca3f43 => fee()
    // 0xfc0c546a => token()
    // 0xfc98512e => walk()
}
0xc63fb2…6cf4aa on BNB Chain — Decompiled Solidity