Skip to content

Instantly share code, notes, and snippets.

@lukesaunders
Created August 24, 2020 15:38
Show Gist options
  • Save lukesaunders/65b1f8157712e61a7b203d1e3131ca5f to your computer and use it in GitHub Desktop.
Save lukesaunders/65b1f8157712e61a7b203d1e3131ca5f to your computer and use it in GitHub Desktop.
import knex from '../../../lib/database.js';
import sleep from '../../../lib/utils/sleep';
import { compareAsc, format, addDays, subDays, addYears, subMonths, subYears, parse } from 'date-fns';
import Web3 from 'web3';
import contractABI from './pooledStakingAbi.js';
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
process.on('unhandledRejection', up => { throw up });
const web3 = new Web3('http://localhost:9545');
const startBlock = process.env['START_BLOCK'] ? parseInt(process.env['START_BLOCK']) : 3938865;
const contractAddress = '0x84edffa16bb0b9ab1163abb0a13ff0744c11272f';
const decimals = 18;
const decimalDivider = 10 ** decimals;
const path = 'csvs/nxm_stakes.csv';
const csvWriter = createCsvWriter({
path,
header: [
{id: 'timestamp', title: 'Timestamp'},
{id: 'contractAddress', title: 'Contract Address'},
{id: 'type', title: 'Type'},
{id: 'staker', title: 'Staker Address'},
{id: 'amount', title: 'Amount'},
]
});
const blocks = {};
async function getStakeEvents() {
const contract = new web3.eth.Contract(contractABI, contractAddress);
const endBlock = process.env['END_BLOCK'] ? parseInt(process.env['END_BLOCK']) : await web3.eth.getBlockNumber();
console.log(startBlock, endBlock);
const windowSize = 1000;
// --cache=4096 --ws --wsport 8546 --wsorigins "*"
const csvRecords = [];
for (let currentStartBlock = startBlock; (currentStartBlock + windowSize) < endBlock; currentStartBlock += windowSize) {
const toBlock = currentStartBlock > endBlock ? 'latest' : currentStartBlock + windowSize;
for (const eventType of ['Deposited']) {
const events = await contract.getPastEvents(eventType, {
fromBlock: currentStartBlock,
toBlock: toBlock,
});
for (const event of events) {
if (!blocks[event.blockNumber]) {
const block = await web3.eth.getBlock(event.blockNumber, false);
blocks[event.blockNumber] = block.timestamp;
console.log(blocks[event.blockNumber]);
}
console.log(event);
const { contractAddress, staker, amount } = event.returnValues;
csvRecords.push({
timestamp: new Date(parseInt(blocks[event.blockNumber]) * 1000).toISOString(),
contractAddress,
staker,
type: eventType,
amount: parseInt(amount) / decimalDivider,
});
}
}
}
await csvWriter.writeRecords(csvRecords);
console.log('CSV written to ', path);
}
async function run() {
getStakeEvents();
knex.destroy();
}
run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment