From ee8b76233a4b6898590341c5104a16d203612745 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Wed, 25 Jul 2018 08:13:06 +0200 Subject: [PATCH 1/4] fix: Relates to #9. Reuse calculation of average block time Issues: * Unable to import `blockAverage` into Chain.ts or Node.ts due to Issue #21. * TypeScript says `[ts] Module '"/Users/Me/code/blockchain/clones/paritytech/dotstats/packages/common/build/index"' has no exported member 'blockAverage'.` --- packages/backend/src/Chain.ts | 14 ++------------ packages/backend/src/Node.ts | 21 ++++----------------- packages/common/src/block.ts | 19 +++++++++++++++++++ packages/common/src/index.ts | 1 + 4 files changed, 26 insertions(+), 29 deletions(-) create mode 100644 packages/common/src/block.ts diff --git a/packages/backend/src/Chain.ts b/packages/backend/src/Chain.ts index 7a6c5bb..bc95389 100644 --- a/packages/backend/src/Chain.ts +++ b/packages/backend/src/Chain.ts @@ -2,7 +2,7 @@ import * as EventEmitter from 'events'; import Node from './Node'; import Feed from './Feed'; import FeedSet from './FeedSet'; -import { Maybe, Types, FeedMessage } from '@dotstats/common'; +import { Maybe, Types, FeedMessage, blockAverage } from '@dotstats/common'; const BLOCK_TIME_HISTORY = 10; @@ -112,17 +112,7 @@ export default class Chain { private updateAverageBlockTime(height: Types.BlockNumber, now: Types.Timestamp) { this.blockTimes[height % BLOCK_TIME_HISTORY] = now - this.blockTimestamp; - let sum = 0; - let count = 0; - - for (const time of this.blockTimes) { - if (time) { - sum += time; - count += 1; - } - } - // We are guaranteed that count > 0 - this.averageBlockTime = (sum / count) as Types.Milliseconds; + this.averageBlockTime = blockAverage(this.blockTimes); } } diff --git a/packages/backend/src/Node.ts b/packages/backend/src/Node.ts index 40637a1..fd5b10e 100644 --- a/packages/backend/src/Node.ts +++ b/packages/backend/src/Node.ts @@ -1,6 +1,7 @@ import * as WebSocket from 'ws'; import * as EventEmitter from 'events'; -import { noop, timestamp, Maybe, Types, idGenerator } from '@dotstats/common'; + +import { noop, timestamp, Maybe, Types, idGenerator, blockAverage } from '@dotstats/common'; import { parseMessage, getBestBlock, Message, BestBlock, SystemInterval } from './message'; import { locate, Location } from './location'; @@ -176,22 +177,8 @@ export default class Node { return location ? [location.lat, location.lon, location.city] : null; } - public get average(): number { - let accounted = 0; - let sum = 0; - - for (const time of this.blockTimes) { - if (time) { - accounted += 1; - sum += time; - } - } - - if (accounted === 0) { - return 0; - } - - return sum / accounted; + public get average(): Types.Milliseconds { + return blockAverage(this.blockTimes); } public get localBlockAt(): Types.Milliseconds { diff --git a/packages/common/src/block.ts b/packages/common/src/block.ts new file mode 100644 index 0000000..dc853cd --- /dev/null +++ b/packages/common/src/block.ts @@ -0,0 +1,19 @@ +import { Maybe, Types } from '@dotstats/common'; + +export function blockAverage(blockTimes: Array): Maybe { + let count = 0; + let sum = 0; + + for (const time of blockTimes) { + if (time) { + count += 1; + sum += time; + } + } + + if (count === 0) { + return 0 as Types.Milliseconds; + } + + return (sum / count) as Types.Milliseconds; +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index c330025..aeb1ad4 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,5 +1,6 @@ export * from './helpers'; export * from './id'; +export * from './block'; import * as Types from './types'; import * as FeedMessage from './feed'; From 760e45e89fd7c5dd3f29f74b5ea164cfe5efb486 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 26 Jul 2018 17:48:19 +0200 Subject: [PATCH 2/4] fix: Remove Maybe from return type since not returning null value --- packages/common/src/block.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/src/block.ts b/packages/common/src/block.ts index dc853cd..e15941b 100644 --- a/packages/common/src/block.ts +++ b/packages/common/src/block.ts @@ -1,6 +1,6 @@ import { Maybe, Types } from '@dotstats/common'; -export function blockAverage(blockTimes: Array): Maybe { +export function blockAverage(blockTimes: Array): Types.Milliseconds { let count = 0; let sum = 0; From b14b3383fbd8d6794ddf251841443a506306edc4 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 26 Jul 2018 17:50:05 +0200 Subject: [PATCH 3/4] fix: Remove Maybe from import --- packages/common/src/block.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/src/block.ts b/packages/common/src/block.ts index e15941b..693e8c8 100644 --- a/packages/common/src/block.ts +++ b/packages/common/src/block.ts @@ -1,4 +1,4 @@ -import { Maybe, Types } from '@dotstats/common'; +import { Types } from '@dotstats/common'; export function blockAverage(blockTimes: Array): Types.Milliseconds { let count = 0; From caab03a6e9bf9cb51847e5f59ee98c9df78d008f Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 26 Jul 2018 18:07:15 +0200 Subject: [PATCH 4/4] fix: Do not import from same package as importing into as recursive --- packages/common/src/block.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/common/src/block.ts b/packages/common/src/block.ts index 693e8c8..c48fc32 100644 --- a/packages/common/src/block.ts +++ b/packages/common/src/block.ts @@ -1,6 +1,6 @@ -import { Types } from '@dotstats/common'; +import { Milliseconds } from './types'; -export function blockAverage(blockTimes: Array): Types.Milliseconds { +export function blockAverage(blockTimes: Array): Milliseconds { let count = 0; let sum = 0; @@ -12,8 +12,8 @@ export function blockAverage(blockTimes: Array): Types.Milliseconds { } if (count === 0) { - return 0 as Types.Milliseconds; + return 0 as Milliseconds; } - return (sum / count) as Types.Milliseconds; + return (sum / count) as Milliseconds; }