From eebc0db02bfe541cc317ea5e70e88a7f65dd5922 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Wed, 16 Dec 2020 17:19:31 +0100 Subject: [PATCH 1/2] Add script to count contributions between a certain block timeframe --- scripts/list-contributions-per-contributor.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 scripts/list-contributions-per-contributor.js diff --git a/scripts/list-contributions-per-contributor.js b/scripts/list-contributions-per-contributor.js new file mode 100644 index 0000000..8a874e2 --- /dev/null +++ b/scripts/list-contributions-per-contributor.js @@ -0,0 +1,73 @@ +const promptly = require('promptly'); +const Table = require('cli-table'); + +const initKredits = require('./helpers/init_kredits.js'); + +module.exports = async function(callback) { + let kredits; + try { + kredits = await initKredits(web3); + } catch(e) { + callback(e); + return; + } + + console.log(`Using Contribution at: ${kredits.Contribution.contract.address}`); + + const table = new Table({ + head: ['ID', 'Name', 'Kredits'] + }) + + try { + let currentBlockNumber = await kredits.provider.getBlockNumber(); + console.log(`Current block number: ${currentBlockNumber}`); + + let confirmedBeforeBlock = await promptly.prompt('Before block: '); + let confirmedAfterBlock = await promptly.prompt('After block: '); + + let contributionId = await kredits.Contribution.contract.contributionsCount(); + let nextContribution = true; + + let contributors = {}; + + while (nextContribution) { + console.log(`Getting contribution: ${contributionId}`); + let contribution = await kredits.Contribution.getById(contributionId); + contributionId = contributionId - 1; + + // check if the contribution is older + // in that case we assume all other contributions now are older + if (contribution.confirmedAtBlock < confirmedAfterBlock) { + nextContribution = false; + } + + // if the contribution is within the range count it + if (!contribution.vetoed && contribution.confirmedAtBlock < confirmedBeforeBlock && contribution.confirmedAtBlock > confirmedAfterBlock) { + // init + if (!contributors[contribution.conributorId]) { + contributors[contribution.contributorId] = 0; + } + contributors[contribution.contributorId] += contribution.amount; + } + } + console.log(contributors); + const promise = Object.keys(contributors).map((contributorId) => { + return kredits.Contributor.getById(contributorId).then(contributorId => { + table.push([ + contributorId, + `${contributor.name}`, + `${contributors[conributorId]}` + ]); + }); + }); + + Promise.all(promise).then(() => { + console.log(`Total Kredits: ${Object.values(contributors).reduce((a,b) => {return a+b},0)}`); + console.log(table.toString()); + }); + } catch (err) { + console.log(err); + } + + callback(); +} From 0df7930e062c208ad97103a31e9151dae3109880 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Tue, 22 Dec 2020 12:28:34 +0100 Subject: [PATCH 2/2] Get it running --- scripts/list-contributions-per-contributor.js | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/scripts/list-contributions-per-contributor.js b/scripts/list-contributions-per-contributor.js index 8a874e2..e951733 100644 --- a/scripts/list-contributions-per-contributor.js +++ b/scripts/list-contributions-per-contributor.js @@ -25,16 +25,25 @@ module.exports = async function(callback) { let confirmedBeforeBlock = await promptly.prompt('Before block: '); let confirmedAfterBlock = await promptly.prompt('After block: '); + let tokens = {}; + let contributors = await kredits.Contributor.all(); + contributors.forEach(c => { + tokens[c.id] = { amount: 0, contributor: c }; + }); + let contributionId = await kredits.Contribution.contract.contributionsCount(); let nextContribution = true; - let contributors = {}; - while (nextContribution) { console.log(`Getting contribution: ${contributionId}`); let contribution = await kredits.Contribution.getById(contributionId); contributionId = contributionId - 1; + // if no conribution is found + if (!contribution.exists) { + nextContribution = false; + break; + } // check if the contribution is older // in that case we assume all other contributions now are older if (contribution.confirmedAtBlock < confirmedAfterBlock) { @@ -44,27 +53,21 @@ module.exports = async function(callback) { // if the contribution is within the range count it if (!contribution.vetoed && contribution.confirmedAtBlock < confirmedBeforeBlock && contribution.confirmedAtBlock > confirmedAfterBlock) { // init - if (!contributors[contribution.conributorId]) { - contributors[contribution.contributorId] = 0; - } - contributors[contribution.contributorId] += contribution.amount; + tokens[contribution.contributorId].amount = tokens[contribution.contributorId].amount + contribution.amount; } } - console.log(contributors); - const promise = Object.keys(contributors).map((contributorId) => { - return kredits.Contributor.getById(contributorId).then(contributorId => { - table.push([ - contributorId, - `${contributor.name}`, - `${contributors[conributorId]}` - ]); - }); + + Object.keys(tokens).forEach((contributorId) => { + table.push([ + contributorId, + `${tokens[contributorId].contributor.name}`, + `${tokens[contributorId].amount}` + ]); }); - Promise.all(promise).then(() => { - console.log(`Total Kredits: ${Object.values(contributors).reduce((a,b) => {return a+b},0)}`); - console.log(table.toString()); - }); + const total = Object.keys(tokens).map(cid => { return tokens[cid].amount}).reduce((a,b) => { return a+b }, 0); + console.log(`Total confirmed Kredits: ${total} between block ${confirmedAfterBlock} and ${confirmedBeforeBlock}`); + console.log(table.toString()); } catch (err) { console.log(err); }