Skip to content

Commit 219d99c

Browse files
committed
fix: sync when start node
1 parent e8aa042 commit 219d99c

2 files changed

Lines changed: 48 additions & 19 deletions

File tree

packages/neuron-wallet/src/startup/sync-block-task/create.ts

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import AddressService from 'services/addresses'
88
import genesisBlockHash from './genesis'
99
import InitDatabase from './init-database'
1010
import DataUpdateSubject from 'models/subjects/data-update'
11+
import logger from 'utils/logger'
12+
import NodeService from 'services/node'
13+
import NetworksService from 'services/networks'
14+
import { distinctUntilChanged } from 'rxjs/operators'
1115

1216
export { genesisBlockHash }
1317

@@ -22,32 +26,49 @@ export interface DatabaseInitParams {
2226
chain: string
2327
}
2428

29+
// network switch or network connect
30+
const networkChange = async (network: NetworkWithID) => {
31+
await InitDatabase.getInstance().stopAndWait()
32+
const info = await InitDatabase.getInstance().init(network)
33+
34+
DataUpdateSubject.next({
35+
dataType: 'transaction',
36+
actionType: 'update',
37+
})
38+
39+
if (info !== 'killed') {
40+
const databaseInitParams: DatabaseInitParams = {
41+
network,
42+
genesisBlockHash: info.hash,
43+
chain: info.chain
44+
}
45+
databaseInitSubject.next(databaseInitParams)
46+
// re init txCount in addresses if switch network
47+
await updateAllAddressesTxCount(network.remote)
48+
}
49+
}
50+
2551
export const databaseInitSubject = new ReplaySubject<DatabaseInitParams>(1)
2652

2753
networkSwitchSubject.subscribe(async (network: NetworkWithID | undefined) => {
2854
if (network) {
29-
// TODO: only switch if genesisHash is different
30-
31-
await InitDatabase.getInstance().stopAndWait()
32-
const info = await InitDatabase.getInstance().init(network)
33-
34-
DataUpdateSubject.next({
35-
dataType: 'transaction',
36-
actionType: 'update',
37-
})
55+
await networkChange(network)
56+
}
57+
})
3858

39-
if (info !== 'killed') {
40-
const databaseInitParams: DatabaseInitParams = {
41-
network,
42-
genesisBlockHash: info.hash,
43-
chain: info.chain
59+
NodeService
60+
.getInstance()
61+
.connectionStatusSubject
62+
.pipe(distinctUntilChanged())
63+
.subscribe(async (status: boolean) => {
64+
if (status && InitDatabase.getInstance().isUsingPrevious()) {
65+
const network = NetworksService.getInstance().getCurrent()
66+
logger.debug('networkConnect:', network)
67+
if (network) {
68+
await networkChange(network)
4469
}
45-
databaseInitSubject.next(databaseInitParams)
46-
// re init txCount in addresses if switch network
47-
await updateAllAddressesTxCount(network.remote)
4870
}
49-
}
50-
})
71+
})
5172

5273
const loadURL = `file://${path.join(__dirname, 'index.html')}`
5374

packages/neuron-wallet/src/startup/sync-block-task/init-database.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ export class InitDatabase {
2828

2929
private killed: boolean = false
3030

31+
private usingPrevious: boolean = false
32+
33+
public isUsingPrevious = (): boolean => {
34+
return this.usingPrevious
35+
}
36+
3137
public init = async (network: NetworkWithID) => {
3238
if (InitDatabase.previous) {
3339
await InitDatabase.previous.stopAndWait()
@@ -39,6 +45,7 @@ export class InitDatabase {
3945
let chain: string = ''
4046
while (!this.stopped && !this.success) {
4147
try {
48+
this.usingPrevious = false
4249
hash = await genesisBlockHash(network.remote)
4350
await initConnection(hash)
4451
chain = await getChain(network.remote)
@@ -68,6 +75,7 @@ export class InitDatabase {
6875
DaoUtils.setDaoScript(metaInfo.daoScriptInfo)
6976
hash = metaInfo.genesisBlockHash
7077
this.success = true
78+
this.usingPrevious = true
7179
} catch (error) {
7280
logger.error('get cached meta info error:', err)
7381
Utils.sleep(5000)

0 commit comments

Comments
 (0)