Skip to content

Instantly share code, notes, and snippets.

@earthchie
Last active June 18, 2021 06:54
Show Gist options
  • Save earthchie/0aaeb599fa025dfafe187ba1d09211a4 to your computer and use it in GitHub Desktop.
Save earthchie/0aaeb599fa025dfafe187ba1d09211a4 to your computer and use it in GitHub Desktop.
const ethers = require('ethers');
const DeFiSDK = require('./defi-sdk/defi-sdk-node');
const DeFi = new DeFiSDK('https://bsc-dataseed.binance.org/', 'your private key or mnemonic keys');
DeFi.loadContracts().then(async () => {
console.log('Ready...');
const offset = 5; // in percent
let DOP = {
balance: 0,
now: 0,
highest: -1,
lowest: 999999
};
let TWIN = {
balance: 0,
now: 0,
highest: -1,
lowest: 999999
}
let log = '';
let dop_is_transacting = false;
let twin_is_transacting = false;
DeFi.provider.on('block', async n => {
const busd_balance = await DeFi.Tokens.BUSD.balance();
DOP.balance = await DeFi.Tokens.DOP.balance();
TWIN.balance = await DeFi.Tokens.TWIN.balance();
DOP.now = await DeFi.Twindex.DOP_BUSD.price();
TWIN.now = await DeFi.Twindex.TWIN_BUSD.price();
if(DOP.now > DOP.highest){
DOP.highest = DOP.now;
}
if(DOP.now < DOP.lowest){
DOP.lowest = DOP.now;
}
if(TWIN.now > TWIN.highest){
TWIN.highest = TWIN.now;
}
if(TWIN.now < TWIN.lowest){
TWIN.lowest = TWIN.now;
}
let new_log = `
DOP = ${DOP.now.toFixed(4)} (${DOP.highest.toFixed(4)}/${DOP.lowest.toFixed(4)})
TWIN = ${TWIN.now.toFixed(4)} (${TWIN.highest.toFixed(4)}/${TWIN.lowest.toFixed(4)})
`;
if(new_log != log){
log = new_log;
console.log(`\nBlock`, n, `| Balance: ${busd_balance.toFixed(4)} BUSD | ${DOP.balance.toFixed(4)} DOP | ${TWIN.balance.toFixed(4)} TWIN`, log);
}else{
process.stdout.write('.');
}
if(DOP.balance > 0 && DOP.now < (DOP.highest-DOP.highest*offset/100) && !dop_is_transacting){
dop_is_transacting = true;
let r = await sellAll(DeFi.Tokens.DOP, DeFi.Twindex.DOP_BUSD);
console.log('Sell DOP @ ', DOP.now, r);
DOP.highest = DOP.now;
DOP.lowest = DOP.now;
setTimeout(function(){
dop_is_transacting = false;
}, 30000)
}
if(busd_balance > 0 && DOP.now > (DOP.lowest+DOP.lowest*offset/100) && !dop_is_transacting){
dop_is_transacting = true;
let r = await buyAll(DeFi.Tokens.DOP, DeFi.Twindex.DOP_BUSD);
console.log('Buy DOP @ ', DOP.now, r);
DOP.lowest = DOP.now;
DOP.highest = DOP.now;
setTimeout(function(){
dop_is_transacting = false;
}, 30000)
}
if(TWIN.balance > 0 && TWIN.now < (TWIN.highest-TWIN.highest*offset/100) && !twin_is_transacting){
twin_is_transacting = true;
let r = await sellAll(DeFi.Tokens.TWIN, DeFi.Twindex.TWIN_BUSD);
console.log('Sell TWIN @ ', TWIN.now, r);
TWIN.highest = TWIN.now;
TWIN.lowest = TWIN.now;
setTimeout(function(){
twin_is_transacting = false;
}, 30000)
}
if(busd_balance > 0 && TWIN.now > (TWIN.lowest+TWIN.lowest*offset/100) && !twin_is_transacting){
twin_is_transacting = true;
let r = await buyAll(DeFi.Tokens.TWIN, DeFi.Twindex.TWIN_BUSD);
console.log('Buy TWIN @ ', TWIN.now, r);
TWIN.highest = TWIN.now;
TWIN.lowest = TWIN.now;
setTimeout(function(){
twin_is_transacting = false;
}, 30000)
}
});
});
async function sellAll(Token, Pair){
const approve_amount = ethers.utils.parseUnits('1000000', 18).toString();
try{
await Token.approve(DeFi.contractAddresses.AMM.Twindex.Router, approve_amount);
return await Pair.sell();
}catch(e){
console.log('Sell failed. Retrying...', e);
return await sellAll(Token, Pair);
}
}
async function buyAll(Token, Pair){
const approve_amount = ethers.utils.parseUnits('1000000', 18).toString();
try{
await Token.approve(DeFi.contractAddresses.AMM.Twindex.Router, approve_amount);
return await Pair.buy();
}catch(e){
console.log('Buy failed. Retrying...', e);
return await buyAll(Token, Pair);
}
}
@earthchie
Copy link
Author

earthchie commented Jun 18, 2021

$ git clone https://github.com/earthchie/DeFi-SDK ./bot
$ cd ./bot
$ wget https://gist.githubusercontent.com/earthchie/0aaeb599fa025dfafe187ba1d09211a4/raw/9d6a19819b3171a99e769405220bf7ee74890638/DopBot.js

แล้วใส่ private key/mnemonic key ซะ จากนั้น

$ npm i
$ node DopBot.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment