Skip to content

Commit

Permalink
Merge pull request #3 from kryptobaseddev/release0.0.1
Browse files Browse the repository at this point in the history
update Approval function double allowance if less than 0
  • Loading branch information
kryptobaseddev authored Jun 10, 2023
2 parents af1f3b1 + d05548a commit 67455cf
Show file tree
Hide file tree
Showing 9 changed files with 226 additions and 138 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ error_logs/commit_error.log
temp.json
.DS_Store
design/
contracts/
# Xcode
#
files/images/
Expand Down
11 changes: 11 additions & 0 deletions ABIs/erc20.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,17 @@ function erc20(account, tokenAddress) {
stateMutability: "nonpayable",
type: "function",
},
{
constant: true,
inputs: [
{ name: "_owner", type: "address" },
{ name: "_spender", type: "address" }
],
name: "allowance",
outputs: [{ name: "remaining", type: "uint256" }],
type: "function",
},

],
account
);
Expand Down
2 changes: 1 addition & 1 deletion Functions/buyToken.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ const buyToken = async (account, tokenContract, gasLimit, gasPrice) => {

}

export default buyToken;
export default buyToken;
197 changes: 100 additions & 97 deletions Functions/sellToken.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,29 @@ import constants from '../Config/constants.js';
const delay = ms => new Promise(res => setTimeout(res, ms));

