BNB Chain
0xc63fb27f52ed8d06673c60c3075b2d3bd26cf4aa
Decompiled Solidity recovered from this contract's runtime bytecode. Best-effort reconstruction — confirm behaviour against on-chain state.
Decompilation outputBNB Chain · 0xc63fb27f…d26cf4aa2.0 KB4.8 s
This result is permanently available athttps://decompiler.exvul.com/bsc/0xc63fb27f52ed8d06673c60c3075b2d3bd26cf4aa
//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()
}