From 5ce00c9ddc51b2dda930b6d94ec693032d888072 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 11 Aug 2020 09:30:17 +0200 Subject: [PATCH] use decimal.js for price comparison --- package.json | 1 + .../organisms/AssetActions/index.tsx | 6 ++-- src/utils/compareAsBN.ts | 31 ++++++++----------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 6c4d32360..8faf8f9ba 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "axios": "^0.19.2", "classnames": "^2.2.6", "date-fns": "^2.15.0", + "decimal.js": "^10.2.0", "dotenv": "^8.2.0", "ethereum-blockies": "github:MyEtherWallet/blockies", "filesize": "^6.1.0", diff --git a/src/components/organisms/AssetActions/index.tsx b/src/components/organisms/AssetActions/index.tsx index df1293a9f..8f508d521 100644 --- a/src/components/organisms/AssetActions/index.tsx +++ b/src/components/organisms/AssetActions/index.tsx @@ -6,7 +6,7 @@ import { MetadataMarket } from '../../../@types/Metadata' import { DDO } from '@oceanprotocol/lib' import Tabs from '../../atoms/Tabs' import { useOcean } from '@oceanprotocol/react' -import compareAsBN, { Comparison } from '../../../utils/compareAsBN' +import compareAsBN from '../../../utils/compareAsBN' export default function AssetActions({ metadata, @@ -26,9 +26,7 @@ export default function AssetActions({ if (!price || !balance || !balance.ocean) return const isFree = price === '0' - setIsBalanceSufficient( - isFree ? true : compareAsBN(balance.ocean, price, Comparison.gte) - ) + setIsBalanceSufficient(isFree ? true : compareAsBN(balance.ocean, price)) return () => { setIsBalanceSufficient(false) diff --git a/src/utils/compareAsBN.ts b/src/utils/compareAsBN.ts index 5f860c0e7..8038773d9 100644 --- a/src/utils/compareAsBN.ts +++ b/src/utils/compareAsBN.ts @@ -1,21 +1,16 @@ -import BN from 'bn.js' +import { Decimal } from 'decimal.js' -export enum Comparison { - 'lt' = 'lt', - 'lte' = 'lte', - 'gt' = 'gt', - 'gte' = 'gte', - 'eq' = 'eq' -} +// Run decimal.js comparison +// http://mikemcl.github.io/decimal.js/#cmp +export default function compareAsBN(balance: string, price: string): boolean { + const aBN = new Decimal(balance) + const bBN = new Decimal(price) + const compare = aBN.comparedTo(bBN) -// Run the corresponding bn.js comparison: -// https://github.com/indutny/bn.js/#utilities -export default function compareAsBN( - a: string, - b: string, - comparison: Comparison -): boolean { - const aBN = new BN(a) - const bBN = new BN(b) - return aBN[comparison](bBN) + switch (compare) { + case 1 || 0: // balance is greater or equal to price + return true + default: + return false + } }