From 2aae2a8f90b608757105cc420d4059cda458fa25 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 19 Apr 2019 11:37:18 +0200 Subject: [PATCH 1/3] Fix kredits balance handling Kredits are stored on the Token contract as uint256 / bignumbers with 18 decimal points. Just like Ether and required by the ERC20 standard. So we need to work with bignumbers and format a bignumber value here. --- app/models/contributor.js | 3 ++- app/services/kredits.js | 6 +++++- app/utils/cps/kredits.js | 25 +++++++++++++++++++++++++ app/utils/format-kredits.js | 9 +++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 app/utils/cps/kredits.js create mode 100644 app/utils/format-kredits.js diff --git a/app/models/contributor.js b/app/models/contributor.js index 3464aee..6bf771e 100644 --- a/app/models/contributor.js +++ b/app/models/contributor.js @@ -1,12 +1,13 @@ import { computed } from '@ember/object'; import EmberObject from '@ember/object'; import bignumber from 'kredits-web/utils/cps/bignumber'; +import kreditsValue from 'kredits-web/utils/cps/kredits'; export default EmberObject.extend({ // Contract id: bignumber('idRaw', 'toString'), account: null, - balance: bignumber('balanceRaw', 'toNumber'), + balance: kreditsValue('balanceRaw'), isCore: false, ipfsHash: null, diff --git a/app/services/kredits.js b/app/services/kredits.js index 841b27c..f4aa90d 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -7,6 +7,8 @@ import { computed } from '@ember/object'; import { alias, notEmpty } from '@ember/object/computed'; import { isEmpty } from '@ember/utils'; +import formatKredits from 'kredits-web/utils/format-kredits'; + import config from 'kredits-web/config/environment'; import Contributor from 'kredits-web/models/contributor' import Proposal from 'kredits-web/models/proposal' @@ -109,7 +111,9 @@ export default Service.extend({ }, totalSupply: computed(function() { - return this.kredits.Token.functions.totalSupply(); + return this.kredits.Token.functions.totalSupply().then(total => { + return Promise.resolve(formatKredits(total)); + }) }), loadInitialData() { diff --git a/app/utils/cps/kredits.js b/app/utils/cps/kredits.js new file mode 100644 index 0000000..0df3532 --- /dev/null +++ b/app/utils/cps/kredits.js @@ -0,0 +1,25 @@ +import { computed } from '@ember/object'; +import ethers from 'npm:ethers'; +//import formatKredits from 'kredits-web/utils/format-kredits.js'; + +function formatKredits(value, options) { + let etherValue = ethers.utils.formatEther(value); + if (!options.decimals) { + etherValue = parseInt(etherValue).toString(); + } + return etherValue; +} + +export default function(dependentKey, options = {}) { + return computed(dependentKey, { + get () { + const value = this.get(dependentKey); + return formatKredits(value, options); + }, + set (key, value) { + const bnValue = ethers.utils.bigNumberify(value); + this.set(dependentKey, bnValue); + return formatKredits(bnValue, options); + } + }); +} diff --git a/app/utils/format-kredits.js b/app/utils/format-kredits.js new file mode 100644 index 0000000..fd060b7 --- /dev/null +++ b/app/utils/format-kredits.js @@ -0,0 +1,9 @@ +import ethers from 'npm:ethers'; + +export default function(value, options = {}) { + let etherValue = ethers.utils.formatEther(value); + if (!options.decimals) { + etherValue = parseInt(etherValue).toString(); + } + return etherValue; +} From 6f4afaf84a1db643687949f6f90bfa0be68f15b0 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 19 Apr 2019 11:45:53 +0200 Subject: [PATCH 2/3] List only contrbutors with more than 0 kredits This is a bit of a problem because we list integer values, so if somebody has less than 1 Kredit than they would still show up. Not sure what is the best to do here. - but this should be good enough for now. --- app/controllers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/index.js b/app/controllers/index.js index a6246a1..82e24e1 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -9,7 +9,7 @@ export default Controller.extend({ contributors: alias('kredits.contributors'), contributorsWithKredits: filter('contributors', function(contributor) { - return contributor.get('balance') !== 0; + return contributor.get('balanceRaw').gt(0); }), contributorsSorting: Object.freeze(['balance:desc']), contributorsSorted: sort('contributorsWithKredits', 'contributorsSorting'), From 562a8d159b75112a185f207ee72b58c1348b5e88 Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Fri, 19 Apr 2019 14:54:18 +0200 Subject: [PATCH 3/3] Cleanup --- app/services/kredits.js | 2 +- app/utils/cps/kredits.js | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/app/services/kredits.js b/app/services/kredits.js index f4aa90d..5e4f3fc 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -112,7 +112,7 @@ export default Service.extend({ totalSupply: computed(function() { return this.kredits.Token.functions.totalSupply().then(total => { - return Promise.resolve(formatKredits(total)); + return formatKredits(total); }) }), diff --git a/app/utils/cps/kredits.js b/app/utils/cps/kredits.js index 0df3532..923fd3d 100644 --- a/app/utils/cps/kredits.js +++ b/app/utils/cps/kredits.js @@ -1,14 +1,6 @@ import { computed } from '@ember/object'; import ethers from 'npm:ethers'; -//import formatKredits from 'kredits-web/utils/format-kredits.js'; - -function formatKredits(value, options) { - let etherValue = ethers.utils.formatEther(value); - if (!options.decimals) { - etherValue = parseInt(etherValue).toString(); - } - return etherValue; -} +import formatKredits from 'kredits-web/utils/format-kredits'; export default function(dependentKey, options = {}) { return computed(dependentKey, {