Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 6961fa2

Browse files
authored
Merge pull request #2838 from ethereum/issue/2833
SyncingSubscription fix
2 parents 08388f4 + 735c7c1 commit 6961fa2

File tree

3 files changed

+35
-50
lines changed

3 files changed

+35
-50
lines changed

packages/web3-core-subscriptions/src/subscriptions/eth/SyncingSubscription.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,27 @@ export default class SyncingSubscription extends AbstractSubscription {
4545
* @returns {Object}
4646
*/
4747
onNewSubscriptionItem(subscriptionItem) {
48-
const isSyncing = subscriptionItem.result.syncing;
48+
if (typeof subscriptionItem !== 'boolean') {
49+
const isSyncing = subscriptionItem.syncing;
4950

50-
if (this.isSyncing === null) {
51-
this.isSyncing = isSyncing;
52-
this.emit('changed', this.isSyncing);
53-
}
51+
if (this.isSyncing === null) {
52+
this.isSyncing = isSyncing;
53+
this.emit('changed', this.isSyncing);
5454

55-
if (this.isSyncing === true && isSyncing === false) {
56-
this.isSyncing = isSyncing;
57-
this.emit('changed', this.isSyncing);
58-
}
55+
return subscriptionItem.status;
56+
}
5957

60-
if (this.isSyncing === false && isSyncing === true) {
61-
this.isSyncing = isSyncing;
62-
this.emit('changed', this.isSyncing);
58+
if (this.isSyncing !== isSyncing) {
59+
this.isSyncing = isSyncing;
60+
this.emit('changed', this.isSyncing);
61+
}
62+
63+
return subscriptionItem.status;
6364
}
6465

65-
return this.formatters.outputSyncingFormatter(subscriptionItem);
66+
this.isSyncing = subscriptionItem;
67+
this.emit('changed', subscriptionItem);
68+
69+
return subscriptionItem;
6670
}
6771
}
Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
import {formatters} from 'web3-core-helpers';
21
import SyncingSubscription from '../../../../src/subscriptions/eth/SyncingSubscription';
32

4-
// Mocks
5-
jest.mock('web3-core-helpers');
6-
73
/**
84
* SyncingSubscription test
95
*/
106
describe('SyncingSubscriptionTest', () => {
117
let syncingSubscription;
128

139
beforeEach(() => {
14-
syncingSubscription = new SyncingSubscription({}, formatters, {});
10+
syncingSubscription = new SyncingSubscription({}, {}, {});
1511
});
1612

1713
it('constructor check', () => {
@@ -22,16 +18,10 @@ describe('SyncingSubscriptionTest', () => {
2218
expect(syncingSubscription.type).toEqual('eth_subscribe');
2319

2420
expect(syncingSubscription.options).toEqual(null);
25-
26-
expect(syncingSubscription.utils).toEqual({});
27-
28-
expect(syncingSubscription.formatters).toEqual(formatters);
29-
30-
expect(syncingSubscription.moduleInstance).toEqual({});
3121
});
3222

33-
it('onNewSubscriptionItem calls outputSyncingFormatter and emits "changed" event (isSyncing: null)', (done) => {
34-
const item = {result: {syncing: true}};
23+
it('calls onNewSubscriptionItem and emits the initial "changed" event', (done) => {
24+
const item = {syncing: true};
3525

3626
syncingSubscription.on('changed', (subscriptionItem) => {
3727
expect(subscriptionItem).toEqual(true);
@@ -40,37 +30,28 @@ describe('SyncingSubscriptionTest', () => {
4030
});
4131

4232
syncingSubscription.onNewSubscriptionItem(item);
43-
44-
expect(formatters.outputSyncingFormatter).toHaveBeenCalledWith(item);
4533
});
4634

47-
it('onNewSubscriptionItem calls outputSyncingFormatter and emits "changed" event (isSyncing: true)', (done) => {
48-
const item = {result: {syncing: false}};
35+
it('calls onNewSubscriptionItem and emits the "changed" event', (done) => {
36+
const item = {syncing: false};
4937

5038
syncingSubscription.on('changed', (subscriptionItem) => {
51-
expect(subscriptionItem).toEqual(item.result.syncing);
39+
expect(subscriptionItem).toEqual(false);
5240

5341
done();
5442
});
5543

5644
syncingSubscription.isSyncing = true;
5745
syncingSubscription.onNewSubscriptionItem(item);
58-
59-
expect(formatters.outputSyncingFormatter).toHaveBeenCalledWith(item);
6046
});
6147

62-
it('onNewSubscriptionItem calls outputSyncingFormatter and emits "changed" event (isSyncing: false)', (done) => {
63-
const item = {result: {syncing: true}};
64-
65-
syncingSubscription.on('changed', (subscriptionItem) => {
66-
expect(subscriptionItem).toEqual(item.result.syncing);
67-
68-
done();
69-
});
70-
71-
syncingSubscription.isSyncing = false;
72-
syncingSubscription.onNewSubscriptionItem(item);
48+
it('calls onNewSubscriptionItem and returns the boolean', () => {
49+
expect(syncingSubscription.onNewSubscriptionItem(true)).toEqual(true);
50+
});
7351

74-
expect(formatters.outputSyncingFormatter).toHaveBeenCalledWith(item);
52+
it('calls onNewSubscriptionItem and returns the syncing status', () => {
53+
expect(
54+
syncingSubscription.onNewSubscriptionItem({status: true, syncing: true})
55+
).toEqual(true);
7556
});
7657
});

packages/web3-eth/types/index.d.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,11 @@ export interface Method {
163163
}
164164

165165
export interface Syncing {
166-
startingBlock: number;
167-
currentBlock: number;
168-
highestBlock: number;
169-
knownStates: number;
170-
pulledStates: number;
166+
StartingBlock: number;
167+
CurrentBlock: number;
168+
HighestBlock: number;
169+
KnownStates: number;
170+
PulledStates: number;
171171
}
172172

173173
export interface BlockHeader {

0 commit comments

Comments
 (0)