From 53e4469f3969da5bfab5c542708940120cd557cc Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 16 Aug 2019 13:29:42 +0300 Subject: [PATCH] fix: get the basics running again --- packages/core-blockchain/src/blockchain.ts | 12 +- packages/core-blockchain/src/state-machine.ts | 2 +- .../src/postgres-connection.ts | 2 +- .../src/service-provider.ts | 2 +- .../src/state-builder.ts | 2 +- .../core-database/src/database-service.ts | 2 +- .../core-elasticsearch/src/indices/base.ts | 2 +- packages/core-forger/src/manager.ts | 2 +- .../src/plugins/transaction-payload.ts | 2 +- packages/core-kernel/package.json | 1 + packages/core-kernel/src/application.ts | 98 ++++++++----- packages/core-kernel/src/bootstrap/index.ts | 2 +- .../bootstrap/load-environment-variables.ts | 13 -- .../src/bootstrap/register-providers.ts | 5 +- .../core-kernel/src/config/adapters/local.ts | 21 ++- packages/core-kernel/src/config/repository.ts | 6 +- .../src/contracts/core-kernel/application.ts | 5 +- .../src/services/events/dispatcher.ts | 1 + .../src/services/log/adapters/console.ts | 18 +++ .../core-kernel/src/services/log/factory.ts | 37 ++--- .../src/support/service-provider.ts | 10 +- packages/core-logger-pino/src/driver.ts | 14 +- packages/core-p2p/src/defaults.ts | 2 +- packages/core-p2p/src/event-listener.ts | 2 +- packages/core-p2p/src/network-monitor.ts | 4 +- packages/core-p2p/src/peer-communicator.ts | 2 +- packages/core-p2p/src/peer-processor.ts | 2 +- packages/core-p2p/src/service-provider.ts | 3 +- .../src/socket-server/versions/internal.ts | 2 +- .../src/socket-server/versions/utils.ts | 6 +- .../core-snapshots/src/transport/index.ts | 2 +- packages/core-state/src/stores/state.ts | 2 +- .../core-transaction-pool/src/connection.ts | 2 +- .../src/service-provider.ts | 10 +- packages/core-webhooks/src/listener.ts | 2 +- packages/core/bin/config/devnet/plugins.js | 1 - packages/core/bin/config/mainnet/plugins.js | 1 - packages/core/bin/config/testnet/config.js | 132 ++++++++++++++++++ .../core/bin/config/testnet/delegates.json | 55 -------- packages/core/bin/config/testnet/peers.json | 8 -- packages/core/bin/config/testnet/plugins.js | 67 --------- packages/core/src/commands/command.ts | 10 +- .../core/src/commands/config/forger/bip39.ts | 5 +- packages/core/src/commands/forger/run.ts | 1 - .../core/src/commands/snapshot/restore.ts | 2 +- packages/core/src/helpers/replay.ts | 1 - packages/core/src/helpers/snapshot.ts | 1 - 47 files changed, 327 insertions(+), 257 deletions(-) create mode 100644 packages/core/bin/config/testnet/config.js delete mode 100644 packages/core/bin/config/testnet/delegates.json delete mode 100644 packages/core/bin/config/testnet/peers.json delete mode 100644 packages/core/bin/config/testnet/plugins.js diff --git a/packages/core-blockchain/src/blockchain.ts b/packages/core-blockchain/src/blockchain.ts index 91b93dafa7..7427ad556e 100644 --- a/packages/core-blockchain/src/blockchain.ts +++ b/packages/core-blockchain/src/blockchain.ts @@ -10,7 +10,7 @@ import { BlockProcessor, BlockProcessorResult } from "./processor"; import { stateMachine } from "./state-machine"; const logger = app.resolve("logger"); -const emitter = app.resolve("event-emitter"); +const emitter = app.resolve("event-dispatcher"); const { BlockFactory } = Blocks; export class Blockchain implements Contracts.Blockchain.IBlockchain { @@ -95,23 +95,23 @@ export class Blockchain implements Contracts.Blockchain.IBlockchain { public dispatch(event): void { const nextState = stateMachine.transition(this.state.blockchain, event); - if (nextState.State.actions.length > 0) { + if (nextState.actions.length > 0) { logger.debug( `event '${event}': ${JSON.stringify(this.state.blockchain.value)} -> ${JSON.stringify( - nextState.State.value, - )} -> actions: [${nextState.State.actions.map(a => a.type).join(", ")}]`, + nextState.value, + )} -> actions: [${nextState.actions.map(a => a.type).join(", ")}]`, ); } else { logger.debug( `event '${event}': ${JSON.stringify(this.state.blockchain.value)} -> ${JSON.stringify( - nextState.State.value, + nextState.value, )}`, ); } this.state.blockchain = nextState; - for (const actionKey of nextState.State.actions) { + for (const actionKey of nextState.actions) { const action = this.actions[actionKey]; if (action) { diff --git a/packages/core-blockchain/src/state-machine.ts b/packages/core-blockchain/src/state-machine.ts index 7341d6d460..493c17fdfc 100644 --- a/packages/core-blockchain/src/state-machine.ts +++ b/packages/core-blockchain/src/state-machine.ts @@ -11,7 +11,7 @@ import { blockchainMachine } from "./machines/blockchain"; import { Blockchain } from "./blockchain"; const { BlockFactory } = Blocks; -const emitter = app.resolve("event-emitter"); +const emitter = app.resolve("event-dispatcher"); const logger = app.resolve("logger"); const stateStorage = app.resolve("state").getStore(); diff --git a/packages/core-database-postgres/src/postgres-connection.ts b/packages/core-database-postgres/src/postgres-connection.ts index aaf2f9a05d..5f10d2b2e3 100644 --- a/packages/core-database-postgres/src/postgres-connection.ts +++ b/packages/core-database-postgres/src/postgres-connection.ts @@ -33,7 +33,7 @@ export class PostgresConnection implements Contracts.Database.IConnection { public pgp: IMain; private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); private migrationsRepository: MigrationsRepository; private cache: Map; diff --git a/packages/core-database-postgres/src/service-provider.ts b/packages/core-database-postgres/src/service-provider.ts index 7185c80d52..00e2a15b0f 100644 --- a/packages/core-database-postgres/src/service-provider.ts +++ b/packages/core-database-postgres/src/service-provider.ts @@ -13,7 +13,7 @@ export class ServiceProvider extends Support.AbstractServiceProvider { const connectionManager = this.app.resolve("database-manager"); const connection = await connectionManager.createConnection(new PostgresConnection(this.opts, walletManager)); - this.app.bind("database", databaseServiceFactory(this.opts, walletManager, connection)); + this.app.bind("database", await databaseServiceFactory(this.opts, walletManager, connection)); } public async dispose(): Promise { diff --git a/packages/core-database-postgres/src/state-builder.ts b/packages/core-database-postgres/src/state-builder.ts index bde6a22922..0a0694a28e 100644 --- a/packages/core-database-postgres/src/state-builder.ts +++ b/packages/core-database-postgres/src/state-builder.ts @@ -5,7 +5,7 @@ import { Interfaces, Managers, Utils } from "@arkecosystem/crypto"; export class StateBuilder { private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); constructor( diff --git a/packages/core-database/src/database-service.ts b/packages/core-database/src/database-service.ts index 716201ae06..04eb190628 100644 --- a/packages/core-database/src/database-service.ts +++ b/packages/core-database/src/database-service.ts @@ -10,7 +10,7 @@ export class DatabaseService implements Contracts.Database.IDatabaseService { public connection: Contracts.Database.IConnection; public walletManager: Contracts.State.IWalletManager; public logger = app.resolve("logger"); - public emitter = app.resolve("event-emitter"); + public emitter = app.resolve("event-dispatcher"); public options: any; public wallets: Contracts.Database.IWalletsBusinessRepository; public delegates: Contracts.Database.IDelegatesBusinessRepository; diff --git a/packages/core-elasticsearch/src/indices/base.ts b/packages/core-elasticsearch/src/indices/base.ts index 6087ed531d..f6ed7b6ff5 100644 --- a/packages/core-elasticsearch/src/indices/base.ts +++ b/packages/core-elasticsearch/src/indices/base.ts @@ -5,7 +5,7 @@ import { storage } from "../storage"; export abstract class Index { protected readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); protected readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); protected readonly database: Contracts.Database.IDatabaseService = app.resolve( diff --git a/packages/core-forger/src/manager.ts b/packages/core-forger/src/manager.ts index af8742bdb1..4782ecc58e 100644 --- a/packages/core-forger/src/manager.ts +++ b/packages/core-forger/src/manager.ts @@ -22,7 +22,7 @@ export class ForgerManager { private initialized: boolean; constructor(options) { - this.secrets = app.config("delegates.secrets"); + this.secrets = app.config("delegates").secrets; this.network = Managers.configManager.get("network"); this.client = new Client(options.hosts); } diff --git a/packages/core-http-utils/src/plugins/transaction-payload.ts b/packages/core-http-utils/src/plugins/transaction-payload.ts index 6559c0ac6c..b9153af458 100644 --- a/packages/core-http-utils/src/plugins/transaction-payload.ts +++ b/packages/core-http-utils/src/plugins/transaction-payload.ts @@ -32,7 +32,7 @@ export const transactionPayload = { } const transactionsCount = request.payload.transactions.length; - const maxTransactionsPerRequest = transactionPool.maxTransactionsPerRequest; + const { maxTransactionsPerRequest } = transactionPool; if (transactionsCount > maxTransactionsPerRequest) { return Boom.entityTooLarge( diff --git a/packages/core-kernel/package.json b/packages/core-kernel/package.json index 30838c60e7..44202d92b3 100644 --- a/packages/core-kernel/package.json +++ b/packages/core-kernel/package.json @@ -22,6 +22,7 @@ "dependencies": { "@arkecosystem/crypto": "^3.0.0-next.0", "awilix": "^4.2.2", + "cosmiconfig": "^5.2.1", "cron": "^1.7.1", "dayjs": "^1.8.15", "delay": "^4.3.0", diff --git a/packages/core-kernel/src/application.ts b/packages/core-kernel/src/application.ts index 354df11bac..49330ee6da 100644 --- a/packages/core-kernel/src/application.ts +++ b/packages/core-kernel/src/application.ts @@ -1,7 +1,10 @@ +import { set } from "dottie"; +import envPaths from "env-paths"; +import expandHomeDir from "expand-home-dir"; import { existsSync, removeSync, writeFileSync } from "fs-extra"; import camelCase from "lodash/camelCase"; -import logProcessErrors from "log-process-errors"; -import { join } from "path"; +// import logProcessErrors from "log-process-errors"; +import { join, resolve } from "path"; import { JsonObject } from "type-fest"; import * as Bootstrappers from "./bootstrap"; import { ConfigFactory, ConfigRepository } from "./config"; @@ -47,24 +50,25 @@ export class Application extends Container implements Kernel.IApplication { /** * @param {JsonObject} config - * @param {JsonObject} [flags={}] * @returns {Promise} * @memberof Application */ - public async bootstrap(config: JsonObject, flags: JsonObject = {}): Promise { + public async bootstrap(config: JsonObject): Promise { this.registerErrorHandler(); - this.bindConfiguration(config); + await this.bindConfiguration(config); - this.bindPathsInContainer(); + this.registerBindings(); - await this.registerCoreFactories(); + this.registerNamespace(); - await this.registerCoreServices(); + this.registerPaths(); - this.registerBindings(); + await this.registerFactories(); - this.registerNamespace(); + await this.registerServices(); + + await this.boot(); } /** @@ -115,11 +119,11 @@ export class Application extends Container implements Kernel.IApplication { /** * @param {AbstractServiceProvider} provider - * @param {Record} opts + * @param {JsonObject} opts * @returns {AbstractServiceProvider} * @memberof Application */ - public makeProvider(provider: AbstractServiceProvider, opts: Record): AbstractServiceProvider { + public makeProvider(provider: AbstractServiceProvider, opts: JsonObject): AbstractServiceProvider { return this.providers.make(provider, opts); } @@ -165,6 +169,14 @@ export class Application extends Container implements Kernel.IApplication { return this.resolve("config").get(key); } + /** + * @returns {string} + * @memberof Application + */ + public dirPrefix(): string { + return this.resolve("app.dirPrefix"); + } + /** * @returns {string} * @memberof Application @@ -400,11 +412,11 @@ export class Application extends Container implements Kernel.IApplication { /** * @readonly - * @type {Kernel.ILogger} + * @type {Contracts.Kernel.ILogger} * @memberof Application */ - public get log(): Kernel.ILogger { - return this.resolve("log"); + public get log(): Contracts.Kernel.ILogger { + return this.resolve("log"); } /** @@ -436,11 +448,11 @@ export class Application extends Container implements Kernel.IApplication { /** * @readonly - * @type {Kernel.IEventDispatcher} + * @type {Contracts.Kernel.IEventDispatcher} * @memberof Application */ - public get events(): Kernel.IEventDispatcher { - return this.resolve("events"); + public get events(): Contracts.Kernel.IEventDispatcher { + return this.resolve("event-dispatcher"); } /** @@ -448,18 +460,21 @@ export class Application extends Container implements Kernel.IApplication { * @memberof Application */ private registerErrorHandler(): void { - // @TODO: implement passing in of options - logProcessErrors(); + // @TODO: implement passing in of options and ensure handling of critical exceptions + // logProcessErrors({ exitOn: [] }); } /** * @private - * @param {Record} config + * @param {JsonObject} config * @memberof Application */ - private bindConfiguration(config: Record): void { - this.bind("configLoader", ConfigFactory.make(this, "local")); // @TODO + private async bindConfiguration(config: JsonObject): Promise { + // @TODO: pass in what config provider should be used + this.bind("configLoader", ConfigFactory.make(this, (config.configLoader || "local") as string)); this.bind("config", new ConfigRepository(config)); + + this.resolve("config").set("options", config.options); } /** @@ -471,6 +486,13 @@ export class Application extends Container implements Kernel.IApplication { this.bind("app.token", this.config("token")); this.bind("app.network", this.config("network")); this.bind("app.version", this.config("version")); + + // @TODO: implement a getter/setter that sets vars locally and in the process.env variables + process.env.CORE_ENV = this.config("env"); + process.env.NODE_ENV = process.env.CORE_ENV; + process.env.CORE_TOKEN = this.config("token"); + process.env.CORE_NETWORK_NAME = this.config("network"); + process.env.CORE_VERSION = this.config("version"); } /** @@ -494,9 +516,10 @@ export class Application extends Container implements Kernel.IApplication { * @returns {Promise} * @memberof Application */ - private async registerCoreServices(): Promise { - this.bind("events", new EventDispatcher()); - this.bind("log", await this.resolve("factoryLogger").make(new ConsoleLogger())); + private async registerFactories(): Promise { + this.bind("factoryLogger", new LoggerFactory(this)); + this.bind("factoryCache", new CacheFactory(this)); + this.bind("factoryQueue", new QueueFactory(this)); } /** @@ -504,10 +527,9 @@ export class Application extends Container implements Kernel.IApplication { * @returns {Promise} * @memberof Application */ - private async registerCoreFactories(): Promise { - this.bind("factoryLogger", new LoggerFactory(this)); - this.bind("factoryCache", new CacheFactory(this)); - this.bind("factoryQueue", new QueueFactory(this)); + private async registerServices(): Promise { + this.bind("event-dispatcher", new EventDispatcher()); + this.bind("log", await this.resolve("factoryLogger").make(new ConsoleLogger())); } /** @@ -542,8 +564,18 @@ export class Application extends Container implements Kernel.IApplication { * @private * @memberof Application */ - private bindPathsInContainer(): void { - for (const [type, path] of Object.entries(this.config("paths"))) { + private registerPaths(): void { + const paths: Array<[string, string]> = Object.entries(envPaths(this.token(), { suffix: "core" })); + + for (let [type, path] of paths) { + const processPath: string | null = process.env[`CORE_PATH_${type.toUpperCase()}`]; + + if (processPath) { + path = resolve(expandHomeDir(processPath)); + } + + set(process.env, `CORE_PATH_${type.toUpperCase()}`, path); + this[camelCase(`use_${type}_path`)](path); this.bind(`path.${type}`, path); @@ -557,7 +589,7 @@ export class Application extends Container implements Kernel.IApplication { * @memberof Application */ private getPath(type: string): string { - const path = this.resolve(`path.${type}`); + const path: string = this.resolve(`path.${type}`); if (!existsSync(path)) { throw new DirectoryNotFound(path); diff --git a/packages/core-kernel/src/bootstrap/index.ts b/packages/core-kernel/src/bootstrap/index.ts index 0e138a2ed6..883ff38242 100644 --- a/packages/core-kernel/src/bootstrap/index.ts +++ b/packages/core-kernel/src/bootstrap/index.ts @@ -2,4 +2,4 @@ export * from "./load-environment-variables"; export * from "./load-configuration"; export * from "./load-cryptography"; export * from "./register-providers"; -export * from "./boot-providers"; +// export * from "./boot-providers"; diff --git a/packages/core-kernel/src/bootstrap/load-environment-variables.ts b/packages/core-kernel/src/bootstrap/load-environment-variables.ts index 6e527b7b58..5d5b1519f7 100644 --- a/packages/core-kernel/src/bootstrap/load-environment-variables.ts +++ b/packages/core-kernel/src/bootstrap/load-environment-variables.ts @@ -1,8 +1,3 @@ -import { set } from "dottie"; -import envPaths from "env-paths"; -import expandHomeDir from "expand-home-dir"; -import { ensureDirSync } from "fs-extra"; -import { resolve } from "path"; import { Kernel } from "../contracts"; /** @@ -17,13 +12,5 @@ export class LoadEnvironmentVariables { */ public async bootstrap(app: Kernel.IApplication): Promise { await app.resolve("configLoader").loadEnvironmentVariables(); - - for (const [key, value] of Object.entries(envPaths(app.token(), { suffix: "core" }))) { - const path: string = resolve(`${expandHomeDir(value)}/${app.network()}`); - - ensureDirSync(path); - - set(process.env, `PATH_${key.toUpperCase()}`, path); - } } } diff --git a/packages/core-kernel/src/bootstrap/register-providers.ts b/packages/core-kernel/src/bootstrap/register-providers.ts index 7007f255f6..e6bf8d33ce 100644 --- a/packages/core-kernel/src/bootstrap/register-providers.ts +++ b/packages/core-kernel/src/bootstrap/register-providers.ts @@ -1,4 +1,5 @@ import semver from "semver"; +import { JsonObject } from "type-fest"; import { Kernel } from "../contracts"; import { FailedDependencySatisfaction, FailedServiceProviderRegistration } from "../errors"; import { AbstractServiceProvider } from "../support/service-provider"; @@ -14,12 +15,12 @@ export class RegisterProviders { * @memberof RegisterProviders */ public async bootstrap(app: Kernel.IApplication): Promise { - const providers = app.config("providers"); + const providers: JsonObject = app.config("providers"); for (const [pkg, opts] of Object.entries(providers)) { const { ServiceProvider } = require(pkg); - const serviceProvider: AbstractServiceProvider = app.makeProvider(ServiceProvider, opts); + const serviceProvider: AbstractServiceProvider = app.makeProvider(ServiceProvider, opts as JsonObject); if (this.satisfiesDependencies(app, serviceProvider)) { await app.registerProvider(serviceProvider); diff --git a/packages/core-kernel/src/config/adapters/local.ts b/packages/core-kernel/src/config/adapters/local.ts index 981ee065be..c247c0d350 100644 --- a/packages/core-kernel/src/config/adapters/local.ts +++ b/packages/core-kernel/src/config/adapters/local.ts @@ -1,6 +1,6 @@ +import cosmiconfig from "cosmiconfig"; import { set } from "dottie"; import { parseFileSync } from "envfile"; -import { readJSONSync } from "fs-extra"; import { InvalidApplicationConfiguration, InvalidEnvironmentConfiguration } from "../../errors"; import { BaseAdapter } from "./base"; @@ -15,10 +15,16 @@ export class LocalAdapter extends BaseAdapter { * @memberof LocalAdapter */ public async loadConfiguration(): Promise { + // @TODO: move this to run before `loadConfiguration` in a bootstraper + await this.loadEnvironmentVariables(); + try { - const config: Record = readJSONSync(this.app.configPath("config.json")); + const explorer = cosmiconfig(this.app.namespace(), { + searchPlaces: [this.app.configPath("config.json"), this.app.configPath("config.js")], + stopDir: this.app.configPath(), + }); - for (const [key, value] of Object.entries(config)) { + for (const [key, value] of Object.entries(explorer.searchSync().config)) { this.app.config(key, value); } } catch (error) { @@ -31,12 +37,13 @@ export class LocalAdapter extends BaseAdapter { * @memberof LocalAdapter */ public async loadEnvironmentVariables(): Promise { - if (this.app.runningTests()) { - return; - } + // @TODO: enable this after initial migration + // if (this.app.runningTests()) { + // return; + // } try { - const config = parseFileSync(this.app.environmentFile()); + const config: Record = parseFileSync(this.app.environmentFile()); for (const [key, value] of Object.entries(config)) { set(process.env, key, value); diff --git a/packages/core-kernel/src/config/repository.ts b/packages/core-kernel/src/config/repository.ts index a22c77b18b..537cde869b 100644 --- a/packages/core-kernel/src/config/repository.ts +++ b/packages/core-kernel/src/config/repository.ts @@ -1,3 +1,5 @@ +import { JsonObject } from "type-fest"; + /** * @export * @class ConfigRepository @@ -5,10 +7,10 @@ */ export class ConfigRepository extends Map { /** - * @param {object} config + * @param {JsonObject} config * @memberof ConfigRepository */ - public constructor(config: object) { + public constructor(config: JsonObject) { super(Object.entries(config)); } } diff --git a/packages/core-kernel/src/contracts/core-kernel/application.ts b/packages/core-kernel/src/contracts/core-kernel/application.ts index 893ae8b157..7f774c9e25 100644 --- a/packages/core-kernel/src/contracts/core-kernel/application.ts +++ b/packages/core-kernel/src/contracts/core-kernel/application.ts @@ -1,3 +1,4 @@ +import { JsonObject } from "type-fest"; import { AbstractServiceProvider } from "../../support"; import { IBlockchain } from "../core-blockchain"; import { IPeerService } from "../core-p2p"; @@ -35,7 +36,7 @@ export interface IApplication extends IContainer { /** * Bootstrap the application with the given configuration. */ - bootstrap(config: Record): Promise; + bootstrap(config: JsonObject): Promise; /** * Boot the application. @@ -60,7 +61,7 @@ export interface IApplication extends IContainer { /** * Create a new provider instance. */ - makeProvider(provider: AbstractServiceProvider, opts: Record): AbstractServiceProvider; + makeProvider(provider: AbstractServiceProvider, opts: JsonObject): AbstractServiceProvider; /** * Register a listener to run after loading the environment. diff --git a/packages/core-kernel/src/services/events/dispatcher.ts b/packages/core-kernel/src/services/events/dispatcher.ts index bd43333b0d..74403e1d29 100644 --- a/packages/core-kernel/src/services/events/dispatcher.ts +++ b/packages/core-kernel/src/services/events/dispatcher.ts @@ -1,3 +1,4 @@ +import mm from "micromatch"; import { EventListener, EventName, IEventDispatcher } from "../../contracts/core-kernel"; /** diff --git a/packages/core-kernel/src/services/log/adapters/console.ts b/packages/core-kernel/src/services/log/adapters/console.ts index 5694db9693..a74e465456 100644 --- a/packages/core-kernel/src/services/log/adapters/console.ts +++ b/packages/core-kernel/src/services/log/adapters/console.ts @@ -14,4 +14,22 @@ export class ConsoleLogger extends AbstractLogger implements ILogger { return this; } + + /** + * @protected + * @returns {Record} + * @memberof AbstractLogger + */ + protected getLevels(): Record { + return { + emergency: "error", + alert: "error", + critical: "error", + error: "error", + warning: "warn", + notice: "info", + info: "info", + debug: "debug", + }; + } } diff --git a/packages/core-kernel/src/services/log/factory.ts b/packages/core-kernel/src/services/log/factory.ts index e1bd17ebb5..b22e5eef00 100644 --- a/packages/core-kernel/src/services/log/factory.ts +++ b/packages/core-kernel/src/services/log/factory.ts @@ -19,26 +19,27 @@ export class LoggerFactory { public async make(driver: Kernel.ILogger): Promise { const instance: Kernel.ILogger = await driver.make(this.app); - instance.debug(`${this.app.token()}/${this.app.network()}@${this.app.version()}`); - this.logPaths(instance); + // instance.debug(`${this.app.token()}/${this.app.network()}@${this.app.version()}`); + + // this.logPaths(instance); return instance; } - /** - * @private - * @param {Kernel.ILogger} driver - * @memberof LoggerFactory - */ - private logPaths(driver: Kernel.ILogger): void { - for (const [key, value] of Object.entries({ - Data: process.env.CORE_PATH_DATA, - Config: process.env.CORE_PATH_CONFIG, - Cache: process.env.CORE_PATH_CACHE, - Log: process.env.CORE_PATH_LOG, - Temp: process.env.CORE_PATH_TEMP, - })) { - driver.debug(`${key} Directory: ${value}`); - } - } + // /** + // * @private + // * @param {Kernel.ILogger} driver + // * @memberof LoggerFactory + // */ + // private logPaths(driver: Kernel.ILogger): void { + // for (const [key, value] of Object.entries({ + // Data: this.app.dataPath(), + // Config: this.app.configPath(), + // Cache: this.app.cachePath(), + // Log: this.app.logPath(), + // Temp: this.app.tempPath(), + // })) { + // driver.debug(`${key} Directory: ${value}`); + // } + // } } diff --git a/packages/core-kernel/src/support/service-provider.ts b/packages/core-kernel/src/support/service-provider.ts index 3c2feb2c18..58921493fb 100644 --- a/packages/core-kernel/src/support/service-provider.ts +++ b/packages/core-kernel/src/support/service-provider.ts @@ -1,4 +1,4 @@ -import { PackageJson } from "type-fest"; +import { JsonObject, PackageJson } from "type-fest"; import { Kernel } from "../contracts"; export abstract class AbstractServiceProvider { @@ -23,7 +23,13 @@ export abstract class AbstractServiceProvider { */ public constructor(app: Kernel.IApplication, opts: Record = {}) { this.app = app; - this.opts = opts; + this.opts = { ...opts, ...this.getDefaults() }; + + const globalOptions: JsonObject | undefined = app.config("options")[this.getName()]; + + if (globalOptions) { + this.opts = { ...this.opts, ...globalOptions }; + } } /** diff --git a/packages/core-logger-pino/src/driver.ts b/packages/core-logger-pino/src/driver.ts index e769edce91..74da425c69 100644 --- a/packages/core-logger-pino/src/driver.ts +++ b/packages/core-logger-pino/src/driver.ts @@ -39,9 +39,21 @@ export class PinoLogger extends Services.Log.AbstractLogger { return this; } + /** + * @protected + * @returns {Record} + * @memberof AbstractLogger + */ protected getLevels(): Record { return { - verbose: "trace", + emergency: "fatal", + alert: "fatal", + critical: "fatal", + error: "error", + warning: "warn", + notice: "info", + info: "info", + debug: "debug", }; } diff --git a/packages/core-p2p/src/defaults.ts b/packages/core-p2p/src/defaults.ts index b5d9d184e9..d13be25afb 100644 --- a/packages/core-p2p/src/defaults.ts +++ b/packages/core-p2p/src/defaults.ts @@ -8,7 +8,7 @@ export const defaults = { /** * The minimum peer version we expect */ - minimumVersions: ["^2.4 || ^2.5", "^2.4.0-next.0 || ^2.5.0-next.0"], + minimumVersions: ["^3.0", "^3.0-next.0"], /** * The number of peers we expect to be available to start a relay */ diff --git a/packages/core-p2p/src/event-listener.ts b/packages/core-p2p/src/event-listener.ts index 075b2b4d8c..679aeaf1e1 100644 --- a/packages/core-p2p/src/event-listener.ts +++ b/packages/core-p2p/src/event-listener.ts @@ -2,7 +2,7 @@ import { app, Contracts } from "@arkecosystem/core-kernel"; export class EventListener { private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); public constructor(service: Contracts.P2P.IPeerService) { diff --git a/packages/core-p2p/src/network-monitor.ts b/packages/core-p2p/src/network-monitor.ts index 6e1ae691f3..a06277e289 100644 --- a/packages/core-p2p/src/network-monitor.ts +++ b/packages/core-p2p/src/network-monitor.ts @@ -22,7 +22,7 @@ export class NetworkMonitor implements Contracts.P2P.INetworkMonitor { private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); private readonly communicator: Contracts.P2P.IPeerCommunicator; @@ -462,7 +462,7 @@ export class NetworkMonitor implements Contracts.P2P.INetworkMonitor { } private async populateSeedPeers(): Promise { - const peerList: IPeerData[] = app.config("peers.list"); + const peerList: IPeerData[] = app.config("peers").list; if (!peerList) { app.terminate("No seed peers defined in peers.json"); diff --git a/packages/core-p2p/src/peer-communicator.ts b/packages/core-p2p/src/peer-communicator.ts index e7accb2940..4e937c1e0a 100644 --- a/packages/core-p2p/src/peer-communicator.ts +++ b/packages/core-p2p/src/peer-communicator.ts @@ -13,7 +13,7 @@ import { isValidVersion, socketEmit } from "./utils"; export class PeerCommunicator implements Contracts.P2P.IPeerCommunicator { private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); constructor(private readonly connector: Contracts.P2P.IPeerConnector) {} diff --git a/packages/core-p2p/src/peer-processor.ts b/packages/core-p2p/src/peer-processor.ts index beda186e95..aae5e923b3 100644 --- a/packages/core-p2p/src/peer-processor.ts +++ b/packages/core-p2p/src/peer-processor.ts @@ -10,7 +10,7 @@ export class PeerProcessor implements Contracts.P2P.IPeerProcessor { private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); private readonly communicator: Contracts.P2P.IPeerCommunicator; diff --git a/packages/core-p2p/src/service-provider.ts b/packages/core-p2p/src/service-provider.ts index f65bdcee43..f7c20e4af7 100644 --- a/packages/core-p2p/src/service-provider.ts +++ b/packages/core-p2p/src/service-provider.ts @@ -11,6 +11,8 @@ import { startSocketServer } from "./socket-server"; export class ServiceProvider extends Support.AbstractServiceProvider { public async register(): Promise { + this.app.bind("p2p.options", this.opts); + this.app.resolve("logger").info("Starting P2P Interface"); const service: Contracts.P2P.IPeerService = this.makePeerService(this.opts); @@ -23,7 +25,6 @@ export class ServiceProvider extends Support.AbstractServiceProvider { } this.app.bind("p2p", service); - this.app.bind("p2p.options", this.opts); } public async dispose(): Promise { diff --git a/packages/core-p2p/src/socket-server/versions/internal.ts b/packages/core-p2p/src/socket-server/versions/internal.ts index a6db1470b1..83a4b50350 100644 --- a/packages/core-p2p/src/socket-server/versions/internal.ts +++ b/packages/core-p2p/src/socket-server/versions/internal.ts @@ -7,7 +7,7 @@ export const acceptNewPeer = async ({ service, req }: { service: Contracts.P2P.I }; export const emitEvent = ({ req }): void => { - app.resolve("event-emitter").dispatch(req.data.event, req.data.body); + app.resolve("event-dispatcher").dispatch(req.data.event, req.data.body); }; export const getUnconfirmedTransactions = async (): Promise => { diff --git a/packages/core-p2p/src/socket-server/versions/utils.ts b/packages/core-p2p/src/socket-server/versions/utils.ts index a5d50b56c3..080891f744 100644 --- a/packages/core-p2p/src/socket-server/versions/utils.ts +++ b/packages/core-p2p/src/socket-server/versions/utils.ts @@ -9,9 +9,9 @@ export const isAppReady = (): { p2p: boolean; } => { return { - transactionPool: !!app.resolve("transaction-pool"), - blockchain: !!app.resolve("blockchain"), - p2p: !!app.resolve("p2p"), + transactionPool: !!app.has("transaction-pool"), + blockchain: !!app.has("blockchain"), + p2p: !!app.has("p2p"), }; }; diff --git a/packages/core-snapshots/src/transport/index.ts b/packages/core-snapshots/src/transport/index.ts index 160217bf5a..586c7c32d2 100644 --- a/packages/core-snapshots/src/transport/index.ts +++ b/packages/core-snapshots/src/transport/index.ts @@ -13,7 +13,7 @@ import { Codec } from "./codec"; import { canImportRecord, verifyData } from "./verification"; const logger = app.resolve("logger"); -const emitter = app.resolve("event-emitter"); +const emitter = app.resolve("event-dispatcher"); const fixData = (table, data) => { if (table === "blocks" && data.height === 1) { diff --git a/packages/core-state/src/stores/state.ts b/packages/core-state/src/stores/state.ts index 174623e1f4..3c953553f5 100644 --- a/packages/core-state/src/stores/state.ts +++ b/packages/core-state/src/stores/state.ts @@ -98,7 +98,7 @@ export class StateStore implements Contracts.State.IStateStore { Managers.configManager.setHeight(block.data.height); if (Managers.configManager.isNewMilestone()) { - app.resolve("event-emitter").dispatch( + app.resolve("event-dispatcher").dispatch( Enums.Event.Internal.MilestoneChanged, ); } diff --git a/packages/core-transaction-pool/src/connection.ts b/packages/core-transaction-pool/src/connection.ts index ea4ea92e07..4296d23035 100644 --- a/packages/core-transaction-pool/src/connection.ts +++ b/packages/core-transaction-pool/src/connection.ts @@ -23,7 +23,7 @@ export class Connection implements Contracts.TransactionPool.IConnection { Contracts.Database.IDatabaseService >("database"); private readonly emitter: Contracts.Kernel.IEventDispatcher = app.resolve( - "event-emitter", + "event-dispatcher", ); private readonly logger: Contracts.Kernel.ILogger = app.resolve("logger"); diff --git a/packages/core-transaction-pool/src/service-provider.ts b/packages/core-transaction-pool/src/service-provider.ts index 4cf8f722ac..53a8130852 100644 --- a/packages/core-transaction-pool/src/service-provider.ts +++ b/packages/core-transaction-pool/src/service-provider.ts @@ -10,7 +10,7 @@ export class ServiceProvider extends Support.AbstractServiceProvider { public async register(): Promise { this.app.resolve("logger").info("Connecting to transaction pool"); - const connection = new ConnectionManager().createConnection( + const connection = await new ConnectionManager().createConnection( new Connection({ options: this.opts, walletManager: new WalletManager(), @@ -24,9 +24,13 @@ export class ServiceProvider extends Support.AbstractServiceProvider { } public async dispose(): Promise { - this.app.resolve("logger").info("Disconnecting from transaction pool"); + try { + this.app.resolve("logger").info("Disconnecting from transaction pool"); - this.app.resolve("transaction-pool").disconnect(); + this.app.resolve("transaction-pool").disconnect(); + } catch (error) { + // @TODO: handle + } } public getDefaults(): Record { diff --git a/packages/core-webhooks/src/listener.ts b/packages/core-webhooks/src/listener.ts index 7899eafb9c..0f000d4dbd 100644 --- a/packages/core-webhooks/src/listener.ts +++ b/packages/core-webhooks/src/listener.ts @@ -6,7 +6,7 @@ import { IWebhook } from "./interfaces"; export const startListeners = (): void => { for (const event of Object.values(Enums.Event.State)) { - app.resolve("event-emitter").listen(event, async payload => { + app.resolve("event-dispatcher").listen(event, async payload => { const webhooks: IWebhook[] = database.findByEvent(event).filter((webhook: IWebhook) => { if (!webhook.enabled) { return false; diff --git a/packages/core/bin/config/devnet/plugins.js b/packages/core/bin/config/devnet/plugins.js index e92b33b3d6..cfefa42812 100644 --- a/packages/core/bin/config/devnet/plugins.js +++ b/packages/core/bin/config/devnet/plugins.js @@ -1,5 +1,4 @@ module.exports = { - "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, "@arkecosystem/core-database-postgres": { diff --git a/packages/core/bin/config/mainnet/plugins.js b/packages/core/bin/config/mainnet/plugins.js index c18fd7ca24..72c5314b49 100644 --- a/packages/core/bin/config/mainnet/plugins.js +++ b/packages/core/bin/config/mainnet/plugins.js @@ -1,5 +1,4 @@ module.exports = { - "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, "@arkecosystem/core-database-postgres": { diff --git a/packages/core/bin/config/testnet/config.js b/packages/core/bin/config/testnet/config.js new file mode 100644 index 0000000000..cfd9676891 --- /dev/null +++ b/packages/core/bin/config/testnet/config.js @@ -0,0 +1,132 @@ +module.exports = { + providers: { + "@arkecosystem/core-logger-pino": {}, + "@arkecosystem/core-state": {}, + "@arkecosystem/core-database": {}, + "@arkecosystem/core-database-postgres": { + connection: { + host: process.env.CORE_DB_HOST || "localhost", + port: process.env.CORE_DB_PORT || 5432, + database: process.env.CORE_DB_DATABASE || `${process.env.CORE_TOKEN}_${process.env.CORE_NETWORK_NAME}`, + user: process.env.CORE_DB_USERNAME || process.env.CORE_TOKEN, + password: process.env.CORE_DB_PASSWORD || "password", + }, + }, + "@arkecosystem/core-transaction-pool": { + enabled: true, + maxTransactionsPerSender: process.env.CORE_TRANSACTION_POOL_MAX_PER_SENDER || 300, + allowedSenders: [], + dynamicFees: { + enabled: true, + minFeePool: 1000, + minFeeBroadcast: 1000, + addonBytes: { + transfer: 100, + secondSignature: 250, + delegateRegistration: 400000, + vote: 100, + multiSignature: 500, + ipfs: 250, + multiPayment: 500, + delegateResignation: 100, + htlcLock: 100, + htlcClaim: 0, + htlcRefund: 0, + }, + }, + }, + "@arkecosystem/core-p2p": { + server: { + port: process.env.CORE_P2P_PORT || 4000, + }, + minimumNetworkReach: 5, + }, + "@arkecosystem/core-blockchain": {}, + "@arkecosystem/core-api": { + enabled: !process.env.CORE_API_DISABLED, + host: process.env.CORE_API_HOST || "0.0.0.0", + port: process.env.CORE_API_PORT || 4003, + }, + "@arkecosystem/core-wallet-api": {}, + "@arkecosystem/core-webhooks": { + enabled: process.env.CORE_WEBHOOKS_ENABLED, + server: { + host: process.env.CORE_WEBHOOKS_HOST || "0.0.0.0", + port: process.env.CORE_WEBHOOKS_PORT || 4004, + whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], + }, + }, + "@arkecosystem/core-forger": {}, + // "@arkecosystem/core-exchange-json-rpc": { + // enabled: process.env.CORE_EXCHANGE_JSON_RPC_ENABLED, + // host: process.env.CORE_EXCHANGE_JSON_RPC_HOST || "0.0.0.0", + // port: process.env.CORE_EXCHANGE_JSON_RPC_PORT || 8080, + // allowRemote: false, + // whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], + // }, + // "@arkecosystem/core-snapshots": {}, + }, + delegates: { + secrets: [ + "clay harbor enemy utility margin pretty hub comic piece aerobic umbrella acquire", + "venue below waste gather spin cruise title still boost mother flash tuna", + "craft imitate step mixture patch forest volcano business charge around girl confirm", + "fatal hat sail asset chase barrel pluck bag approve coral slab bright", + "flash thank strike stove grain remove match reflect excess present beyond matrix", + "various present shine domain outdoor neck soup diesel limit express genuine tuna", + "hurdle pulse sheriff anchor two hope income pattern hazard bacon book night", + "glow boss party require silk interest pyramid marriage try wisdom snow grab", + "direct palace screen shuffle world fit produce rubber jelly gather river ordinary", + "wall ketchup shed word twist flip knock liar merge rural ill pond", + "measure blue volcano month orphan only cupboard found laugh peasant drama monitor", + "scissors sort pause medal target diesel reveal stock maze party gauge vacant", + "hand anchor hip pyramid taxi vote celery clap tribe damage shrimp brave", + "merge thunder detect stove else bottom favorite doll learn festival basic basic", + "educate attitude rely combine treat balcony west reopen coil west grab depth", + "advance silver advance squeeze load stone middle garden perfect invest field lounge", + "prison tobacco acquire stone dignity palace note decade they current lesson robot", + "team impact stadium year security steak harsh vacant fire pelican until olympic", + "walk intact ice prevent fit trial frog glory monkey once grunt gentle", + "same lens parrot suspect just sunset frown exercise lemon two mistake robust", + "skill insect issue crazy erase okay govern upgrade bounce dress motor athlete", + "peasant alert hard deposit naive follow page fiscal normal awful wedding history", + "resemble abandon same total oppose noise dune order fatal rhythm pink science", + "wide mesh ketchup acquire bright day mountain final below hamster scout drive", + "half weasel poet better rocket fan help left blade soda argue system", + "target sort neutral address language spike measure jaguar glance strong drop zone", + "race total stage trap wool believe twin pudding claim claim eternal miss", + "parade isolate wing vague magic husband acid skin skate path fence rib", + "neither fine dry priority example obtain bread reopen afford coyote milk minor", + "token atom lemon game charge area goose hotel excess endless spice oblige", + "pledge buffalo finish pipe mule popular bind clinic draft salon swamp purpose", + "west hat hold stand unique panther cable extend spell shaft injury reopen", + "van impulse pole install profit excuse give auction expire remain skate input", + "wrist maze potato april survey burden bamboo knee foot carry speak prison", + "three toddler copy owner pencil minimum doctor orange bottom ice detail design", + "ceiling warrior person thing whisper jeans black cricket drift ahead tornado typical", + "obvious mutual tone usual valve credit soccer mention also clown main box", + "valve slot soft green scale menu anxiety live drill legend upgrade chimney", + "twist comfort mule weather print oven cabin seek punch rival prepare sphere", + "say tumble glass argue aware service force caution until grocery hammer fetch", + "idea illegal empty frozen canvas arctic number poet rely track size obscure", + "chalk try large tower shed warfare blade clerk fame second charge tobacco", + "category nice verb fox start able brass climb boss luggage voice whale", + "favorite emotion trumpet visual welcome spend fine lock image review garage opera", + "waste axis humor auction next salmon much margin useful glimpse insect rotate", + "remember rose genuine police guard old flavor parent gain cross twelve first", + "coil tray elder mask circle crush anger electric harbor onion grab will", + "shove airport bus gather radio derive below horse canvas crime tribe adjust", + "retire lend burden cricket able sheriff output grocery empty scorpion flat inquiry", + "agree grain record shift fossil summer hunt mutual net vast behind pilot", + "decide rhythm oyster lady they merry betray jelly coyote solve episode then", + ], + }, + peers: { + list: [ + { + ip: "127.0.0.1", + port: 4000, + }, + ], + }, +}; diff --git a/packages/core/bin/config/testnet/delegates.json b/packages/core/bin/config/testnet/delegates.json deleted file mode 100644 index 822250478e..0000000000 --- a/packages/core/bin/config/testnet/delegates.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "secrets": [ - "clay harbor enemy utility margin pretty hub comic piece aerobic umbrella acquire", - "venue below waste gather spin cruise title still boost mother flash tuna", - "craft imitate step mixture patch forest volcano business charge around girl confirm", - "fatal hat sail asset chase barrel pluck bag approve coral slab bright", - "flash thank strike stove grain remove match reflect excess present beyond matrix", - "various present shine domain outdoor neck soup diesel limit express genuine tuna", - "hurdle pulse sheriff anchor two hope income pattern hazard bacon book night", - "glow boss party require silk interest pyramid marriage try wisdom snow grab", - "direct palace screen shuffle world fit produce rubber jelly gather river ordinary", - "wall ketchup shed word twist flip knock liar merge rural ill pond", - "measure blue volcano month orphan only cupboard found laugh peasant drama monitor", - "scissors sort pause medal target diesel reveal stock maze party gauge vacant", - "hand anchor hip pyramid taxi vote celery clap tribe damage shrimp brave", - "merge thunder detect stove else bottom favorite doll learn festival basic basic", - "educate attitude rely combine treat balcony west reopen coil west grab depth", - "advance silver advance squeeze load stone middle garden perfect invest field lounge", - "prison tobacco acquire stone dignity palace note decade they current lesson robot", - "team impact stadium year security steak harsh vacant fire pelican until olympic", - "walk intact ice prevent fit trial frog glory monkey once grunt gentle", - "same lens parrot suspect just sunset frown exercise lemon two mistake robust", - "skill insect issue crazy erase okay govern upgrade bounce dress motor athlete", - "peasant alert hard deposit naive follow page fiscal normal awful wedding history", - "resemble abandon same total oppose noise dune order fatal rhythm pink science", - "wide mesh ketchup acquire bright day mountain final below hamster scout drive", - "half weasel poet better rocket fan help left blade soda argue system", - "target sort neutral address language spike measure jaguar glance strong drop zone", - "race total stage trap wool believe twin pudding claim claim eternal miss", - "parade isolate wing vague magic husband acid skin skate path fence rib", - "neither fine dry priority example obtain bread reopen afford coyote milk minor", - "token atom lemon game charge area goose hotel excess endless spice oblige", - "pledge buffalo finish pipe mule popular bind clinic draft salon swamp purpose", - "west hat hold stand unique panther cable extend spell shaft injury reopen", - "van impulse pole install profit excuse give auction expire remain skate input", - "wrist maze potato april survey burden bamboo knee foot carry speak prison", - "three toddler copy owner pencil minimum doctor orange bottom ice detail design", - "ceiling warrior person thing whisper jeans black cricket drift ahead tornado typical", - "obvious mutual tone usual valve credit soccer mention also clown main box", - "valve slot soft green scale menu anxiety live drill legend upgrade chimney", - "twist comfort mule weather print oven cabin seek punch rival prepare sphere", - "say tumble glass argue aware service force caution until grocery hammer fetch", - "idea illegal empty frozen canvas arctic number poet rely track size obscure", - "chalk try large tower shed warfare blade clerk fame second charge tobacco", - "category nice verb fox start able brass climb boss luggage voice whale", - "favorite emotion trumpet visual welcome spend fine lock image review garage opera", - "waste axis humor auction next salmon much margin useful glimpse insect rotate", - "remember rose genuine police guard old flavor parent gain cross twelve first", - "coil tray elder mask circle crush anger electric harbor onion grab will", - "shove airport bus gather radio derive below horse canvas crime tribe adjust", - "retire lend burden cricket able sheriff output grocery empty scorpion flat inquiry", - "agree grain record shift fossil summer hunt mutual net vast behind pilot", - "decide rhythm oyster lady they merry betray jelly coyote solve episode then" - ] -} diff --git a/packages/core/bin/config/testnet/peers.json b/packages/core/bin/config/testnet/peers.json deleted file mode 100644 index 13faa40da6..0000000000 --- a/packages/core/bin/config/testnet/peers.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "list": [ - { - "ip": "127.0.0.1", - "port": 4000 - } - ] -} diff --git a/packages/core/bin/config/testnet/plugins.js b/packages/core/bin/config/testnet/plugins.js deleted file mode 100644 index 00b283c282..0000000000 --- a/packages/core/bin/config/testnet/plugins.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = { - "@arkecosystem/core-event-emitter": {}, - "@arkecosystem/core-logger-pino": {}, - "@arkecosystem/core-state": {}, - "@arkecosystem/core-database-postgres": { - connection: { - host: process.env.CORE_DB_HOST || "localhost", - port: process.env.CORE_DB_PORT || 5432, - database: process.env.CORE_DB_DATABASE || `${process.env.CORE_TOKEN}_${process.env.CORE_NETWORK_NAME}`, - user: process.env.CORE_DB_USERNAME || process.env.CORE_TOKEN, - password: process.env.CORE_DB_PASSWORD || "password", - }, - }, - "@arkecosystem/core-transaction-pool": { - enabled: true, - maxTransactionsPerSender: process.env.CORE_TRANSACTION_POOL_MAX_PER_SENDER || 300, - allowedSenders: [], - dynamicFees: { - enabled: true, - minFeePool: 1000, - minFeeBroadcast: 1000, - addonBytes: { - transfer: 100, - secondSignature: 250, - delegateRegistration: 400000, - vote: 100, - multiSignature: 500, - ipfs: 250, - multiPayment: 500, - delegateResignation: 100, - htlcLock: 100, - htlcClaim: 0, - htlcRefund: 0, - }, - }, - }, - "@arkecosystem/core-p2p": { - server: { - port: process.env.CORE_P2P_PORT || 4000, - }, - minimumNetworkReach: 5, - }, - "@arkecosystem/core-blockchain": {}, - "@arkecosystem/core-api": { - enabled: !process.env.CORE_API_DISABLED, - host: process.env.CORE_API_HOST || "0.0.0.0", - port: process.env.CORE_API_PORT || 4003, - }, - "@arkecosystem/core-wallet-api": {}, - "@arkecosystem/core-webhooks": { - enabled: process.env.CORE_WEBHOOKS_ENABLED, - server: { - host: process.env.CORE_WEBHOOKS_HOST || "0.0.0.0", - port: process.env.CORE_WEBHOOKS_PORT || 4004, - whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], - }, - }, - "@arkecosystem/core-forger": {}, - "@arkecosystem/core-exchange-json-rpc": { - enabled: process.env.CORE_EXCHANGE_JSON_RPC_ENABLED, - host: process.env.CORE_EXCHANGE_JSON_RPC_HOST || "0.0.0.0", - port: process.env.CORE_EXCHANGE_JSON_RPC_PORT || 8080, - allowRemote: false, - whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], - }, - "@arkecosystem/core-snapshots": {}, -}; diff --git a/packages/core/src/commands/command.ts b/packages/core/src/commands/command.ts index e1c293d093..9ab6c5d8dd 100644 --- a/packages/core/src/commands/command.ts +++ b/packages/core/src/commands/command.ts @@ -97,10 +97,7 @@ export abstract class BaseCommand extends Command { protected async buildApplication(app: Contracts.Kernel.IApplication, flags: CommandFlags, config: Options) { process.env.CORE_ENV = flags.env; - await app.bootstrap({ - config, - flags: { ...flags, ...{ skipPlugins: flags.skipPlugins } }, - }); + await app.bootstrap({ ...config, ...flags, ...{ skipPlugins: flags.skipPlugins } }); return app; } @@ -248,13 +245,14 @@ export abstract class BaseCommand extends Command { // config const { config } = await this.getPaths(flags); - const configDelegates = join(config, "delegates.json"); + // @TODO: update to follow new config convention + const configDelegates = join(config, "config.js"); if (!existsSync(configDelegates)) { this.error(`The ${configDelegates} file does not exist.`); } - const delegates = require(configDelegates); + const { delegates } = require(configDelegates); if (!bip38 && delegates.bip38) { bip38 = delegates.bip38; diff --git a/packages/core/src/commands/config/forger/bip39.ts b/packages/core/src/commands/config/forger/bip39.ts index c2961a6044..a5e3c522a9 100644 --- a/packages/core/src/commands/config/forger/bip39.ts +++ b/packages/core/src/commands/config/forger/bip39.ts @@ -56,7 +56,8 @@ $ ark config:forger:bip39 --bip39="..." private async performConfiguration(flags): Promise { const { config } = await this.getPaths(flags); - const delegatesConfig = `${config}/delegates.json`; + // @TODO: update to follow new config convention + const delegatesConfig = `${config}/config.js`; this.addTask("Prepare configuration", async () => { if (!fs.existsSync(delegatesConfig)) { @@ -71,7 +72,7 @@ $ ark config:forger:bip39 --bip39="..." }); this.addTask("Write BIP39 to configuration", async () => { - const delegates = require(delegatesConfig); + const { delegates } = require(delegatesConfig); delegates.secrets = [flags.bip39]; delete delegates.bip38; diff --git a/packages/core/src/commands/forger/run.ts b/packages/core/src/commands/forger/run.ts index ebce6d8376..fdae2a93ae 100644 --- a/packages/core/src/commands/forger/run.ts +++ b/packages/core/src/commands/forger/run.ts @@ -28,7 +28,6 @@ $ ark forger:run --bip38="..." --password="..." await this.buildApplication(app, flags, { include: [ - "@arkecosystem/core-event-emitter", "@arkecosystem/core-config", "@arkecosystem/core-logger", "@arkecosystem/core-logger-pino", diff --git a/packages/core/src/commands/snapshot/restore.ts b/packages/core/src/commands/snapshot/restore.ts index 7257e3e02e..5d837e6196 100644 --- a/packages/core/src/commands/snapshot/restore.ts +++ b/packages/core/src/commands/snapshot/restore.ts @@ -42,7 +42,7 @@ export class RestoreCommand extends BaseCommand { } } - const emitter = app.resolve("event-emitter"); + const emitter = app.resolve("event-dispatcher"); const progressBar = new cliProgress.Bar( { diff --git a/packages/core/src/helpers/replay.ts b/packages/core/src/helpers/replay.ts index 6ff1eaabfc..0d604b9fa8 100644 --- a/packages/core/src/helpers/replay.ts +++ b/packages/core/src/helpers/replay.ts @@ -6,7 +6,6 @@ export const setUpLite = async (options): Promise = // "@arkecosystem/core-blockchain": { replay: true }, // }, // include: [ - // "@arkecosystem/core-event-emitter", // "@arkecosystem/core-logger-pino", // "@arkecosystem/core-state", // "@arkecosystem/core-database-postgres", diff --git a/packages/core/src/helpers/snapshot.ts b/packages/core/src/helpers/snapshot.ts index 5b1da0cf43..e31e138771 100644 --- a/packages/core/src/helpers/snapshot.ts +++ b/packages/core/src/helpers/snapshot.ts @@ -6,7 +6,6 @@ import { CommandFlags } from "../types"; export const setUpLite = async (options): Promise => { // await app.setUp(version, options, { // include: [ - // "@arkecosystem/core-event-emitter", // "@arkecosystem/core-logger-pino", // "@arkecosystem/core-state", // "@arkecosystem/core-database-postgres",