From 59135bf3120fc572fb7f55d94a59b0422cfac2d0 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 19 Apr 2019 13:06:36 +0200 Subject: [PATCH] Add contract calls for total contribution balances Those methods return the total kredits amounts of contribtions. --- apps/contribution/contracts/Contribution.sol | 20 ++++++++++++++++++++ scripts/list-contributions.js | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/contribution/contracts/Contribution.sol b/apps/contribution/contracts/Contribution.sol index 7aeae63..f2cab6a 100644 --- a/apps/contribution/contracts/Contribution.sol +++ b/apps/contribution/contracts/Contribution.sol @@ -118,6 +118,26 @@ contract Contribution is AragonApp { // Custom functions // + function totalCount(bool confirmedOnly) public view returns (uint256 count) { + for (uint32 i = 1; i <= contributionsCount; i++) { + ContributionData memory c = contributions[i]; + if (block.number >= c.confirmedAtBlock || !confirmedOnly) { + count += c.amount; // should use safemath + } + } + } + + function contributorTotalCount(uint32 contributorId, bool confirmedOnly) public view returns (uint256 count) { + uint256 tokenBalance = ownedContributions[contributorId].length; + for (uint256 i = 0; i < tokenBalance; i++) { + uint32 cId = ownedContributions[contributorId][i]; + ContributionData memory c = contributions[cId]; + if (block.number >= c.confirmedAtBlock || !confirmedOnly) { + count += c.amount; // should use safemath + } + } + } + function getContribution(uint32 contributionId) public view returns (uint32 id, uint32 contributorId, uint32 amount, bool claimed, bytes32 hashDigest, uint8 hashFunction, uint8 hashSize, uint256 confirmedAtBlock, bool exists, bool vetoed) { id = contributionId; ContributionData storage c = contributions[id]; diff --git a/scripts/list-contributions.js b/scripts/list-contributions.js index 0f92ae4..56300c9 100644 --- a/scripts/list-contributions.js +++ b/scripts/list-contributions.js @@ -22,6 +22,7 @@ module.exports = async function(callback) { let blockNumber = await kredits.provider.getBlockNumber(); let contributions = await kredits.Contribution.all(); + console.log(`Current block number: ${blockNumber}`); contributions.forEach((c) => { const confirmed = c.confirmedAtBlock <= blockNumber; @@ -30,7 +31,7 @@ module.exports = async function(callback) { c.contributorId, `${c.description}`, c.amount.toString(), - confirmed, + `${confirmed} (${c.confirmedAtBlock})`, c.vetoed, c.claimed, c.ipfsHash @@ -38,6 +39,9 @@ module.exports = async function(callback) { }); console.log(table.toString()); + + let totalContributionBalances = await kredits.Contribution.functions.totalCount(true); + console.log(`Total confirmed balance: ${totalContributionBalances}`); } catch (err) { console.log(err); }