From 6f9534040df87df533a431a04ce433a0533656ae Mon Sep 17 00:00:00 2001 From: James Chen Date: Wed, 13 Nov 2019 18:08:17 +0800 Subject: [PATCH] feat: Remove address sqlite db --- ormconfig-address.json | 21 ---- package.json | 3 +- .../address/{dao.ts => address-dao.ts} | 6 +- .../src/database/address/entities/address.ts | 116 ------------------ .../migrations/1561461669542-AddAddress.ts | 13 -- .../migrations/1562126909151-extendBalance.ts | 24 ---- .../1567485550388-AddTotalBalance.ts | 17 --- .../1573458655136-RemoveTotalBalance.ts | 17 --- .../src/database/address/ormconfig.ts | 51 -------- .../neuron-wallet/src/listeners/address.ts | 3 +- packages/neuron-wallet/src/main.ts | 2 - .../subjects/address-created-subject.ts | 2 +- .../neuron-wallet/src/services/addresses.ts | 16 +-- .../neuron-wallet/src/services/wallets.ts | 2 +- .../src/startup/sync-block-task/indexer.ts | 2 +- .../src/startup/sync-block-task/sync.ts | 2 +- .../src/startup/sync-block-task/task.ts | 2 - .../tests/database/address/balance.test.ts | 3 +- .../tests/database/address/dao.test.ts | 3 +- .../tests/services/address.test.ts | 3 +- 20 files changed, 21 insertions(+), 287 deletions(-) delete mode 100644 ormconfig-address.json rename packages/neuron-wallet/src/database/address/{dao.ts => address-dao.ts} (99%) delete mode 100644 packages/neuron-wallet/src/database/address/entities/address.ts delete mode 100644 packages/neuron-wallet/src/database/address/migrations/1561461669542-AddAddress.ts delete mode 100644 packages/neuron-wallet/src/database/address/migrations/1562126909151-extendBalance.ts delete mode 100644 packages/neuron-wallet/src/database/address/migrations/1567485550388-AddTotalBalance.ts delete mode 100644 packages/neuron-wallet/src/database/address/migrations/1573458655136-RemoveTotalBalance.ts delete mode 100644 packages/neuron-wallet/src/database/address/ormconfig.ts diff --git a/ormconfig-address.json b/ormconfig-address.json deleted file mode 100644 index 89b3d7e5ca..0000000000 --- a/ormconfig-address.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "sqlite", - "synchronize": false, - "migrationsRun": true, - "logging": true, - "database": "address-dev.sqlite", - "entities": [ - "packages/neuron-wallet/dist/database/address/entities/**/*.js" - ], - "migrations": [ - "packages/neuron-wallet/dist/database/address/migrations/**/*.js" - ], - "subscribers": [ - "packages/neuron-wallet/dist/database/address/subscriber/**/*.js" - ], - "cli": { - "entitiesDir": "packages/neuron-wallet/src/database/address/entities", - "migrationsDir": "packages/neuron-wallet/src/database/address/migrations", - "subscribersDir": "packages/neuron-wallet/src/database/address/subscriber" - } -} diff --git a/package.json b/package.json index e4d3b62edf..cca3c7e96c 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,7 @@ "test:e2e": "yarn build && ./scripts/copy-ui-files.sh && lerna run --parallel test:e2e", "lint": "lerna run --stream lint", "postinstall": "lerna run rebuild:nativemodules", - "db:chain": "node ./node_modules/.bin/typeorm", - "db:address": "node ./node_modules/.bin/typeorm --config ormconfig-address.json" + "db:chain": "node ./node_modules/.bin/typeorm" }, "husky": { "hooks": { diff --git a/packages/neuron-wallet/src/database/address/dao.ts b/packages/neuron-wallet/src/database/address/address-dao.ts similarity index 99% rename from packages/neuron-wallet/src/database/address/dao.ts rename to packages/neuron-wallet/src/database/address/address-dao.ts index 1943392334..76b6b28b5e 100644 --- a/packages/neuron-wallet/src/database/address/dao.ts +++ b/packages/neuron-wallet/src/database/address/address-dao.ts @@ -5,11 +5,15 @@ import CellsService from 'services/cells' import LockUtils from 'models/lock-utils' import { TransactionStatus } from 'types/cell-types' import { OutputStatus } from 'services/tx/params' -import { AddressVersion } from './entities/address' import NodeService from 'services/node' import Store from 'models/store' import AddressDbChangedSubject from 'models/subjects/address-db-changed-subject' +export enum AddressVersion { + Testnet = 'testnet', + Mainnet = 'mainnet', +} + export interface Address { walletId: string address: string diff --git a/packages/neuron-wallet/src/database/address/entities/address.ts b/packages/neuron-wallet/src/database/address/entities/address.ts deleted file mode 100644 index 1cdd995d60..0000000000 --- a/packages/neuron-wallet/src/database/address/entities/address.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { remote } from 'electron' -import { Entity, BaseEntity, PrimaryColumn, Column, AfterInsert, AfterUpdate, AfterRemove } from 'typeorm' -import { AddressType } from 'models/keys/address' -import AddressDbChangedSubject from 'models/subjects/address-db-changed-subject' -import { Address as AddressInterface } from '../dao' - -export enum AddressVersion { - Testnet = 'testnet', - Mainnet = 'mainnet', -} - -const isRenderer = process && process.type === 'renderer' -const addressDbChangedSubject = isRenderer - ? remote.require('./models/subjects/address-db-changed-subject').default.getSubject() - : AddressDbChangedSubject.getSubject() - -@Entity() -export default class Address extends BaseEntity { - @PrimaryColumn({ - type: 'varchar', - }) - address!: string - - @PrimaryColumn({ - type: 'varchar', - }) - walletId!: string - - @Column({ - type: 'varchar', - }) - path!: string - - @Column({ - type: 'int', - }) - addressType!: AddressType - - @Column({ - type: 'int', - }) - addressIndex!: number - - @Column({ - type: 'int', - }) - txCount!: number - - @Column({ - type: 'varchar', - }) - blake160!: string - - @Column({ - type: 'varchar', - }) - version!: AddressVersion - - @Column({ - type: 'varchar', - nullable: true, - }) - description?: string - - @Column({ - type: 'varchar', - }) - liveBalance: string = '0' - - @Column() - sentBalance: string = '0' - - @Column() - pendingBalance: string = '0' - - public balance = (): string => { - return (BigInt(this.liveBalance) + BigInt(this.sentBalance)).toString() - } - - public toInterface = (): AddressInterface => { - return { - address: this.address, - walletId: this.walletId, - path: this.path, - addressType: this.addressType, - addressIndex: this.addressIndex, - txCount: this.txCount, - blake160: this.blake160, - version: this.version, - liveBalance: this.liveBalance, - sentBalance: this.sentBalance, - pendingBalance: this.pendingBalance, - balance: this.balance(), - description: this.description, - } - } - - @AfterInsert() - emitInsert() { - this.changed('AfterInsert') - } - - @AfterUpdate() - emitUpdate() { - this.changed('AfterUpdate') - } - - @AfterRemove() - emitRemove() { - this.changed('AfterRemove') - } - - private changed = (event: string) => { - addressDbChangedSubject.next(event) - } -} diff --git a/packages/neuron-wallet/src/database/address/migrations/1561461669542-AddAddress.ts b/packages/neuron-wallet/src/database/address/migrations/1561461669542-AddAddress.ts deleted file mode 100644 index 34bccf8ae8..0000000000 --- a/packages/neuron-wallet/src/database/address/migrations/1561461669542-AddAddress.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {MigrationInterface, QueryRunner} from "typeorm"; - -export class AddAddress1561461669542 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`CREATE TABLE "address" ("address" varchar NOT NULL, "walletId" varchar NOT NULL, "path" varchar NOT NULL, "addressType" integer NOT NULL, "addressIndex" integer NOT NULL, "txCount" integer NOT NULL, "blake160" varchar NOT NULL, "version" varchar NOT NULL, "description" varchar, "balance" varchar NOT NULL, PRIMARY KEY ("address", "walletId"))`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP TABLE "address"`); - } - -} diff --git a/packages/neuron-wallet/src/database/address/migrations/1562126909151-extendBalance.ts b/packages/neuron-wallet/src/database/address/migrations/1562126909151-extendBalance.ts deleted file mode 100644 index 516d5befbc..0000000000 --- a/packages/neuron-wallet/src/database/address/migrations/1562126909151-extendBalance.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {MigrationInterface, QueryRunner, TableColumn} from "typeorm"; - -export class extendBalance1562126909151 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE 'address' ADD COLUMN 'sentBalance' varchar NOT NULL DEFAULT '0';`) - await queryRunner.query(`ALTER TABLE 'address' ADD COLUMN 'pendingBalance' varchar NOT NULL DEFAULT '0';`) - - await queryRunner.changeColumn('address', 'balance', new TableColumn({ - name: 'liveBalance', - type: 'varchar', - })) - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropColumn('address', 'sentBalance') - await queryRunner.dropColumn('address', 'pendingBalance') - await queryRunner.changeColumn('address', 'liveBalance', new TableColumn({ - name: 'balance', - type: 'varchar', - })) - } - -} diff --git a/packages/neuron-wallet/src/database/address/migrations/1567485550388-AddTotalBalance.ts b/packages/neuron-wallet/src/database/address/migrations/1567485550388-AddTotalBalance.ts deleted file mode 100644 index 03b3e5df9b..0000000000 --- a/packages/neuron-wallet/src/database/address/migrations/1567485550388-AddTotalBalance.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {MigrationInterface, QueryRunner, TableColumn} from "typeorm"; - -export class AddTotalBalance1567485550388 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.addColumn('address', new TableColumn({ - name: 'totalBalance', - type: 'varchar', - default: '0', - })) - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropColumn('address', 'totalBalance') - } - -} diff --git a/packages/neuron-wallet/src/database/address/migrations/1573458655136-RemoveTotalBalance.ts b/packages/neuron-wallet/src/database/address/migrations/1573458655136-RemoveTotalBalance.ts deleted file mode 100644 index 4bc22a5710..0000000000 --- a/packages/neuron-wallet/src/database/address/migrations/1573458655136-RemoveTotalBalance.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {MigrationInterface, QueryRunner, TableColumn} from "typeorm"; - -export class RemoveTotalBalance1573458655136 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.dropColumn('address', 'totalBalance') - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.addColumn('address', new TableColumn({ - name: 'totalBalance', - type: 'varchar', - default: '0', - })) - } - -} diff --git a/packages/neuron-wallet/src/database/address/ormconfig.ts b/packages/neuron-wallet/src/database/address/ormconfig.ts deleted file mode 100644 index 3aa6ee695a..0000000000 --- a/packages/neuron-wallet/src/database/address/ormconfig.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { createConnection, getConnection as ormGetConnection } from 'typeorm' -import { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions' -import path from 'path' - -import env from 'env' - -import Address from './entities/address' - -import { AddAddress1561461669542 } from './migrations/1561461669542-AddAddress' -import { extendBalance1562126909151 } from './migrations/1562126909151-extendBalance' -import { AddTotalBalance1567485550388 } from './migrations/1567485550388-AddTotalBalance' -import { RemoveTotalBalance1573458655136 } from './migrations/1573458655136-RemoveTotalBalance' - -const dbPath = path.join(env.fileBasePath, 'address.sqlite') - -const connectionName = 'address' - -const connectOptions = (): SqliteConnectionOptions => { - const database = env.isTestMode ? ':memory:' : dbPath - return { - name: connectionName, - type: 'sqlite', - database, - entities: [Address], - migrations: [ - AddAddress1561461669542, - extendBalance1562126909151, - AddTotalBalance1567485550388, - RemoveTotalBalance1573458655136, - ], - synchronize: false, - migrationsRun: true, - logging: ['error'], - } -} - -export const getConnection = () => { - return ormGetConnection(connectionName) -} - -const setBusyTimeout = async () => { - await getConnection().manager.query(`PRAGMA busy_timeout = 3000;`) -} - -export const initConnection = async () => { - const connectionOptions = connectOptions() - await createConnection(connectionOptions) - await setBusyTimeout() -} - -export default initConnection diff --git a/packages/neuron-wallet/src/listeners/address.ts b/packages/neuron-wallet/src/listeners/address.ts index 6b3994240e..26af7af070 100644 --- a/packages/neuron-wallet/src/listeners/address.ts +++ b/packages/neuron-wallet/src/listeners/address.ts @@ -3,6 +3,7 @@ import { ReplaySubject } from 'rxjs' import { bufferTime } from 'rxjs/operators' import AddressesUsedSubject, { AddressesWithURL } from 'models/subjects/addresses-used-subject' import AddressService from 'services/addresses' +import { Address } from 'database/address/address-dao' import WalletService from 'services/wallets' import { AccountExtendedPublicKey } from 'models/keys/key' @@ -27,7 +28,7 @@ export const register = () => { const url: string = addressesList[addressesList.length - 1].url const uniqueAddresses = [...new Set(addresses)] const addrs = await AddressService.updateTxCountAndBalances(uniqueAddresses, url) - const walletIds: string[] = addrs.map(addr => addr.walletId).filter((value, idx, a) => a.indexOf(value) === idx) + const walletIds: string[] = addrs.map(addr => (addr as Address).walletId).filter((value, idx, a) => a.indexOf(value) === idx) await Promise.all( walletIds.map(async id => { const wallet = WalletService.getInstance().get(id) diff --git a/packages/neuron-wallet/src/main.ts b/packages/neuron-wallet/src/main.ts index 550f1588eb..bb62cfe71e 100644 --- a/packages/neuron-wallet/src/main.ts +++ b/packages/neuron-wallet/src/main.ts @@ -1,7 +1,6 @@ import { app } from 'electron' import AppController from 'controllers/app' -import initConnection from 'database/address/ormconfig' import createSyncBlockTask from 'startup/sync-block-task/create' import { changeLanguage } from 'utils/i18n' @@ -10,7 +9,6 @@ const appController = new AppController() app.on('ready', async () => { changeLanguage(app.getLocale()) - await initConnection() createSyncBlockTask() appController.openWindow() diff --git a/packages/neuron-wallet/src/models/subjects/address-created-subject.ts b/packages/neuron-wallet/src/models/subjects/address-created-subject.ts index 40f5ab3fc9..63ff7968cd 100644 --- a/packages/neuron-wallet/src/models/subjects/address-created-subject.ts +++ b/packages/neuron-wallet/src/models/subjects/address-created-subject.ts @@ -1,5 +1,5 @@ import { ReplaySubject } from 'rxjs' -import { Address } from 'database/address/dao' +import { Address } from 'database/address/address-dao' export default class AddressCreatedSubject { static subject = new ReplaySubject(100) diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index 5639ee1910..d3e080ca53 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -2,8 +2,7 @@ import { AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' import { AccountExtendedPublicKey } from 'models/keys/key' import Address, { AddressType } from 'models/keys/address' import LockUtils from 'models/lock-utils' -import AddressDao, { Address as AddressInterface } from 'database/address/dao' -import { AddressVersion } from 'database/address/entities/address' +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 'models/chain-info' @@ -95,16 +94,13 @@ export default class AddressService { ) } - public static updateTxCountAndBalances = async ( - addresses: string[], - url: string = NodeService.getInstance().core.rpc.node.url - ) => { - let addrs: Address[] = [] + public static updateTxCountAndBalances = async (addresses: string[], url: string = NodeService.getInstance().core.rpc.node.url) => { + let result: Address[] = [] for (const address of addresses) { - const ads = await AddressDao.updateTxCountAndBalance(address, url) - addrs = addrs.concat(ads) + const updatedAddress = await AddressDao.updateTxCountAndBalance(address, url) + result = result.concat(updatedAddress) } - return addrs + return result } // Generate both receiving and change addresses. diff --git a/packages/neuron-wallet/src/services/wallets.ts b/packages/neuron-wallet/src/services/wallets.ts index 490cc3550e..f3a24f4c11 100644 --- a/packages/neuron-wallet/src/services/wallets.ts +++ b/packages/neuron-wallet/src/services/wallets.ts @@ -7,7 +7,7 @@ import LockUtils from 'models/lock-utils' import { TransactionWithoutHash, Input, OutPoint, WitnessArgs } from 'types/cell-types' import ConvertTo from 'types/convert-to' import { WalletNotFound, IsRequired, UsedName } from 'exceptions' -import { Address as AddressInterface } from 'database/address/dao' +import { Address as AddressInterface } from 'database/address/address-dao' import Keychain from 'models/keys/keychain' import AddressDbChangedSubject from 'models/subjects/address-db-changed-subject' import AddressesUsedSubject from 'models/subjects/addresses-used-subject' 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 cb1331ba7c..3300e261ab 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/indexer.ts @@ -2,7 +2,7 @@ import { remote } from 'electron' import AddressService from 'services/addresses' import LockUtils from 'models/lock-utils' import IndexerQueue, { LockHashInfo } from 'services/indexer/queue' -import { Address } from 'database/address/dao' +import { Address } from 'database/address/address-dao' import initConnection from 'database/chain/ormconfig' import ChainInfo from 'models/chain-info' 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 decb81948f..3c35053760 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/sync.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/sync.ts @@ -2,7 +2,7 @@ import { remote } from 'electron' import AddressService from 'services/addresses' import LockUtils from 'models/lock-utils' import BlockListener from 'services/sync/block-listener' -import { Address } from 'database/address/dao' +import { Address } from 'database/address/address-dao' import initConnection from 'database/chain/ormconfig' import ChainInfo from 'models/chain-info' diff --git a/packages/neuron-wallet/src/startup/sync-block-task/task.ts b/packages/neuron-wallet/src/startup/sync-block-task/task.ts index 9b7d4abc98..31c0226e0f 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/task.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/task.ts @@ -1,5 +1,4 @@ import { remote } from 'electron' -import { initConnection as initAddressConnection } from 'database/address/ormconfig' import AddressesUsedSubject from 'models/subjects/addresses-used-subject' import { register as registerTxStatusListener } from 'listeners/tx-status' import { register as registerAddressListener } from 'listeners/address' @@ -31,7 +30,6 @@ export const testIndexer = async (url: string): Promise => { } export const run = async () => { - await initAddressConnection() databaseInitSubject.subscribe(async (params: DatabaseInitParams) => { const { network, genesisBlockHash, chain } = params if (network && genesisBlockHash.startsWith('0x')) { diff --git a/packages/neuron-wallet/tests/database/address/balance.test.ts b/packages/neuron-wallet/tests/database/address/balance.test.ts index 52156d804e..c45ef8fd66 100644 --- a/packages/neuron-wallet/tests/database/address/balance.test.ts +++ b/packages/neuron-wallet/tests/database/address/balance.test.ts @@ -1,6 +1,5 @@ -import { AddressVersion } from '../../../src/database/address/entities/address' import { AddressType } from '../../../src/models/keys/address' -import AddressDao, { Address } from '../../../src/database/address/dao' +import AddressDao, { Address, AddressVersion } from '../../../src/database/address/address-dao' describe('balance', () => { beforeEach(async () => { diff --git a/packages/neuron-wallet/tests/database/address/dao.test.ts b/packages/neuron-wallet/tests/database/address/dao.test.ts index 208271f11b..ae9b459c2a 100644 --- a/packages/neuron-wallet/tests/database/address/dao.test.ts +++ b/packages/neuron-wallet/tests/database/address/dao.test.ts @@ -1,6 +1,5 @@ -import { AddressVersion } from '../../../src/database/address/entities/address' import { AddressType } from '../../../src/models/keys/address' -import AddressDao, { Address } from '../../../src/database/address/dao' +import AddressDao, { Address, AddressVersion } from '../../../src/database/address/address-dao' describe('Address Dao tests', () => { const address: Address = { diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index 1d8196bbc8..1746b4d7f1 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -1,6 +1,5 @@ import AddressService from '../../src/services/addresses' -import { AddressVersion } from '../../src/database/address/entities/address' -import AddressDao, { Address } from '../../src/database/address/dao' +import AddressDao, { Address, AddressVersion } from '../../src/database/address/address-dao' import { AddressType } from '../../src/models/keys/address' import { AccountExtendedPublicKey } from '../../src/models/keys/key'