From 7e04918a49af0b64e89a59052f535e8062fef3f4 Mon Sep 17 00:00:00 2001 From: Keith Date: Thu, 14 Nov 2019 15:04:19 +0800 Subject: [PATCH 1/2] feat(neuron-ui): add difficulty formatter --- .../src/components/Overview/index.tsx | 4 +-- .../neuron-ui/src/containers/Main/hooks.ts | 2 +- .../neuron-ui/src/states/initStates/app.ts | 2 +- .../src/states/stateProvider/reducer.ts | 2 +- .../src/stories/Overview.stories.tsx | 4 +-- .../difficultyFormatter/fixtures.json | 8 ++++++ .../difficultyFormatter/index.test.ts | 9 +++++++ packages/neuron-ui/src/types/App/index.d.ts | 2 +- packages/neuron-ui/src/utils/formatters.ts | 26 +++++++++++++++++++ 9 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json create mode 100644 packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts diff --git a/packages/neuron-ui/src/components/Overview/index.tsx b/packages/neuron-ui/src/components/Overview/index.tsx index 0dedc52dcf..f9d2b69b3d 100644 --- a/packages/neuron-ui/src/components/Overview/index.tsx +++ b/packages/neuron-ui/src/components/Overview/index.tsx @@ -7,7 +7,7 @@ import PropertyList, { Property } from 'widgets/PropertyList' import { StateWithDispatch } from 'states/stateProvider/reducer' import { updateTransactionList } from 'states/stateProvider/actionCreators' -import { localNumberFormatter, shannonToCKBFormatter } from 'utils/formatters' +import { localNumberFormatter, shannonToCKBFormatter, difficultyFormatter } from 'utils/formatters' import { epochParser } from 'utils/parsers' import { PAGE_SIZE, Routes, CONFIRMATION_THRESHOLD } from 'utils/const' import { backToTop } from 'utils/animations' @@ -104,7 +104,7 @@ const Overview = ({ }, { label: t('overview.difficulty'), - value: localNumberFormatter(+difficulty), + value: difficultyFormatter(difficulty), }, ], [t, chain, epoch, difficulty, tipBlockNumber] diff --git a/packages/neuron-ui/src/containers/Main/hooks.ts b/packages/neuron-ui/src/containers/Main/hooks.ts index 568df8775a..1bd1a525ee 100644 --- a/packages/neuron-ui/src/containers/Main/hooks.ts +++ b/packages/neuron-ui/src/containers/Main/hooks.ts @@ -42,7 +42,7 @@ export const useSyncChainData = ({ chainURL, dispatch }: { chainURL: string; dis tipBlockHash: header.hash, tipBlockTimestamp: +header.timestamp, chain: chainInfo.chain, - difficulty: `${BigInt(chainInfo.difficulty)}`, + difficulty: BigInt(chainInfo.difficulty), epoch: chainInfo.epoch, }, }) diff --git a/packages/neuron-ui/src/states/initStates/app.ts b/packages/neuron-ui/src/states/initStates/app.ts index 1eabdd4b18..c7eedb58c2 100644 --- a/packages/neuron-ui/src/states/initStates/app.ts +++ b/packages/neuron-ui/src/states/initStates/app.ts @@ -5,7 +5,7 @@ const appState: State.App = { tipBlockHash: '', tipBlockTimestamp: 0, chain: '', - difficulty: '', + difficulty: BigInt(0), epoch: '', send: { txID: '', diff --git a/packages/neuron-ui/src/states/stateProvider/reducer.ts b/packages/neuron-ui/src/states/stateProvider/reducer.ts index c464867d10..54ed5a328b 100644 --- a/packages/neuron-ui/src/states/stateProvider/reducer.ts +++ b/packages/neuron-ui/src/states/stateProvider/reducer.ts @@ -197,7 +197,7 @@ export const reducer = ( ...app, tipBlockNumber: '0', chain: '', - difficulty: '', + difficulty: BigInt(0), epoch: '', }, chain: { diff --git a/packages/neuron-ui/src/stories/Overview.stories.tsx b/packages/neuron-ui/src/stories/Overview.stories.tsx index 7a95bfea96..9f36742a71 100644 --- a/packages/neuron-ui/src/stories/Overview.stories.tsx +++ b/packages/neuron-ui/src/stories/Overview.stories.tsx @@ -16,7 +16,7 @@ const stateTemplate = { app: { ...initStates.app, epoch: '1', - difficulty: '0x111111', + difficulty: BigInt('0x111111'), chain: 'chain_dev', }, wallet: { @@ -77,7 +77,7 @@ stories.addDecorator(withKnobs).add('With knobs', () => { app: { ...initStates.app, epoch: text('Epoch', '1'), - difficulty: text('Difficulty', '0x111'), + difficulty: BigInt(100000), chain: text('Chain', 'chain_dev'), }, wallet: { diff --git a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json new file mode 100644 index 0000000000..b0f2043ba2 --- /dev/null +++ b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json @@ -0,0 +1,8 @@ +[ + { "difficulty": 0, "expected": "0 H" }, + { "difficulty": 123, "expected": "123 H" }, + { "difficulty": 12345, "expected": "12,345 H" }, + { "difficulty": 123454669, "expected": "123,454.67 KH" }, + { "difficulty": 1234546698945, "expected": "1,234.55 GH" }, + { "difficulty": 100003439, "expected": "100,003.44 KH" } +] diff --git a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts new file mode 100644 index 0000000000..98640d956f --- /dev/null +++ b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts @@ -0,0 +1,9 @@ +import { difficultyFormatter } from 'utils/formatters' +import fixtures from './fixtures.json' + +describe('test difficulty formatter', () => { + test.each(fixtures)(`%s => %s`, ({ difficulty, expected }) => { + const str = difficultyFormatter(difficulty) + expect(str).toBe(expected) + }) +}) diff --git a/packages/neuron-ui/src/types/App/index.d.ts b/packages/neuron-ui/src/types/App/index.d.ts index b45c5513cc..4654320f69 100644 --- a/packages/neuron-ui/src/types/App/index.d.ts +++ b/packages/neuron-ui/src/types/App/index.d.ts @@ -77,7 +77,7 @@ declare namespace State { tipBlockHash: string tipBlockTimestamp: number chain: string - difficulty: string + difficulty: bigint epoch: string send: Send passwordRequest: { diff --git a/packages/neuron-ui/src/utils/formatters.ts b/packages/neuron-ui/src/utils/formatters.ts index 7edb19e965..805d7879a7 100644 --- a/packages/neuron-ui/src/utils/formatters.ts +++ b/packages/neuron-ui/src/utils/formatters.ts @@ -177,6 +177,31 @@ export const failureResToNotification = (res: any): State.Message => { } } +export const difficultyFormatter = (value: bigint) => { + const units = new Map([ + ['YH/s', 1e24], + ['ZH/s', 1e21], + ['EH/s', 1e18], + ['PH/s', 1e15], + ['TH/s', 1e12], + ['GH/s', 1e9], + ['MH/s', 1e6], + ['KH/s', 1e3], + ]) + + /* eslint-disable no-restricted-syntax */ + for (const [unit, range] of units) { + if (value >= range * 1e3) { + const integer = value / BigInt(range) + const decimal = (Number(value) / range).toFixed(2).split('.')[1] + return `${localNumberFormatter(integer)}.${decimal} ${unit}` + } + } + /* eslint-enable no-restricted-syntax */ + + return `${localNumberFormatter(value)} H/s` +} + export default { queryFormatter, currencyFormatter, @@ -184,6 +209,7 @@ export default { shannonToCKBFormatter, localNumberFormatter, uniformTimeFormatter, + difficultyFormatter, addressesToBalance, outputsToTotalAmount, failureResToNotification, From 23fe3b118cd25a397c40bd45377e7ee13ebbfea2 Mon Sep 17 00:00:00 2001 From: Keith Date: Thu, 14 Nov 2019 15:24:20 +0800 Subject: [PATCH 2/2] test(neuron-ui): fix the tests of difficulty formatter --- .../formatters/difficultyFormatter/fixtures.json | 12 ++++++------ .../formatters/difficultyFormatter/index.test.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json index b0f2043ba2..b7c5781b48 100644 --- a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json +++ b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/fixtures.json @@ -1,8 +1,8 @@ [ - { "difficulty": 0, "expected": "0 H" }, - { "difficulty": 123, "expected": "123 H" }, - { "difficulty": 12345, "expected": "12,345 H" }, - { "difficulty": 123454669, "expected": "123,454.67 KH" }, - { "difficulty": 1234546698945, "expected": "1,234.55 GH" }, - { "difficulty": 100003439, "expected": "100,003.44 KH" } + { "difficulty": 0, "expected": "0 H/s" }, + { "difficulty": 123, "expected": "123 H/s" }, + { "difficulty": 12345, "expected": "12,345 H/s" }, + { "difficulty": 123454669, "expected": "123,454.67 KH/s" }, + { "difficulty": 1234546698945, "expected": "1,234.55 GH/s" }, + { "difficulty": 100003439, "expected": "100,003.44 KH/s" } ] diff --git a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts index 98640d956f..e5cfc335db 100644 --- a/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts +++ b/packages/neuron-ui/src/tests/formatters/difficultyFormatter/index.test.ts @@ -3,7 +3,7 @@ import fixtures from './fixtures.json' describe('test difficulty formatter', () => { test.each(fixtures)(`%s => %s`, ({ difficulty, expected }) => { - const str = difficultyFormatter(difficulty) + const str = difficultyFormatter(BigInt(difficulty)) expect(str).toBe(expected) }) })