Pancake IFO 脚本

205 阅读1分钟
const web3 = new Web3(
    new Web3.providers.HttpProvider("https://bsc-dataseed2.ninicoin.io")
);
const CKE_ABI = require("./abis/cke_contract.json");
const IFO_ABI = require("./abis/ifo_contract.json");
const CKE_ADDRESS = "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82";
const IFO_ADDRESS = "0x63914805A0864e9557eA3A5cC86cc1BA054ec64b";
const ADDRESS_LIST = require("./address/index.json");
const cke_contract = new web3.eth.Contract(CKE_ABI, CKE_ADDRESS);
const ifo_contract = new web3.eth.Contract(IFO_ABI, IFO_ADDRESS);
const VOLUME = '8.143';
const GAS_PRICE = '7';
async function allowance(userAddress, privKey, index) {
    try {
        const approve_volume = await cke_contract.methods
            .allowance(userAddress, IFO_ADDRESS)
            .call();
        const volume = web3.utils.fromWei(approve_volume);
        console.log(index + 1 + "号钱包授权额度为: " + volume);
        if (volume < VOLUME * 1) {
            try {
                approve(userAddress, privKey, index)
            } catch (error) {
                console.log('Approve Error,Reload...')
                approve(userAddress, privKey, index)
            }
        } else {
            console.log(index + 1 + "号钱包授权额度为: " + 'Approved')
            try {
                depositPool(userAddress, privKey, index)
            } catch (error) {
                console.log('Deposit Error,Reload...')
                depositPool(userAddress, privKey, index)
            }
        }
    } catch (error) {
        allowance(userAddress, privKey, index);
    }
}
async function approve(userAddress, privKey, index) {
    const nonce = await web3.eth.getTransactionCount(userAddress);
    const gas = await cke_contract.methods
        .approve(IFO_ADDRESS, web3.utils.toWei(VOLUME))
        .estimateGas({ from: userAddress });
    const data = await cke_contract.methods
        .approve(IFO_ADDRESS, web3.utils.toWei(VOLUME))
        .encodeABI();
    const tx = {
        nonce: nonce,
        from: userAddress,
        to: CKE_ADDRESS,
        gasLimit: web3.utils.toHex(parseInt(gas * 6)),
        gasPrice: web3.utils.toHex(web3.utils.toWei(GAS_PRICE, "gwei")),
        data: data,
    };
    signed_tx = await web3.eth.accounts.signTransaction(tx, privKey);
    const transaction = await web3.eth.sendSignedTransaction(
        signed_tx.rawTransaction
    );
    console.log(index + 1 + "号钱包授权TX为: " + transaction.transactionHash)
}
async function depositPool(userAddress, privKey, index) {
    try {
        const nonce = await web3.eth.getTransactionCount(userAddress);
        const gas = await ifo_contract.methods
            .depositPool(web3.utils.toWei(VOLUME), '0')
            .estimateGas({ from: userAddress });
        const data = await ifo_contract.methods
            .depositPool(web3.utils.toWei(VOLUME), '0')
            .encodeABI();
        const tx = {
            nonce: nonce,
            from: userAddress,
            to: IFO_ADDRESS,
            gasLimit: web3.utils.toHex(parseInt(gas * 1.5)),
            gasPrice: web3.utils.toHex(web3.utils.toWei(GAS_PRICE, "gwei")),
            data: data,
        };
        signed_tx = await web3.eth.accounts.signTransaction(tx, privKey);
        const transaction = await web3.eth.sendSignedTransaction(
            signed_tx.rawTransaction
        );
        console.log(index + 1 + "号钱包质押TX为: " + transaction.transactionHash)
    } catch (error) {
        console.log(error)
        deposit()
    }
}
function approve() {
    ADDRESS_LIST.forEach(async (item, index) => {
        const { address, privKey, } = item;
        await allowance(address, privKey, index);
    });
}
function deposit() {
    ADDRESS_LIST.forEach(async (item, index) => {
        const { address, privKey, } = item;
        await depositPool(address, privKey, index);
    });
}
deposit()