diff --git a/packages/util/src/format/formatBalance.spec.ts b/packages/util/src/format/formatBalance.spec.ts index 14a0a3dcb..e5da0c4e7 100644 --- a/packages/util/src/format/formatBalance.spec.ts +++ b/packages/util/src/format/formatBalance.spec.ts @@ -9,6 +9,12 @@ import formatBalance from './formatBalance'; describe('formatBalance', () => { const TESTVAL = new BN('123456789000'); + it('does not allow float inputs', () => { + expect( + () => formatBalance(0.01234) + ).toThrow(/integer input value/); + }); + it('formats empty to 0', () => { expect(formatBalance()).toEqual('0'); expect(formatBalance('0')).toEqual('0'); diff --git a/packages/util/src/format/formatBalance.ts b/packages/util/src/format/formatBalance.ts index 7b4b4d497..ad0613d13 100644 --- a/packages/util/src/format/formatBalance.ts +++ b/packages/util/src/format/formatBalance.ts @@ -4,9 +4,10 @@ import BN from 'bn.js'; +import assert from '../assert'; import isUndefined from '../is/undefined'; -import { SI, SI_MID, SiDef, calcSi, findSi } from './si'; import formatDecimal from './formatDecimal'; +import { SI, SI_MID, SiDef, calcSi, findSi } from './si'; type Defaults = { decimals: number, @@ -36,6 +37,8 @@ function _formatBalance (input?: number | string | BN, withSi: boolean = true, d return '0'; } + assert(/^\d+$/.test(text), `Non-integer input value '${text}' supplied to balanceFormat`); + // NOTE We start at midpoint (8) minus 1 - this means that values display as // 123.456 instead of 0.123k (so always 6 relevant). Additionally we us ceil // so there are at most 3 decimal before the decimal seperator