const sellToken = async (account, tokenContract, gasLimit, gasPrice, value = 99) => {
let attempts = 10; // max attempts
let slippage = constants.Slippage; // starting slippage
let attempts = 10; // max attempts
let slippage = constants.Slippage; // starting slippage

while (attempts > 0) {
try {
const sellTokenContract = new constants.ethers.Contract(
tokenContract,
constants.swapAbi,
account
);

const contract = new constants.ethers.Contract(constants.PANROUTERADDRESS, constants.abi, account);
const accountAddress = account.address;
const tokenBalance = await constants.erc20(account, tokenContract).balanceOf(
accountAddress
);
let amountOutMin = 0;
const amountIn = tokenBalance.mul(value).div(100);
const amounts = await constants.router(account).getAmountsOut(amountIn, [
tokenContract,
constants.BNBCONTRACT
]);
while (attempts > 0) {
try {
const contract = new constants.ethers.Contract(constants.PANROUTERADDRESS, constants.abi, account);
const accountAddress = account.address;
const tokenBalance = await constants.erc20(account, tokenContract).balanceOf(
accountAddress
);
let amountOutMin = 0;
const amountIn = tokenBalance.mul(value).div(100);

// increment slippage by 2% for each attempt
slippage += 2;
const sellTokenContract = new constants.ethers.Contract(
tokenContract,
constants.swapAbi,
account
);
const allowance = await sellTokenContract.allowance(account.address, constants.PANROUTERADDRESS);

if (parseInt(slippage) !== 0) {
amountOutMin = amounts[1].sub(amounts[1].mul(slippage.toString()).div(100));
} else {
amountOutMin = amounts[1];
}

const approve = await sellTokenContract.approve(constants.PANROUTERADDRESS, amountIn);
// If allowance is less than double the amount we want to sell, approve double the spending
if (allowance.lt(amountIn.mul(2))) {
const approve = await sellTokenContract.approve(constants.PANROUTERADDRESS, amountIn.mul(2));
const receipt_approve = await approve.wait();
if (
receipt_approve &&
Expand All @@ -46,79 +36,92 @@ const sellToken = async (account, tokenContract, gasLimit, gasPrice, value = 99)
const message = `INFO - Approved https://bscscan.com/tx/${receipt_approve.transactionHash} ${constants.chalk.green('✅')}`;
console.log(constants.chalk.green(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
const swap_txn =
await contract.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountIn,
amountOutMin,
[tokenContract, constants.BNBCONTRACT],
accountAddress,
Date.now() + 1000 * 60 * 10,
{
gasLimit: gasLimit,
gasPrice: gasPrice,
}
);
const receipt = await swap_txn.wait();
if (receipt && receipt.blockNumber && receipt.status === 1) {
// 0 - failed, 1 - success
const message = `INFO - Transaction https://bscscan.com/tx/${receipt.transactionHash} mined, status success ${constants.chalk.green('✅')}`;
console.log(constants.chalk.green(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
// if the sell transaction is successful, break the loop
break;
} else if (receipt && receipt.blockNumber && receipt.status === 0) {
const message = `ERROR - Transaction https://bscscan.com/tx/${receipt.transactionHash} mined, status failed ${constants.chalk.red('❌')}`;
console.log(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
} else {
const message = `WARNING - Transaction https://bscscan.com/tx/${receipt.transactionHash} not mined ${constants.chalk.yellow('⚠️')}`;
console.log(constants.chalk.yellow(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
}
}
}

// decrement the value by 10 each time
value -= 10;
attempts--;
const amounts = await constants.router(account).getAmountsOut(amountIn, [
tokenContract,
constants.BNBCONTRACT
]);

// delay execution for 5 second (5000 milliseconds) between each sell attempt
await delay(5000);
} catch (error) {
let errorMessage = error.message;
const errorReasonIndex = errorMessage.indexOf("(reason=");

// Extract error reason if it exists
if (errorReasonIndex !== -1) {
errorMessage = errorMessage.substring(errorReasonIndex + 9, errorMessage.indexOf(","));
errorMessage = `Error reason: ${errorMessage}`;
}

const message = `ERROR - Error while selling token: ${errorMessage} ${constants.chalk.red('❌')}`;
console.error(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
attempts--;

// delay execution for 5 second (5000 milliseconds) between each sell attempt
await delay(5000);
// increment slippage by 2% for each attempt
slippage += 2;

if (parseInt(slippage) !== 0) {
amountOutMin = amounts[1].sub(amounts[1].mul(slippage.toString()).div(100));
} else {
amountOutMin = amounts[1];
}

} // closing brace for while loop
// If all attempts have been made and the token couldn't be sold, add to blacklist
if (attempts === 0) {
constants.blacklist.push(tokenContract);
constants.fs.writeFile('./Lists/blacklist.json', JSON.stringify(constants.blacklist), (err) => {
if (err) {
const message = `ERROR - Error while updating blacklist: ${err} ${constants.chalk.red('❌')}`;
console.error(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
} else {
const message = `INFO - Token ${tokenContract} added to blacklist after unsuccessful sell attempts ${constants.chalk.green('✅')}`;
console.log(constants.chalk.green(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);

const swap_txn = await contract.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountIn,
amountOutMin,
[tokenContract, constants.BNBCONTRACT],
accountAddress,
Date.now() + 1000 * 60 * 10,
{
gasLimit: gasLimit,
gasPrice: gasPrice,
}
});
);
const receipt = await swap_txn.wait();
if (receipt && receipt.blockNumber && receipt.status === 1) {
// 0 - failed, 1 - success
const message = `INFO - Transaction https://bscscan.com/tx/${receipt.transactionHash} mined, status success ${constants.chalk.green('✅')}`;
console.log(constants.chalk.green(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
// if the sell transaction is successful, break the loop
break;
} else if (receipt && receipt.blockNumber && receipt.status === 0) {
const message = `ERROR - Transaction https://bscscan.com/tx/${receipt.transactionHash} mined, status failed ${constants.chalk.red('❌')}`;
console.log(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
} else {
const message = `WARNING - Transaction https://bscscan.com/tx/${receipt.transactionHash} not mined ${constants.chalk.yellow('⚠️')}`;
console.log(constants.chalk.yellow(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
}
// decrement the value by 10 each time
value -= 10;
attempts--;

// delay execution for 5 second (5000 milliseconds) between each sell attempt
await delay(5000);
} catch (error) {
let errorMessage = error.message;
const errorReasonIndex = errorMessage.indexOf("(reason=");

// Extract error reason if it exists
if (errorReasonIndex !== -1) {
errorMessage = errorMessage.substring(errorReasonIndex + 9, errorMessage.indexOf(","));
errorMessage = `Error reason: ${errorMessage}`;
}

const message = `ERROR - Error while selling token: ${errorMessage} ${constants.chalk.red('❌')}`;
console.error(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
attempts--;

// delay execution for 1 second (1000 milliseconds) between each sell attempt
await delay(1000);
}

} // closing brace for while loop
// If all attempts have been made and the token couldn't be sold, add to blacklist
if (attempts === 0) {
constants.blacklist.push(tokenContract);
constants.fs.writeFile('./Lists/blacklist.json', JSON.stringify(constants.blacklist), (err) => {
if (err) {
const message = `ERROR - Error while updating blacklist: ${err} ${constants.chalk.red('❌')}`;
console.error(constants.chalk.red(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
} else {
const message = `INFO - Token ${tokenContract} added to blacklist after unsuccessful sell attempts ${constants.chalk.green('✅')}`;
console.log(constants.chalk.green(message));
constants.fs.appendFileSync('./error_logs/log.txt', `${new Date().toLocaleString()} - ${message}\n`);
}
});
}
}

export default sellToken;

2 changes: 1 addition & 1 deletion Lists/blacklist.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
["0x171130a203df66c50B2Ec2BC0E385dF4F5F6eC20","0x556a527E17732735cf7baBf582a7cF001Fc309C2","0xC41Cd7cE260704b1Fb2AA630ec2d959C529A36BA","0xa18F57919851387Affc4482bF77c2A0609F4DE67","0x55d398326f99059fF775485246999027B3197955","0xB10EDe74D38b15751BACe7CdA02dd6d684126c30","0xda74cD3D68A3E54D955162110Ea40c04Bf7e17E6","0xC4Fd0a6328f39F1db9E9A0DFc32534C78E19Bf6f","0xb5002A946c0150A0EF30eEB034b099928490E67C","0x877839Cc5312743aAEc1F1DDa0c195d89Cd755D5","0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56","0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82","0x608756c184A0723077B0c10F97f4D054c9eE1C0F","0x1E84BFB6dc6cf352572344B772DF549c04Fda869","0x1e3eC969F9D8fb8FcF01267a56eA2D603B914991","0x082744dD08Dc96929e476d7C65a29B6Bfd6b0755","0x5053C014eB017757e343ff4fc8741195aF76B40c","0xC708Fa57A4e9c821443f6251a4FF11DC446b6741","0x0baB3607beEDC157EccDFECbCAD8Dc038d72f8c5","0x55d398326f99059fF775485246999027B3197955","0x1e84bfb6dc6cf352572344b772df549c04fda869","0xFEC99f71DD6e58Be0711A251eaA44ce1c5B64c01","0x556a527E17732735cf7baBf582a7cF001Fc309C2","0x1E84BFB6dc6cf352572344B772DF549c04Fda869","0x78b617aFA309aF36Fc8606728026C8fd1FC78BBC","0x47974d4117280bb6f6b60182323177f6a1df61b2","0x494c83CaED27aeb836d7fd1482D080e1D35DD0f3","0xedbd18b82215e7e39b7080ad967669b00ff1b8b4","0xf8b8C14CDCCeD823CACCe592c82f526aEB197a30","0x8A3AE5f13Aff94A3E72F45951d2f191Befbc006c","0x253c0460cC962F48e2ff4Be8D9F790B47CE4d756","0x1b9DEc855E98d1c01426a3eD615dd25d2947290E","0x8A3AE5f13Aff94A3E72F45951d2f191Befbc006c","0xd692500383Eb72e271426E732Cdb5668948058d5","0xE5bA47fD94CB645ba4119222e34fB33F59C7CD90","0x7cF551258d6871b72EE1bD1624588a6245bF48c4","0x1dcDC54cFd22E0FF5586A505c827D55A6D8ceB1d","0xC496108Ed523AF656bb0F3E1Cb63E3daaCB987F4","0xF0C26f3c132FF29FfCd236DB51E18b935137E76c","0x0451BCC93E8bbAfd6849A7cFa747c484658094AD","0x9D655C9eD8D2291f0df80051b2D4d403Ef930acC","0xbC606aFE23c6c77Ab4a19138167053a6bd0C83c3","0x47Fd014706081068448b89Fc6bAca2730977216a","0x237ace23Ab2C36a004AA5e4fB134fe5c1cedF06c","0x13C2C08ebBf9589e47F4F62cC21fFfcD89F69e5B"]
["0x171130a203df66c50B2Ec2BC0E385dF4F5F6eC20","0x556a527E17732735cf7baBf582a7cF001Fc309C2","0xC41Cd7cE260704b1Fb2AA630ec2d959C529A36BA","0xa18F57919851387Affc4482bF77c2A0609F4DE67","0x55d398326f99059fF775485246999027B3197955","0xB10EDe74D38b15751BACe7CdA02dd6d684126c30","0xda74cD3D68A3E54D955162110Ea40c04Bf7e17E6","0xC4Fd0a6328f39F1db9E9A0DFc32534C78E19Bf6f","0xb5002A946c0150A0EF30eEB034b099928490E67C","0x877839Cc5312743aAEc1F1DDa0c195d89Cd755D5","0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56","0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82","0x608756c184A0723077B0c10F97f4D054c9eE1C0F","0x1E84BFB6dc6cf352572344B772DF549c04Fda869","0x1e3eC969F9D8fb8FcF01267a56eA2D603B914991","0x082744dD08Dc96929e476d7C65a29B6Bfd6b0755","0x5053C014eB017757e343ff4fc8741195aF76B40c","0xC708Fa57A4e9c821443f6251a4FF11DC446b6741","0x0baB3607beEDC157EccDFECbCAD8Dc038d72f8c5","0x55d398326f99059fF775485246999027B3197955","0x1e84bfb6dc6cf352572344b772df549c04fda869","0xFEC99f71DD6e58Be0711A251eaA44ce1c5B64c01","0x556a527E17732735cf7baBf582a7cF001Fc309C2","0x1E84BFB6dc6cf352572344B772DF549c04Fda869","0x78b617aFA309aF36Fc8606728026C8fd1FC78BBC","0x47974d4117280bb6f6b60182323177f6a1df61b2","0x494c83CaED27aeb836d7fd1482D080e1D35DD0f3","0xedbd18b82215e7e39b7080ad967669b00ff1b8b4","0xf8b8C14CDCCeD823CACCe592c82f526aEB197a30","0x8A3AE5f13Aff94A3E72F45951d2f191Befbc006c","0x253c0460cC962F48e2ff4Be8D9F790B47CE4d756","0x1b9DEc855E98d1c01426a3eD615dd25d2947290E","0x8A3AE5f13Aff94A3E72F45951d2f191Befbc006c","0xd692500383Eb72e271426E732Cdb5668948058d5","0xE5bA47fD94CB645ba4119222e34fB33F59C7CD90","0x7cF551258d6871b72EE1bD1624588a6245bF48c4","0x1dcDC54cFd22E0FF5586A505c827D55A6D8ceB1d","0xC496108Ed523AF656bb0F3E1Cb63E3daaCB987F4","0xF0C26f3c132FF29FfCd236DB51E18b935137E76c","0x0451BCC93E8bbAfd6849A7cFa747c484658094AD","0x9D655C9eD8D2291f0df80051b2D4d403Ef930acC","0xbC606aFE23c6c77Ab4a19138167053a6bd0C83c3","0x47Fd014706081068448b89Fc6bAca2730977216a","0x237ace23Ab2C36a004AA5e4fB134fe5c1cedF06c","0x13C2C08ebBf9589e47F4F62cC21fFfcD89F69e5B","0x845d551fAE4Be2dD871Eb978beb509fD74261231","0x5fa26252c23e43De50D3368f624e47Fa8808488E","0xbF2F3084B0050A318bA04b9569dB34f84832183D","0x49AD9aC79a9C730b55f2Ee2DA92f2Bc38234fc36","0xdb93cefbc621Fa18bEe2B3fcdFC34860351a1532","0xc9Bb93672E4C10A9BcCCC570D1F1407db2bac1Ac","0xb5640A587dCDc5964A1A441455A41d6Fbb071719","0x7704d0EaD6F74E625d7371b079D8b2475bc852d4","0x98f20E497D2579FF3adb8F37d09f1F5fbFAb42Cb","0x02887cD6615BD7A005b5cB72f27EBbAd70884406","0x8E0c77B827963Cacf18ac170e95f67973d93ed1c","0x69C2fcAe7e30b429166BD616A322e32BeC036bCf","0xCaCbE4A581A7A0e5f4740f981E26299FE4712369","0x9A2478C4036548864d96a97Fbf93f6a3341fedac","0xe01B835630d63DF7Dd09E36B4aae694816e19bdb"]
Loading

0 comments on commit 67455cf

Please sign in to comment.