Skip to content

Instantly share code, notes, and snippets.

@yukairex
Last active February 2, 2023 12:54
Show Gist options
  • Save yukairex/014d64cf4f69423235846a1b33a646fc to your computer and use it in GitHub Desktop.
Save yukairex/014d64cf4f69423235846a1b33a646fc to your computer and use it in GitHub Desktop.
GLO Claim script
const ethers = require("ethers");
const {formatEther, parseEther} = ethers.utils
const provider = new ethers.providers.JsonRpcProvider('FILL IN YOUR RPC NODE URL');
const userAddress = " FILL IN YOUR ADDRESS with Lobs "
const maxPriorityFee = 100; // change to whatever you like. i was using 100 gwei
const maxTotalFee = 150; // change to whatever you like. i was using 100
const wrapDroABI = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Collect","type":"event"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"done","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]e
const wusdABI = [{"inputs":[{"internalType":"address[]","name":"fiatcoins","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"fiatcoin","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"fiatcoin","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"}],"name":"Wrap","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"epochOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshot","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"last","type":"uint112"},{"internalType":"uint112","name":"cumulative","type":"uint112"}],"internalType":"struct Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fiatcoin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fiatcoin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"}]
const wrapdrop = new ethers.Contract("0x46641e41e83a8f6151a0408580dd6c93d6b10efa", wrapDroABI, provider)
const wusd = new ethers.Contract("0x068e3563b1c19590f822c0e13445c4fa1b9eefa5", wusdABI, provider);
var txSent = false;
var isDone = false;
const main = async () => {
console.log("checking...")
if (isDone == true) {
console.log("mission completed")
return;
}
if (txSent == true) {
console.log("tx in process")
return;
}
let userEpoch = parseInt(await wusd.epochOf(userAddress));
let currentEpoch = (await wusd.snapshot()).epoch
let statusEpoch = parseInt((await wrapdrop.status())[0]);
console.log(`user epoch: ${userEpoch}, snapshot epoch: ${currentEpoch}, wrapdrop epoch: ${statusEpoch}`)
if (currentEpoch > statusEpoch && ((currentEpoch - userEpoch) == 1 )) {
console.log("claim window open...")
let sim = await wrapdrop.callStatic.claim();
console.log(sim)
try {
txSent = true
let tx = await wrapdrop.claim({
gasLimit: 500000,
maxPriorityFeePerGas: ethers.utils.parseUnits(maxPriorityFee, 'gwei'), // change the gas fee to whatever u want
maxFeePerGas: ethers.utils.parseUnits(maxTotalFee, 'gwei'), // change the gas fee to whatever u want
})
console.log(tx)
let receipt = await tx.wait();
console.log(receipt)
txSent = false;
isDone = true;
}catch (err){
console.log(err);
txSent = false
}
}
if (isDone == true) {
console.log("mission completed")
return;
}
if (txSent == true) {
console.log("tx in process")
return;
}
if ((userEpoch < currentEpoch) && (currentEpoch == statusEpoch)) {
// unwrap me
console.log(`unwrap to keep state`)
try {
txSent = true
let tx = await wusd.unwrap("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", 1); // unwrap tiny to usdc
let receipt = await tx.wait();
console.log(receipt)
txSent = false
}catch(err) {
console.log(err)
txSent = true
}
}
}
main();
setInterval(main, 12000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment