diff --git a/src/subspace.js b/src/subspace.js index 4272488..b98f4e5 100644 --- a/src/subspace.js +++ b/src/subspace.js @@ -31,7 +31,7 @@ export default class Subspace { this.options = {}; this.options.refreshLastNBlocks = options.refreshLastNBlocks ?? 12; - this.options.callInterval = options.callInterval ?? 0; + this.options.callInterval = options.callInterval; this.options.dbFilename = options.dbFilename ?? "subspace.db"; this.options.disableDatabase = options.disableDatabase; @@ -69,7 +69,11 @@ export default class Subspace { if (this.isWebsocketProvider) { this._initNewBlocksSubscription(); } else { - this.options.callInterval = this.options.callInterval || 1000; + + if(!this.options.callInterval){ + this.options.callInterval = Math.max(this._calcAverage(), 1000); + } + this._initCallInterval(); } } @@ -137,6 +141,15 @@ export default class Subspace { } } + _calcAverage(){ + const times = []; + for (let i = 1; i < this.latest10Blocks.length; i++) { + let time = this.latest10Blocks[i].timestamp - this.latest10Blocks[i - 1].timestamp; + times.push(time); + } + return times.length ? Math.round(times.reduce((a, b) => a + b) / times.length) * 1000 : 0; + } + _initNewBlocksSubscription() { if(this.options.callInterval !== 0) return; @@ -268,7 +281,7 @@ export default class Subspace { } trackBlock() { - return this._getDistinctObservableFromPromise("gasPrice", () => this.web3.getBlock("latest"), block => { + return this._getDistinctObservableFromPromise("block", () => this.web3.getBlock("latest"), block => { if (this.latest10Blocks[this.latest10Blocks.length - 1].number === block.number) return; this.latest10Blocks.push(block); if (this.latest10Blocks.length > 10) { @@ -283,17 +296,10 @@ export default class Subspace { trackAverageBlocktime() { return this._getObservable("avgBlockTime", () => { - const calcAverage = () => { - const times = []; - for (let i = 1; i < this.latest10Blocks.length; i++) { - let time = this.latest10Blocks[i].timestamp - this.latest10Blocks[i - 1].timestamp; - times.push(time); - } - return times.length ? Math.round(times.reduce((a, b) => a + b) / times.length) * 1000 : 0; - }; + return this.trackBlock().pipe( - map(() => calcAverage()), + map(() => this._calcAverage()), distinctUntilChanged((a, b) => equal(a, b)) ); });