Skip to content

Commit 81f1eff

Browse files
committed
feat: Remove ChainInfo moving its feature into NetworksService
1 parent 0673343 commit 81f1eff

16 files changed

Lines changed: 94 additions & 152 deletions

File tree

packages/neuron-wallet/src/controllers/app/menu.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { UpdateController } from 'controllers'
66
import { showWindow } from './show-window'
77
import NetworksService from 'services/networks'
88
import WalletsService from 'services/wallets'
9-
import ChainInfo from 'services/chain-info'
109
import CommandSubject from 'models/subjects/command'
1110

1211
enum URL {
@@ -400,7 +399,7 @@ const contextMenuTemplate: {
400399
}
401400

402401
const address = bech32Address(identifier, {
403-
prefix: ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet,
402+
prefix: NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet,
404403
type: AddressType.HashIdx,
405404
codeHashOrCodeHashIndex: '0x00',
406405
})
@@ -415,7 +414,7 @@ const contextMenuTemplate: {
415414
},
416415
{
417416
label: i18n.t('contextMenu.view-on-explorer'),
418-
click: () => { shell.openExternal(`${ChainInfo.getInstance().explorerUrl()}/address/${address}`) }
417+
click: () => { shell.openExternal(`${NetworksService.getInstance().explorerUrl()}/address/${address}`) }
419418
},
420419
]
421420
},
@@ -433,7 +432,7 @@ const contextMenuTemplate: {
433432
},
434433
{
435434
label: i18n.t('contextMenu.view-on-explorer'),
436-
click: () => { shell.openExternal(`${ChainInfo.getInstance().explorerUrl()}/transaction/${hash}`) }
435+
click: () => { shell.openExternal(`${NetworksService.getInstance().explorerUrl()}/transaction/${hash}`) }
437436
},
438437
]
439438
},

packages/neuron-wallet/src/controllers/wallets.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import fs from 'fs'
22
import { parseAddress } from '@nervosnetwork/ckb-sdk-utils'
33
import { dialog, SaveDialogReturnValue, BrowserWindow } from 'electron'
44
import WalletsService, { Wallet, WalletProperties, FileKeystoreWallet } from 'services/wallets'
5+
import NetworksService from 'services/networks'
56
import Keystore from 'models/keys/keystore'
67
import Keychain from 'models/keys/keychain'
7-
import ChainInfo from 'services/chain-info'
88
import { validateMnemonic, mnemonicToSeedSync } from 'models/keys/mnemonic'
99
import { AccountExtendedPublicKey, ExtendedPrivateKey } from 'models/keys/key'
1010
import { ResponseCode } from 'utils/const'
@@ -341,7 +341,7 @@ export default class WalletsController {
341341
feeRate = '1000'
342342
}
343343

344-
const isMainnet = ChainInfo.getInstance().isMainnet()
344+
const isMainnet = NetworksService.getInstance().isMainnet()
345345
params.items.forEach(item => {
346346
if (isMainnet && !item.address.startsWith('ckb')) {
347347
throw new MainnetAddressRequired(item.address)

packages/neuron-wallet/src/models/lock-utils.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { OutPoint, Script, ScriptHashType } from 'types/cell-types'
1010
import ConvertTo from 'types/convert-to'
1111
import { SystemScriptSubject } from 'models/subjects/system-script'
1212
import Core from '@nervosnetwork/ckb-sdk-core'
13-
import ChainInfo from '../services/chain-info'
1413

1514
export interface SystemScript {
1615
codeHash: string
@@ -119,13 +118,12 @@ export default class LockUtils {
119118
return LockUtils.computeScriptHash(lock)
120119
}
121120

122-
static lockScriptToAddress(lock: Script): string {
121+
static lockScriptToAddress(lock: Script, prefix: AddressPrefix = AddressPrefix.Mainnet): string {
123122
const blake160: string = lock.args!
124-
return LockUtils.blake160ToAddress(blake160)
123+
return LockUtils.blake160ToAddress(blake160, prefix)
125124
}
126125

127-
static blake160ToAddress(blake160: string): string {
128-
const prefix = ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet
126+
static blake160ToAddress(blake160: string, prefix: AddressPrefix = AddressPrefix.Mainnet): string {
129127
return bech32Address(blake160, {
130128
prefix,
131129
type: AddressType.HashIdx,

packages/neuron-wallet/src/services/addresses.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import LockUtils from 'models/lock-utils'
55
import AddressDao, { Address as AddressInterface, AddressVersion } from 'database/address/address-dao'
66
import AddressCreatedSubject from 'models/subjects/address-created-subject'
77
import NodeService from './node'
8-
import ChainInfo from 'services/chain-info'
8+
import NetworksService from 'services/networks'
99

1010
const MAX_ADDRESS_COUNT = 30
1111

@@ -162,7 +162,7 @@ export default class AddressService {
162162
AddressPrefix.Mainnet
163163
).address
164164

165-
const addressToParse = ChainInfo.getInstance().isMainnet() ? mainnetAddress : testnetAddress
165+
const addressToParse = NetworksService.getInstance().isMainnet() ? mainnetAddress : testnetAddress
166166
const blake160: string = LockUtils.addressToBlake160(addressToParse)
167167

168168
const testnetAddressInfo: AddressInterface = {
@@ -238,6 +238,6 @@ export default class AddressService {
238238
}
239239

240240
private static getAddressVersion = (): AddressVersion => {
241-
return ChainInfo.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet
241+
return NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet
242242
}
243243
}

packages/neuron-wallet/src/services/chain-info.ts

Lines changed: 0 additions & 31 deletions
This file was deleted.

packages/neuron-wallet/src/services/indexer/queue.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Subject, Subscription } from 'rxjs'
2+
import { AddressPrefix } from '@nervosnetwork/ckb-sdk-utils'
23
import Utils from 'services/sync/utils'
34
import logger from 'utils/logger'
45
import GetBlocks from 'services/sync/get-blocks'
6+
import NetworksService from 'services/networks'
57
import { Transaction, TransactionWithStatus } from 'types/cell-types'
68
import TypeConvert from 'types/type-convert'
79
import BlockNumber from 'services/sync/block-number'
@@ -211,7 +213,10 @@ export default class IndexerQueue {
211213
blockHash: transactionWithStatus.txStatus.blockHash!
212214
}
213215
if (type === TxPointType.CreatedBy && this.latestCreatedBy.includes(txUniqueFlag)) {
214-
const address = LockUtils.lockScriptToAddress(transaction.outputs![parseInt(txPoint.index, 16)].lock)
216+
const address = LockUtils.lockScriptToAddress(
217+
transaction.outputs![parseInt(txPoint.index, 16)].lock,
218+
NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet
219+
)
215220
AddressesUsedSubject.getSubject().next({
216221
addresses: [address],
217222
url: this.url,
@@ -273,13 +278,19 @@ export default class IndexerQueue {
273278

274279
let address: string | undefined
275280
if (type === TxPointType.CreatedBy) {
276-
address = LockUtils.lockScriptToAddress(transaction.outputs![parseInt(txPoint.index, 16)].lock)
281+
address = LockUtils.lockScriptToAddress(
282+
transaction.outputs![parseInt(txPoint.index, 16)].lock,
283+
NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet
284+
)
277285
this.latestCreatedBy.push(txUniqueFlag)
278286
} else if (type === TxPointType.ConsumedBy) {
279287
const input = txEntity.inputs[parseInt(txPoint.index, 16)]
280288
const output = await IndexerTransaction.updateInputLockHash(input.outPointTxHash!, input.outPointIndex!)
281289
if (output) {
282-
address = LockUtils.lockScriptToAddress(output.lock)
290+
address = LockUtils.lockScriptToAddress(
291+
output.lock,
292+
NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet
293+
)
283294
}
284295
}
285296
if (address) {

packages/neuron-wallet/src/services/networks.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default class NetworksService extends Store {
101101

102102
public getCurrent(): NetworkWithID {
103103
const currentID = this.getCurrentID()
104-
return this.get(currentID!)! // Should always have at least one network
104+
return this.get(currentID) || this.defaultOne()! // Should always have at least one network
105105
}
106106

107107
public get(@Required id: NetworkID) {
@@ -222,11 +222,22 @@ export default class NetworksService extends Store {
222222
}
223223

224224
public getCurrentID = () => {
225-
return this.readSync<string>(NetworksKey.Current) || null
225+
return this.readSync<string>(NetworksKey.Current) || 'mainnet'
226226
}
227227

228228
public defaultOne = () => {
229229
const list = this.getAll()
230-
return list.find(item => item.type === NetworkType.Default) || null
230+
return list.find(item => item.type === NetworkType.Default) || presetNetworks.networks[0]
231+
}
232+
233+
public isMainnet = (): boolean => {
234+
return this.getCurrent().chain === 'ckb'
235+
}
236+
237+
public explorerUrl = (): string => {
238+
if (this.isMainnet()) {
239+
return "https://explorer.nervos.org"
240+
}
241+
return "https://explorer.nervos.org/testnet"
231242
}
232243
}

packages/neuron-wallet/src/services/sync/check-and-save/tx.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import LockUtils from 'models/lock-utils'
77
import CheckOutput from './output'
88
import { addressesUsedSubject as addressesUsedSubjectParam } from '../renderer-params'
99
import { AddressesWithURL } from 'models/subjects/addresses-used-subject'
10+
import NetworksService from 'services/networks'
11+
import { AddressPrefix } from 'models/keys/address'
1012

1113
export default class CheckTx {
1214
private tx: Transaction
@@ -32,7 +34,10 @@ export default class CheckTx {
3234
const inputAddresses = await this.filterInputs(lockHashes)
3335

3436
const outputAddresses: string[] = outputs.map(output => {
35-
return LockUtils.lockScriptToAddress(output.lock)
37+
return LockUtils.lockScriptToAddress(
38+
output.lock,
39+
NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet
40+
)
3641
})
3742

3843
const addresses: string[] = inputAddresses.concat(outputAddresses)
@@ -85,7 +90,12 @@ export default class CheckTx {
8590
outPointIndex: outPoint.index,
8691
})
8792
if (output && lockHashes.includes(output.lockHash)) {
88-
addresses.push(LockUtils.lockScriptToAddress(output.lock))
93+
addresses.push(
94+
LockUtils.lockScriptToAddress(
95+
output.lock,
96+
NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet
97+
)
98+
)
8999
}
90100
}
91101
}

packages/neuron-wallet/src/services/wallets.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import FileService from './file'
2121
import { TransactionsService, TransactionPersistor, TransactionGenerator } from './tx'
2222
import AddressService from './addresses'
2323
import { deindexLockHashes } from './indexer/deindex'
24-
import ChainInfo from 'services/chain-info'
24+
import NetworksService from 'services/networks'
2525
import AddressesService from 'services/addresses'
2626
import { Cell, DepType } from 'types/cell-types'
2727
import TypeConvert from 'types/type-convert'
@@ -269,7 +269,7 @@ export default class WalletService {
269269
}
270270

271271
private deindexAddresses = async (addresses: string[]) => {
272-
const prefix = ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet
272+
const prefix = NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet
273273
const addressesWithEnvPrefix: string[] = addresses.filter(addr => addr.startsWith(prefix))
274274

275275
if (addressesWithEnvPrefix.length === 0) {

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import IndexerQueue, { LockHashInfo } from 'services/indexer/queue'
55
import { Address } from 'database/address/address-dao'
66

77
import initConnection from 'database/chain/ormconfig'
8-
import ChainInfo from 'services/chain-info'
98

109
const { nodeService, addressCreatedSubject, walletCreatedSubject } = remote.require('./startup/sync-block-task/params')
1110

@@ -19,15 +18,14 @@ export const loadAddressesAndConvert = async (nodeURL: string): Promise<string[]
1918

2019
// call this after network switched
2120
let indexerQueue: IndexerQueue | undefined
22-
export const switchNetwork = async (nodeURL: string, genesisBlockHash: string, chain: string) => {
21+
export const switchNetwork = async (nodeURL: string, genesisBlockHash: string, _chain: string) => {
2322
// stop all blocks service
2423
if (indexerQueue) {
2524
await indexerQueue.stopAndWait()
2625
}
2726

2827
// disconnect old connection and connect to new database
2928
await initConnection(genesisBlockHash)
30-
ChainInfo.getInstance().setChain(chain)
3129
// load lockHashes
3230
const lockHashes: string[] = await loadAddressesAndConvert(nodeURL)
3331
const lockHashInfos: LockHashInfo[] = lockHashes.map(lockHash => {

0 commit comments

Comments
 (0)