Last active
August 15, 2024 04:39
-
-
Save gevffy/3a03f60ac1a0d0a8ccf0860f755f8d71 to your computer and use it in GitHub Desktop.
Auto boost last boosted one
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* For Bitlayer | |
* Project link https://www.influpia.com/i | |
* | |
* download nodejs from `https://nodejs.org/en/download/package-manager` and install it. | |
* | |
* open terminal and check install status | |
* ``` | |
* node -v | |
* ``` | |
* then install dependency | |
* ``` | |
* npm install [email protected] | |
* ``` | |
* replace FILL_YOUR_PRIVATE_KEY with your private key | |
* run `node boost.mjs` | |
*/ | |
import { ethers } from 'ethers' | |
const CONTRACT_MAKER_ABI = JSON.parse('[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"CAST_TO_128_OVERFLOW","type":"error"},{"inputs":[],"name":"DISABLE_BUY_SELF","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"INVALID_BUYER","type":"error"},{"inputs":[],"name":"INVALID_BUY_PRICE","type":"error"},{"inputs":[],"name":"INVALID_MINT_PRICE","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"MINNER_NOT_EXIST","type":"error"},{"inputs":[],"name":"MINSER_IS_NOT_IN_LIST","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"TRADE_NOT_STARTED","type":"error"},{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"worth","type":"uint256"}],"name":"Discount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"toTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toMiner","type":"uint256"}],"name":"FeePointChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"address","name":"host","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeToMiner","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextWorth","type":"uint256"},{"indexed":false,"internalType":"address","name":"lastHost","type":"address"}],"name":"Grab","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"giff","type":"uint256"},{"indexed":false,"internalType":"string","name":"comment","type":"string"}],"name":"Like","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"miners","type":"address[]"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MinerWhitelistChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"address","name":"host","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"competition","outputs":[{"internalType":"contract ICompetition","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeShares","outputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint16","name":"feeBP","type":"uint16"},{"internalType":"uint240","name":"balance","type":"uint240"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastWorth","type":"uint256"}],"name":"getNextWorth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"vol","type":"uint256"},{"internalType":"uint256","name":"giff","type":"uint256"}],"name":"getPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"influpiaChef","outputs":[{"internalType":"contract IChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"influpiaToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"contract ERC20","name":"influpiaToken_","type":"address"},{"internalType":"contract IChef","name":"chef","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"giff","type":"uint256"},{"internalType":"bytes","name":"influpiaPermitCallData","type":"bytes"},{"internalType":"string","name":"comment","type":"string"}],"name":"like","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"minerInfo","outputs":[{"internalType":"address","name":"host_","type":"address"},{"internalType":"uint256","name":"worth","type":"uint256"},{"internalType":"uint256","name":"giff","type":"uint256"},{"internalType":"uint256","name":"vol","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minerWhitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"miners","outputs":[{"internalType":"address","name":"host","type":"address"},{"internalType":"uint128","name":"worth","type":"uint128"},{"internalType":"uint128","name":"giff","type":"uint128"},{"internalType":"uint256","name":"vol","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"uint256[]","name":"feeBP","type":"uint256[]"}],"name":"resetTradeSharePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IChef","name":"chef","type":"address"}],"name":"setChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setCompetition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"toTreasuryBP","type":"uint256"},{"internalType":"uint256","name":"toMinerBP","type":"uint256"}],"name":"setFeeBP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"setTradeStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalHoldWorth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeFeeToMinerBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeFeeToTreasuryBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]') | |
const CONTRACT_MAKER_ADDRESS = '0x056dFeCe813e78976274Da1197B240Fda62f60dC' | |
const PROVIDER = new ethers.WebSocketProvider('wss://ws.bitlayer-rpc.com', { | |
chainId: 200901, | |
name: 'Bitlayer Mainnet' | |
}) | |
class Wallet { | |
contractMaker = new ethers.Contract(CONTRACT_MAKER_ADDRESS, CONTRACT_MAKER_ABI, PROVIDER) | |
wallet = null | |
status = 'done' | |
MIN_VALUE = null | |
MAX_VALUE = null | |
constructor(privateKey, minPrice, maxPrice) { | |
try { | |
this.wallet = new ethers.Wallet(privateKey, PROVIDER) | |
} catch (e) { | |
throw new Error('Invalid private key.') | |
} | |
if (maxPrice) { | |
this.MAX_VALUE = maxPrice | |
} | |
if (minPrice) { | |
this.MIN_VALUE = minPrice | |
} | |
this.eventListen() | |
} | |
eventListen() { | |
this.contractMaker.on(this.contractMaker.filters.Grab, (miner, host, value, feeToTreasury, feeToMiner, nextWorth, lastHost) => { | |
console.log(`Grab miner: ${miner}, host: ${host}, value: ${value}, feeToTreasury: ${feeToTreasury}, feeToMiner: ${feeToMiner}, nextWorth: ${nextWorth}, lastHost: ${lastHost} \n`) | |
if (this.status === 'done' && host.toLowerCase() !== this.wallet.address.toLowerCase()) { | |
this.buyInfluencer({ | |
address: miner, | |
worth: nextWorth | |
}) | |
} | |
}) | |
} | |
getAddress() { | |
return this.wallet.getAddress() | |
} | |
signMessage(str) { | |
return this.wallet.signMessage(str) | |
} | |
getBalance() { | |
return PROVIDER.getBalance(this.wallet) | |
} | |
async buyInfluencer(influencer) { | |
const balance = ethers.formatEther(await this.getBalance()) | |
console.log(`wallet balance: ${balance} BTC`) | |
console.log('\nwait for transaction to be confirmed...') | |
// TODO check balance and worth range [lower, higher] | |
// lower worth should be dropped | |
// higher worth than balance should be dropped | |
const worth = ethers.formatEther(influencer.worth) | |
console.log('Miner worth: ', worth) | |
if (balance <= worth) { | |
console.log('skip, balance not enough') | |
return false | |
} | |
if ((this.MAX_VALUE && worth > this.MAX_VALUE) || (this.MIN_VALUE && worth < this.MIN_VALUE)) { | |
console.log('skip, bid price not in range') | |
return false | |
} | |
const tx = { | |
to: CONTRACT_MAKER_ADDRESS, | |
value: influencer.worth, | |
data: this.contractMaker.interface.encodeFunctionData('buy', [influencer.address]), | |
gasLimit: 1000000 | |
} | |
console.log('transaction data', tx) | |
try { | |
this.status = 'pending' | |
const receipt = await this.wallet.sendTransaction(tx) | |
const res = await receipt.wait() | |
this.status = 'done' | |
console.log(receipt) | |
return res | |
} catch (error) { | |
this.status = 'done' | |
if (error.code === 'INSUFFICIENT_FUNDS') { | |
console.error('Error: insufficient funds') | |
} else { | |
console.error('Error:', error.shortMessage) | |
} | |
} | |
return false | |
} | |
async minerInfo(address) { | |
const miner = await this.contractMaker.miners(address) | |
console.log(miner) | |
return miner | |
} | |
} | |
async function start() { | |
// 1. change YOUR_WALLET_PRIVATE_KEY to your wallet private key | |
// 2. change 0.0002 to your min price, 0.02 to your max price | |
const ins = new Wallet('FILL_YOUR_PRIVATE_KEY', 0.0002, 0.02) | |
console.log(`address: ${ins.wallet.address} balance: ${ethers.formatEther(await ins.getBalance())}`) | |
} | |
start() | |
process.stdin.resume() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment