From 81f1eff38354cabced8664522f70ad8c671a4cfa Mon Sep 17 00:00:00 2001 From: James Chen Date: Sat, 16 Nov 2019 00:19:43 +0800 Subject: [PATCH] feat: Remove ChainInfo moving its feature into NetworksService --- .../neuron-wallet/src/controllers/app/menu.ts | 7 +- .../neuron-wallet/src/controllers/wallets.ts | 4 +- .../neuron-wallet/src/models/lock-utils.ts | 8 +-- .../neuron-wallet/src/services/addresses.ts | 6 +- .../neuron-wallet/src/services/chain-info.ts | 31 --------- .../src/services/indexer/queue.ts | 17 ++++- .../neuron-wallet/src/services/networks.ts | 17 ++++- .../src/services/sync/check-and-save/tx.ts | 14 +++- .../neuron-wallet/src/services/wallets.ts | 4 +- .../src/startup/sync-block-task/indexer.ts | 4 +- .../startup/sync-block-task/init-database.ts | 3 - .../src/startup/sync-block-task/sync.ts | 5 +- .../tests/models/chain-info.test.ts | 45 ------------- .../tests/models/lock-utils.test.ts | 5 +- .../tests/services/address.test.ts | 11 ++-- .../tests/services/networks.test.ts | 65 +++++++++---------- 16 files changed, 94 insertions(+), 152 deletions(-) delete mode 100644 packages/neuron-wallet/src/services/chain-info.ts delete mode 100644 packages/neuron-wallet/tests/models/chain-info.test.ts diff --git a/packages/neuron-wallet/src/controllers/app/menu.ts b/packages/neuron-wallet/src/controllers/app/menu.ts index f908464521..f82ef2d9d0 100644 --- a/packages/neuron-wallet/src/controllers/app/menu.ts +++ b/packages/neuron-wallet/src/controllers/app/menu.ts @@ -6,7 +6,6 @@ import { UpdateController } from 'controllers' import { showWindow } from './show-window' import NetworksService from 'services/networks' import WalletsService from 'services/wallets' -import ChainInfo from 'services/chain-info' import CommandSubject from 'models/subjects/command' enum URL { @@ -400,7 +399,7 @@ const contextMenuTemplate: { } const address = bech32Address(identifier, { - prefix: ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet, + prefix: NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet, type: AddressType.HashIdx, codeHashOrCodeHashIndex: '0x00', }) @@ -415,7 +414,7 @@ const contextMenuTemplate: { }, { label: i18n.t('contextMenu.view-on-explorer'), - click: () => { shell.openExternal(`${ChainInfo.getInstance().explorerUrl()}/address/${address}`) } + click: () => { shell.openExternal(`${NetworksService.getInstance().explorerUrl()}/address/${address}`) } }, ] }, @@ -433,7 +432,7 @@ const contextMenuTemplate: { }, { label: i18n.t('contextMenu.view-on-explorer'), - click: () => { shell.openExternal(`${ChainInfo.getInstance().explorerUrl()}/transaction/${hash}`) } + click: () => { shell.openExternal(`${NetworksService.getInstance().explorerUrl()}/transaction/${hash}`) } }, ] }, diff --git a/packages/neuron-wallet/src/controllers/wallets.ts b/packages/neuron-wallet/src/controllers/wallets.ts index c349cf47d4..51c6e8d555 100644 --- a/packages/neuron-wallet/src/controllers/wallets.ts +++ b/packages/neuron-wallet/src/controllers/wallets.ts @@ -2,9 +2,9 @@ import fs from 'fs' import { parseAddress } from '@nervosnetwork/ckb-sdk-utils' import { dialog, SaveDialogReturnValue, BrowserWindow } from 'electron' import WalletsService, { Wallet, WalletProperties, FileKeystoreWallet } from 'services/wallets' +import NetworksService from 'services/networks' import Keystore from 'models/keys/keystore' import Keychain from 'models/keys/keychain' -import ChainInfo from 'services/chain-info' import { validateMnemonic, mnemonicToSeedSync } from 'models/keys/mnemonic' import { AccountExtendedPublicKey, ExtendedPrivateKey } from 'models/keys/key' import { ResponseCode } from 'utils/const' @@ -341,7 +341,7 @@ export default class WalletsController { feeRate = '1000' } - const isMainnet = ChainInfo.getInstance().isMainnet() + const isMainnet = NetworksService.getInstance().isMainnet() params.items.forEach(item => { if (isMainnet && !item.address.startsWith('ckb')) { throw new MainnetAddressRequired(item.address) diff --git a/packages/neuron-wallet/src/models/lock-utils.ts b/packages/neuron-wallet/src/models/lock-utils.ts index b75defece9..2ef84f8e51 100644 --- a/packages/neuron-wallet/src/models/lock-utils.ts +++ b/packages/neuron-wallet/src/models/lock-utils.ts @@ -10,7 +10,6 @@ import { OutPoint, Script, ScriptHashType } from 'types/cell-types' import ConvertTo from 'types/convert-to' import { SystemScriptSubject } from 'models/subjects/system-script' import Core from '@nervosnetwork/ckb-sdk-core' -import ChainInfo from '../services/chain-info' export interface SystemScript { codeHash: string @@ -119,13 +118,12 @@ export default class LockUtils { return LockUtils.computeScriptHash(lock) } - static lockScriptToAddress(lock: Script): string { + static lockScriptToAddress(lock: Script, prefix: AddressPrefix = AddressPrefix.Mainnet): string { const blake160: string = lock.args! - return LockUtils.blake160ToAddress(blake160) + return LockUtils.blake160ToAddress(blake160, prefix) } - static blake160ToAddress(blake160: string): string { - const prefix = ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet + static blake160ToAddress(blake160: string, prefix: AddressPrefix = AddressPrefix.Mainnet): string { return bech32Address(blake160, { prefix, type: AddressType.HashIdx, diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index 0eeffd1788..a689eeaa02 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -5,7 +5,7 @@ import LockUtils from 'models/lock-utils' import AddressDao, { Address as AddressInterface, AddressVersion } from 'database/address/address-dao' import AddressCreatedSubject from 'models/subjects/address-created-subject' import NodeService from './node' -import ChainInfo from 'services/chain-info' +import NetworksService from 'services/networks' const MAX_ADDRESS_COUNT = 30 @@ -162,7 +162,7 @@ export default class AddressService { AddressPrefix.Mainnet ).address - const addressToParse = ChainInfo.getInstance().isMainnet() ? mainnetAddress : testnetAddress + const addressToParse = NetworksService.getInstance().isMainnet() ? mainnetAddress : testnetAddress const blake160: string = LockUtils.addressToBlake160(addressToParse) const testnetAddressInfo: AddressInterface = { @@ -238,6 +238,6 @@ export default class AddressService { } private static getAddressVersion = (): AddressVersion => { - return ChainInfo.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet + return NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet } } diff --git a/packages/neuron-wallet/src/services/chain-info.ts b/packages/neuron-wallet/src/services/chain-info.ts deleted file mode 100644 index ee7443e1cf..0000000000 --- a/packages/neuron-wallet/src/services/chain-info.ts +++ /dev/null @@ -1,31 +0,0 @@ -import NetworksService from './networks' - -export default class ChainInfo { - private static instance: ChainInfo - - static getInstance(): ChainInfo { - if (!ChainInfo.instance) { - ChainInfo.instance = new ChainInfo() - } - - return ChainInfo.instance - } - - public setChain = (_chain: string) => { - } - - public getChain = (): string => { - return NetworksService.getInstance().getCurrent().chain - } - - public isMainnet = (): boolean => { - return this.getChain() === 'ckb' - } - - public explorerUrl = (): string => { - if (this.isMainnet()) { - return "https://explorer.nervos.org" - } - return "https://explorer.nervos.org/testnet" - } -} diff --git a/packages/neuron-wallet/src/services/indexer/queue.ts b/packages/neuron-wallet/src/services/indexer/queue.ts index ce3038a748..daedb4373c 100644 --- a/packages/neuron-wallet/src/services/indexer/queue.ts +++ b/packages/neuron-wallet/src/services/indexer/queue.ts @@ -1,7 +1,9 @@ import { Subject, Subscription } from 'rxjs' +import { AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' import Utils from 'services/sync/utils' import logger from 'utils/logger' import GetBlocks from 'services/sync/get-blocks' +import NetworksService from 'services/networks' import { Transaction, TransactionWithStatus } from 'types/cell-types' import TypeConvert from 'types/type-convert' import BlockNumber from 'services/sync/block-number' @@ -211,7 +213,10 @@ export default class IndexerQueue { blockHash: transactionWithStatus.txStatus.blockHash! } if (type === TxPointType.CreatedBy && this.latestCreatedBy.includes(txUniqueFlag)) { - const address = LockUtils.lockScriptToAddress(transaction.outputs![parseInt(txPoint.index, 16)].lock) + const address = LockUtils.lockScriptToAddress( + transaction.outputs![parseInt(txPoint.index, 16)].lock, + NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + ) AddressesUsedSubject.getSubject().next({ addresses: [address], url: this.url, @@ -273,13 +278,19 @@ export default class IndexerQueue { let address: string | undefined if (type === TxPointType.CreatedBy) { - address = LockUtils.lockScriptToAddress(transaction.outputs![parseInt(txPoint.index, 16)].lock) + address = LockUtils.lockScriptToAddress( + transaction.outputs![parseInt(txPoint.index, 16)].lock, + NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + ) this.latestCreatedBy.push(txUniqueFlag) } else if (type === TxPointType.ConsumedBy) { const input = txEntity.inputs[parseInt(txPoint.index, 16)] const output = await IndexerTransaction.updateInputLockHash(input.outPointTxHash!, input.outPointIndex!) if (output) { - address = LockUtils.lockScriptToAddress(output.lock) + address = LockUtils.lockScriptToAddress( + output.lock, + NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + ) } } if (address) { diff --git a/packages/neuron-wallet/src/services/networks.ts b/packages/neuron-wallet/src/services/networks.ts index 7db57d52e5..6e46780892 100644 --- a/packages/neuron-wallet/src/services/networks.ts +++ b/packages/neuron-wallet/src/services/networks.ts @@ -101,7 +101,7 @@ export default class NetworksService extends Store { public getCurrent(): NetworkWithID { const currentID = this.getCurrentID() - return this.get(currentID!)! // Should always have at least one network + return this.get(currentID) || this.defaultOne()! // Should always have at least one network } public get(@Required id: NetworkID) { @@ -222,11 +222,22 @@ export default class NetworksService extends Store { } public getCurrentID = () => { - return this.readSync(NetworksKey.Current) || null + return this.readSync(NetworksKey.Current) || 'mainnet' } public defaultOne = () => { const list = this.getAll() - return list.find(item => item.type === NetworkType.Default) || null + return list.find(item => item.type === NetworkType.Default) || presetNetworks.networks[0] + } + + public isMainnet = (): boolean => { + return this.getCurrent().chain === 'ckb' + } + + public explorerUrl = (): string => { + if (this.isMainnet()) { + return "https://explorer.nervos.org" + } + return "https://explorer.nervos.org/testnet" } } diff --git a/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts b/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts index 919f6ca9d1..c6f67bd139 100644 --- a/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts +++ b/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts @@ -7,6 +7,8 @@ import LockUtils from 'models/lock-utils' import CheckOutput from './output' import { addressesUsedSubject as addressesUsedSubjectParam } from '../renderer-params' import { AddressesWithURL } from 'models/subjects/addresses-used-subject' +import NetworksService from 'services/networks' +import { AddressPrefix } from 'models/keys/address' export default class CheckTx { private tx: Transaction @@ -32,7 +34,10 @@ export default class CheckTx { const inputAddresses = await this.filterInputs(lockHashes) const outputAddresses: string[] = outputs.map(output => { - return LockUtils.lockScriptToAddress(output.lock) + return LockUtils.lockScriptToAddress( + output.lock, + NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + ) }) const addresses: string[] = inputAddresses.concat(outputAddresses) @@ -85,7 +90,12 @@ export default class CheckTx { outPointIndex: outPoint.index, }) if (output && lockHashes.includes(output.lockHash)) { - addresses.push(LockUtils.lockScriptToAddress(output.lock)) + addresses.push( + LockUtils.lockScriptToAddress( + output.lock, + NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + ) + ) } } } diff --git a/packages/neuron-wallet/src/services/wallets.ts b/packages/neuron-wallet/src/services/wallets.ts index 534e001acd..e8bf140b93 100644 --- a/packages/neuron-wallet/src/services/wallets.ts +++ b/packages/neuron-wallet/src/services/wallets.ts @@ -21,7 +21,7 @@ import FileService from './file' import { TransactionsService, TransactionPersistor, TransactionGenerator } from './tx' import AddressService from './addresses' import { deindexLockHashes } from './indexer/deindex' -import ChainInfo from 'services/chain-info' +import NetworksService from 'services/networks' import AddressesService from 'services/addresses' import { Cell, DepType } from 'types/cell-types' import TypeConvert from 'types/type-convert' @@ -269,7 +269,7 @@ export default class WalletService { } private deindexAddresses = async (addresses: string[]) => { - const prefix = ChainInfo.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet + const prefix = NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet const addressesWithEnvPrefix: string[] = addresses.filter(addr => addr.startsWith(prefix)) if (addressesWithEnvPrefix.length === 0) { diff --git a/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts b/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts index 651d05aed4..cef634c18e 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts @@ -5,7 +5,6 @@ import IndexerQueue, { LockHashInfo } from 'services/indexer/queue' import { Address } from 'database/address/address-dao' import initConnection from 'database/chain/ormconfig' -import ChainInfo from 'services/chain-info' const { nodeService, addressCreatedSubject, walletCreatedSubject } = remote.require('./startup/sync-block-task/params') @@ -19,7 +18,7 @@ export const loadAddressesAndConvert = async (nodeURL: string): Promise { +export const switchNetwork = async (nodeURL: string, genesisBlockHash: string, _chain: string) => { // stop all blocks service if (indexerQueue) { await indexerQueue.stopAndWait() @@ -27,7 +26,6 @@ export const switchNetwork = async (nodeURL: string, genesisBlockHash: string, c // disconnect old connection and connect to new database await initConnection(genesisBlockHash) - ChainInfo.getInstance().setChain(chain) // load lockHashes const lockHashes: string[] = await loadAddressesAndConvert(nodeURL) const lockHashInfos: LockHashInfo[] = lockHashes.map(lockHash => { diff --git a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts index 7933f10c24..dbec74dab2 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts @@ -4,7 +4,6 @@ import { updateMetaInfo, getMetaInfo } from 'database/chain/meta-info' import LockUtils from 'models/lock-utils' import logger from 'utils/logger' import genesisBlockHash, { getChain } from './genesis' -import ChainInfo from 'services/chain-info' import DaoUtils from '../../models/dao-utils' import { NetworkWithID, EMPTY_GENESIS_HASH } from 'types/network' @@ -47,7 +46,6 @@ export class InitDatabase { if (chain === '') { chain = await getChain(network.remote) } - ChainInfo.getInstance().setChain(chain) try { const systemScriptInfo = await LockUtils.systemScript(network.remote) @@ -64,7 +62,6 @@ export class InitDatabase { const metaInfo = getMetaInfo() await initConnection(metaInfo.genesisBlockHash) chain = metaInfo.chain - ChainInfo.getInstance().setChain(chain) LockUtils.setSystemScript(metaInfo.systemScriptInfo) DaoUtils.setDaoScript(metaInfo.daoScriptInfo) hash = metaInfo.genesisBlockHash diff --git a/packages/neuron-wallet/src/startup/sync-block-task/sync.ts b/packages/neuron-wallet/src/startup/sync-block-task/sync.ts index 295f633026..7d0e7d87f8 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/sync.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/sync.ts @@ -3,9 +3,7 @@ import AddressService from 'services/addresses' import LockUtils from 'models/lock-utils' import BlockListener from 'services/sync/block-listener' import { Address } from 'database/address/address-dao' - import initConnection from 'database/chain/ormconfig' -import ChainInfo from 'services/chain-info' const { nodeService, addressCreatedSubject, walletCreatedSubject } = remote.require('./startup/sync-block-task/params') @@ -27,7 +25,7 @@ export const loadAddressesAndConvert = async (nodeURL: string): Promise { +export const switchNetwork = async (url: string, genesisBlockHash: string, _chain: string) => { // stop all blocks service if (blockListener) { await blockListener.stopAndWait() @@ -35,7 +33,6 @@ export const switchNetwork = async (url: string, genesisBlockHash: string, chain // disconnect old connection and connect to new database await initConnection(genesisBlockHash) - ChainInfo.getInstance().setChain(chain) // load lockHashes const lockHashes: string[] = await loadAddressesAndConvert(url) // start sync blocks service diff --git a/packages/neuron-wallet/tests/models/chain-info.test.ts b/packages/neuron-wallet/tests/models/chain-info.test.ts deleted file mode 100644 index db21fd5495..0000000000 --- a/packages/neuron-wallet/tests/models/chain-info.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ChainInfo from '../../src/models/chain-info' - -describe('ChainInfo Test', () => { - it('set and get', () => { - const chain = 'ckb' - ChainInfo.getInstance().setChain(chain) - - const getResult = ChainInfo.getInstance().getChain() - expect(getResult).toEqual(chain) - }) - - describe('isMainnet', () => { - it('empty string', () => { - const chain = '' - const instance = ChainInfo.getInstance() - instance.setChain(chain) - - expect(instance.isMainnet()).toEqual(false) - }) - - it('ckb', () => { - const chain = 'ckb' - const instance = ChainInfo.getInstance() - instance.setChain(chain) - - expect(instance.isMainnet()).toEqual(true) - }) - - it('ckb_testnet', () => { - const chain = 'ckb_testnet' - const instance = ChainInfo.getInstance() - instance.setChain(chain) - - expect(instance.isMainnet()).toEqual(false) - }) - - it('ckb_dev', () => { - const chain = 'ckb_dev' - const instance = ChainInfo.getInstance() - instance.setChain(chain) - - expect(instance.isMainnet()).toEqual(false) - }) - }) -}) diff --git a/packages/neuron-wallet/tests/models/lock-utils.test.ts b/packages/neuron-wallet/tests/models/lock-utils.test.ts index 10e89103d4..380b737d27 100644 --- a/packages/neuron-wallet/tests/models/lock-utils.test.ts +++ b/packages/neuron-wallet/tests/models/lock-utils.test.ts @@ -1,5 +1,6 @@ import { Script, ScriptHashType } from '../../src/types/cell-types' import LockUtils from '../../src/models/lock-utils' +import { AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' const systemScript = { outPoint: { @@ -83,13 +84,13 @@ describe('LockUtils Test', () => { }) it('lockScriptToAddress', async () => { - const address: string = LockUtils.lockScriptToAddress(bob.lockScript) + const address: string = LockUtils.lockScriptToAddress(bob.lockScript, AddressPrefix.Testnet) expect(address).toEqual(bob.address) }) it('blake160ToAddress', async () => { - const address: string = LockUtils.blake160ToAddress(bob.blake160) + const address: string = LockUtils.blake160ToAddress(bob.blake160, AddressPrefix.Testnet) expect(address).toEqual(bob.address) }) diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index a06ff9be13..2297c8f3a6 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -1,4 +1,5 @@ import AddressService from '../../src/services/addresses' +import NetworksService from '../../src/services/networks' import AddressDao, { Address, AddressVersion } from '../../src/database/address/address-dao' import { AddressType } from '../../src/models/keys/address' import { AccountExtendedPublicKey } from '../../src/models/keys/key' @@ -53,7 +54,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, } const usedAddress: Address = { @@ -68,7 +69,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, } const changeAddress: Address = { @@ -83,7 +84,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, } beforeEach(() => { @@ -147,14 +148,14 @@ describe('Key tests with db', () => { it('nextUnusedAddress', () => { AddressDao.create([address, usedAddress, changeAddress]) const addr = AddressService.nextUnusedAddress(walletId) - const addrDao = AddressDao.nextUnusedAddress(walletId, AddressVersion.Testnet) + const addrDao = AddressDao.nextUnusedAddress(walletId, NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet) expect(addr).toEqual(addrDao) }) it('nextUnusedChangeAddress', () => { AddressDao.create([address, usedAddress, changeAddress]) const addr = AddressService.nextUnusedChangeAddress(walletId) - const addrDao = AddressDao.nextUnusedChangeAddress(walletId, AddressVersion.Testnet) + const addrDao = AddressDao.nextUnusedChangeAddress(walletId, NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet) expect(addr).toEqual(addrDao) }) diff --git a/packages/neuron-wallet/tests/services/networks.test.ts b/packages/neuron-wallet/tests/services/networks.test.ts index d9a3035a95..c179beef5c 100644 --- a/packages/neuron-wallet/tests/services/networks.test.ts +++ b/packages/neuron-wallet/tests/services/networks.test.ts @@ -15,7 +15,7 @@ describe(`Unit tests of networks service`, () => { type: 0, genesisHash: '0x', id: '', - chain: 'ckb_dev', + chain: 'ckb', } const newNetworkWithDefaultTypeOf1 = { @@ -40,38 +40,41 @@ describe(`Unit tests of networks service`, () => { }) describe(`success cases`, () => { - it(`get all networks`, async () => { - const networks = await service.getAll() + it(`get all networks`, () => { + const networks = service.getAll() expect(Array.isArray(networks)).toBe(true) }) - it(`has preset networks`, async () => { - const networks = await service.getAll() + it(`has preset networks`, () => { + const networks = service.getAll() expect(networks.length).toBe(1) expect(networks[0].id).toEqual('mainnet') }) - it(`get the default network`, async () => { - const network = await service.defaultOne() + it(`get the default network`, () => { + const network = service.defaultOne() expect(network && network.type).toBe(0) }) - it(`mainnet should be the current one by default`, async () => { - const currentNetworkID = await service.getCurrentID() + it(`mainnet should be the current one by default`, () => { + const currentNetworkID = service.getCurrentID() expect(currentNetworkID).toBe('mainnet') }) - it(`getting a non-exsiting network should return null`, async () => { + it(`getting a non-exsiting network should return null`, () => { const id = `not-existing-id` - const network = await service.get(id) + const network = service.get(id) expect(network).toBeNull() }) it(`create a new network with ${JSON.stringify(newNetwork)}`, async () => { const res = await service.create(newNetwork.name, newNetwork.remote, newNetwork.type) - expect(res).toMatchObject({ ...newNetwork, id: res.id }) - const created = await service.get(res.id) - expect(created).toEqual(res) + const { name, remote, type } = res + expect(name).toEqual(newNetwork.name) + expect(remote).toEqual(newNetwork.remote) + expect(type).toEqual(newNetwork.type) + const created = service.get(res.id) + expect(created!.name).toEqual(res.name) }) it(`create a new network with default type of 1`, async () => { @@ -83,7 +86,7 @@ describe(`Unit tests of networks service`, () => { const network = await service.create(newNetworkWithDefaultTypeOf1.name, newNetworkWithDefaultTypeOf1.remote) const name = `new network name` await service.update(network.id, { name }) - const updated = await service.get(network.id) + const updated = service.get(network.id) expect(updated && updated.name).toBe(name) }) @@ -91,24 +94,24 @@ describe(`Unit tests of networks service`, () => { const network = await service.create(newNetworkWithDefaultTypeOf1.name, newNetworkWithDefaultTypeOf1.remote) const address = `http://localhost:8115` await service.update(network.id, { remote: address }) - const updated = await service.get(network.id) + const updated = service.get(network.id) expect(updated && updated.remote).toBe(address) }) it(`set the network to be the current one`, async () => { const network = await service.create(newNetworkWithDefaultTypeOf1.name, newNetworkWithDefaultTypeOf1.remote) await service.activate(network.id) - const currentNetworkID = await service.getCurrentID() + const currentNetworkID = service.getCurrentID() expect(currentNetworkID).toBe(network.id) }) it(`delete an inactive network`, async () => { const inactiveNetwork = await service.create(newNetworkWithDefaultTypeOf1.name, newNetworkWithDefaultTypeOf1.remote) - const prevCurrentID = (await service.getCurrentID()) || '' - const prevNetworks = await service.getAll() + const prevCurrentID = service.getCurrentID() || '' + const prevNetworks = service.getAll() await service.delete(inactiveNetwork.id) - const currentID = await service.getCurrentID() - const currentNetworks = await service.getAll() + const currentID = service.getCurrentID() + const currentNetworks = service.getAll() expect(currentNetworks.map(n => n.id)).toEqual( prevNetworks.filter(n => n.id !== inactiveNetwork.id).map(n => n.id), ) @@ -118,37 +121,29 @@ describe(`Unit tests of networks service`, () => { it(`activate a network and delete it, the current networks should switch to the default network`, async () => { const network = await service.create(newNetworkWithDefaultTypeOf1.name, newNetworkWithDefaultTypeOf1.remote) await service.activate(network.id) - const prevCurrentID = await service.getCurrentID() - const prevNetworks = await service.getAll() + const prevCurrentID = service.getCurrentID() + const prevNetworks = service.getAll() expect(prevCurrentID).toBe(network.id) expect(prevNetworks.map(n => n.id)).toEqual(['mainnet', network.id]) await service.delete(prevCurrentID || '') - const currentNetworks = await service.getAll() + const currentNetworks = service.getAll() expect(currentNetworks.map(n => n.id)).toEqual(prevNetworks.filter(n => n.id !== prevCurrentID).map(n => n.id)) - const currentID = await new Promise(resolve => { - setTimeout(() => { - service.getCurrentID().then(cID => resolve(cID)) - }, 500) - }) + const currentID = service.getCurrentID() expect(currentID).toBe('mainnet') }) it(`reset the netowrks`, async () => { await service.create(newNetwork.name, newNetwork.remote) - const newNetworkList = await service.getAll() + const newNetworkList = service.getAll() expect(newNetworkList.length).toBe(2) service.clear() - const networks = await service.getAll() + const networks = service.getAll() expect(networks.length).toBe(1) }) }) describe(`validation on parameters`, () => { describe(`validation on parameters`, () => { - it(`service.get requires id`, () => { - expect(service.get(undefined as any)).rejects.toThrowError(i18n.t(ERROR_MESSAGE.MISSING_ARG)) - }) - it(`service.create requires name, and remote`, async () => { expect(service.create(undefined as any, undefined as any)).rejects.toThrowError( i18n.t(ERROR_MESSAGE.MISSING_ARG),