From ea06ba42816699e619e11d34477277909548dd3e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 6 Mar 2019 15:48:19 +0200 Subject: [PATCH 1/2] fix(core-tester-cli): set crypto network for debug commands (#2204) --- .circleci/config.yml | 144 ++++++++++-------- .../commands/debug/deserialize.test.ts | 22 ++- .../commands/debug/identity.test.ts | 39 +++-- .../commands/debug/serialize.test.ts | 32 +++- .../commands/debug/verify-second.test.ts | 2 + .../commands/debug/verify.test.ts | 15 +- .../core-tester-cli/src/commands/command.ts | 10 +- .../src/commands/debug/deserialize.ts | 4 +- .../src/commands/debug/identity.ts | 15 +- .../src/commands/debug/serialize.ts | 4 +- .../commands/debug/verify-second-signature.ts | 4 +- .../src/commands/debug/verify.ts | 4 +- packages/crypto/src/managers/index.ts | 4 +- 13 files changed, 202 insertions(+), 97 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1d23eca842..685cb37519 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -41,19 +41,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -95,12 +99,6 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/core-database-postgres/ --coverageDirectory .coverage/unit/core-database-postgres - - run: - name: core-event-emitter - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-event-emitter/ --coverageDirectory - .coverage/unit/core-event-emitter - run: name: core-api - integration command: >- @@ -164,19 +162,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -218,12 +220,6 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/core-database-postgres/ --coverageDirectory .coverage/unit/core-database-postgres - - run: - name: core-event-emitter - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-event-emitter/ --coverageDirectory - .coverage/unit/core-event-emitter - run: name: core-api - integration command: >- @@ -287,19 +283,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -311,6 +311,12 @@ jobs: - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database + - run: + name: core-event-emitter - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-event-emitter/ --coverageDirectory + .coverage/unit/core-event-emitter - run: name: core-forger - unit command: >- @@ -341,36 +347,12 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/core-logger-pino/ --coverageDirectory .coverage/unit/core-logger-pino - - run: - name: core-p2p - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-p2p/ --coverageDirectory - .coverage/unit/core-p2p - - run: - name: core-snapshots - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-snapshots/ --coverageDirectory - .coverage/unit/core-snapshots - - run: - name: core-tester-cli - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-tester-cli/ --coverageDirectory - .coverage/unit/core-tester-cli - run: name: core-json-rpc - integration command: >- cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /integration/core-json-rpc/ --coverageDirectory .coverage/integration/core-json-rpc - - run: - name: core-p2p - integration - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /integration/core-p2p/ --coverageDirectory - .coverage/integration/core-p2p - run: name: Last 1000 lines of test output when: on_fail @@ -422,19 +404,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -446,6 +432,24 @@ jobs: - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database + - run: + name: core-p2p - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-p2p/ --coverageDirectory + .coverage/unit/core-p2p + - run: + name: core-snapshots - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-snapshots/ --coverageDirectory + .coverage/unit/core-snapshots + - run: + name: core-tester-cli - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-tester-cli/ --coverageDirectory + .coverage/unit/core-tester-cli - run: name: core-transaction-pool - unit command: >- @@ -482,6 +486,12 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/crypto/ --coverageDirectory .coverage/unit/crypto + - run: + name: core-p2p - integration + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /integration/core-p2p/ --coverageDirectory + .coverage/integration/core-p2p - run: name: core-transaction-pool - integration command: >- @@ -539,19 +549,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -563,6 +577,12 @@ jobs: - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database + - run: + name: core-event-emitter - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-event-emitter/ --coverageDirectory + .coverage/unit/core-event-emitter - run: name: core-forger - unit command: >- @@ -593,36 +613,12 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/core-logger-pino/ --coverageDirectory .coverage/unit/core-logger-pino - - run: - name: core-p2p - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-p2p/ --coverageDirectory - .coverage/unit/core-p2p - - run: - name: core-snapshots - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-snapshots/ --coverageDirectory - .coverage/unit/core-snapshots - - run: - name: core-tester-cli - unit - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /unit/core-tester-cli/ --coverageDirectory - .coverage/unit/core-tester-cli - run: name: core-json-rpc - integration command: >- cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /integration/core-json-rpc/ --coverageDirectory .coverage/integration/core-json-rpc - - run: - name: core-p2p - integration - command: >- - cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn - test:coverage /integration/core-p2p/ --coverageDirectory - .coverage/integration/core-p2p - run: name: Last 1000 lines of test output when: on_fail @@ -674,19 +670,23 @@ jobs: - ./packages/core-container/node_modules - ./packages/core-database/node_modules - ./packages/core-database-postgres/node_modules + - ./packages/core-debugger-cli/node_modules - ./packages/core-elasticsearch/node_modules - ./packages/core-error-tracker-bugsnag/node_modules - ./packages/core-error-tracker-sentry/node_modules - ./packages/core-event-emitter/node_modules - ./packages/core-forger/node_modules + - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules + - ./packages/core-logger-winston/node_modules - ./packages/core-p2p/node_modules - ./packages/core-snapshots/node_modules + - ./packages/core-test-utils/node_modules - ./packages/core-tester-cli/node_modules - ./packages/core-transaction-pool/node_modules - ./packages/core-transactions/node_modules @@ -698,6 +698,24 @@ jobs: - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database + - run: + name: core-p2p - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-p2p/ --coverageDirectory + .coverage/unit/core-p2p + - run: + name: core-snapshots - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-snapshots/ --coverageDirectory + .coverage/unit/core-snapshots + - run: + name: core-tester-cli - unit + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /unit/core-tester-cli/ --coverageDirectory + .coverage/unit/core-tester-cli - run: name: core-transaction-pool - unit command: >- @@ -734,6 +752,12 @@ jobs: cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn test:coverage /unit/crypto/ --coverageDirectory .coverage/unit/crypto + - run: + name: core-p2p - integration + command: >- + cd ~/core/.circleci && ./rebuild-db.sh && cd ~/core && yarn + test:coverage /integration/core-p2p/ --coverageDirectory + .coverage/integration/core-p2p - run: name: core-transaction-pool - integration command: >- diff --git a/__tests__/unit/core-tester-cli/commands/debug/deserialize.test.ts b/__tests__/unit/core-tester-cli/commands/debug/deserialize.test.ts index 3775c3b78c..c1d2ffcf26 100644 --- a/__tests__/unit/core-tester-cli/commands/debug/deserialize.test.ts +++ b/__tests__/unit/core-tester-cli/commands/debug/deserialize.test.ts @@ -7,7 +7,9 @@ describe("Commands - Deserialize", () => { const fixtureTransaction = require("../../__fixtures__/transaction.json"); it("should deserialize a block (not-full)", async () => { - const actual = JSON.parse(await DeserializeCommand.run(["--data", fixtureBlock.serialized, "--type", "block"])); + const actual = JSON.parse( + await DeserializeCommand.run(["--data", fixtureBlock.serialized, "--type", "block", "--network", "devnet"]), + ); expect(actual.data.version).toBe(fixtureBlock.data.version); expect(actual.data.timestamp).toBe(fixtureBlock.data.timestamp); @@ -25,7 +27,14 @@ describe("Commands - Deserialize", () => { it("should deserialize a block (full)", async () => { const actual = JSON.parse( - await DeserializeCommand.run(["--data", fixtureBlock.serializedFull, "--type", "block"]), + await DeserializeCommand.run([ + "--data", + fixtureBlock.serializedFull, + "--type", + "block", + "--network", + "devnet", + ]), ); expect(actual.data.version).toBe(fixtureBlock.data.version); @@ -45,7 +54,14 @@ describe("Commands - Deserialize", () => { it("should deserialize a transaction", async () => { const actual = JSON.parse( - await DeserializeCommand.run(["--data", fixtureTransaction.serialized, "--type", "transaction"]), + await DeserializeCommand.run([ + "--data", + fixtureTransaction.serialized, + "--type", + "transaction", + "--network", + "devnet", + ]), ); expect(actual.type).toBe(fixtureTransaction.data.type); diff --git a/__tests__/unit/core-tester-cli/commands/debug/identity.test.ts b/__tests__/unit/core-tester-cli/commands/debug/identity.test.ts index 1362648740..eb81d1fb7b 100644 --- a/__tests__/unit/core-tester-cli/commands/debug/identity.test.ts +++ b/__tests__/unit/core-tester-cli/commands/debug/identity.test.ts @@ -13,9 +13,16 @@ describe("Commands - Identity", async () => { address: "D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", }; - expect(await IdentityCommand.run(["--data", fixtureIdentities.passphrase, "--type", "passphrase"])).toEqual( - expected, - ); + expect( + await IdentityCommand.run([ + "--data", + fixtureIdentities.passphrase, + "--type", + "passphrase", + "--network", + "devnet", + ]), + ).toEqual(expected); }); it("should return identities from privateKey", async () => { @@ -25,9 +32,16 @@ describe("Commands - Identity", async () => { address: "D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", }; - expect(await IdentityCommand.run(["--data", fixtureIdentities.privateKey, "--type", "privateKey"])).toEqual( - expected, - ); + expect( + await IdentityCommand.run([ + "--data", + fixtureIdentities.privateKey, + "--type", + "privateKey", + "--network", + "devnet", + ]), + ).toEqual(expected); }); it("should return identities from publicKey", async () => { @@ -36,8 +50,15 @@ describe("Commands - Identity", async () => { address: "D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib", }; - expect(await IdentityCommand.run(["--data", fixtureIdentities.publicKey, "--type", "publicKey"])).toEqual( - expected, - ); + expect( + await IdentityCommand.run([ + "--data", + fixtureIdentities.publicKey, + "--type", + "publicKey", + "--network", + "devnet", + ]), + ).toEqual(expected); }); }); diff --git a/__tests__/unit/core-tester-cli/commands/debug/serialize.test.ts b/__tests__/unit/core-tester-cli/commands/debug/serialize.test.ts index 6e26821bb8..7c24d61f0d 100644 --- a/__tests__/unit/core-tester-cli/commands/debug/serialize.test.ts +++ b/__tests__/unit/core-tester-cli/commands/debug/serialize.test.ts @@ -7,20 +7,42 @@ describe("Commands - Serialize", () => { const fixtureTransaction = require("../../__fixtures__/transaction.json"); it("should serialize a block (not-full)", async () => { - expect(await SerializeCommand.run(["--data", JSON.stringify(fixtureBlock.data), "--type", "block"])).toEqual( - fixtureBlock.serialized, - ); + expect( + await SerializeCommand.run([ + "--data", + JSON.stringify(fixtureBlock.data), + "--type", + "block", + "--network", + "devnet", + ]), + ).toEqual(fixtureBlock.serialized); }); it("should serialize a block (full)", async () => { expect( - await SerializeCommand.run(["--data", JSON.stringify(fixtureBlock.data), "--type", "block", "--full"]), + await SerializeCommand.run([ + "--data", + JSON.stringify(fixtureBlock.data), + "--type", + "block", + "--full", + "--network", + "devnet", + ]), ).toEqual(fixtureBlock.serializedFull); }); it("should serialize a transaction", async () => { expect( - await SerializeCommand.run(["--data", JSON.stringify(fixtureTransaction.data), "--type", "transaction"]), + await SerializeCommand.run([ + "--data", + JSON.stringify(fixtureTransaction.data), + "--type", + "transaction", + "--network", + "devnet", + ]), ).toEqual(fixtureTransaction.serialized); }); }); diff --git a/__tests__/unit/core-tester-cli/commands/debug/verify-second.test.ts b/__tests__/unit/core-tester-cli/commands/debug/verify-second.test.ts index 40b8236663..36ee54bf8a 100644 --- a/__tests__/unit/core-tester-cli/commands/debug/verify-second.test.ts +++ b/__tests__/unit/core-tester-cli/commands/debug/verify-second.test.ts @@ -12,6 +12,8 @@ describe("Commands - Verify Second", () => { fixtureTransaction.serialized, "--publicKey", "03699e966b2525f9088a6941d8d94f7869964a000efe65783d78ac82e1199fe609", + "--network", + "devnet", ]), ).toBeTrue(); }); diff --git a/__tests__/unit/core-tester-cli/commands/debug/verify.test.ts b/__tests__/unit/core-tester-cli/commands/debug/verify.test.ts index 8425ac3ebb..f0df9a3aeb 100644 --- a/__tests__/unit/core-tester-cli/commands/debug/verify.test.ts +++ b/__tests__/unit/core-tester-cli/commands/debug/verify.test.ts @@ -7,10 +7,21 @@ describe("Commands - Verify", () => { const fixtureTransaction = require("../../__fixtures__/transaction.json"); it("should verify a block", async () => { - expect(await VerifyCommand.run(["--data", fixtureBlock.serializedFull, "--type", "block"])).toBeTrue(); + expect( + await VerifyCommand.run(["--data", fixtureBlock.serializedFull, "--type", "block", "--network", "devnet"]), + ).toBeTrue(); }); it("should verify a transaction", async () => { - expect(await VerifyCommand.run(["--data", fixtureTransaction.serialized, "--type", "transaction"])).toBeTrue(); + expect( + await VerifyCommand.run([ + "--data", + fixtureTransaction.serialized, + "--type", + "transaction", + "--network", + "devnet", + ]), + ).toBeTrue(); }); }); diff --git a/packages/core-tester-cli/src/commands/command.ts b/packages/core-tester-cli/src/commands/command.ts index 0e381b1bbd..2b79a87801 100644 --- a/packages/core-tester-cli/src/commands/command.ts +++ b/packages/core-tester-cli/src/commands/command.ts @@ -54,10 +54,14 @@ export abstract class BaseCommand extends Command { }; public static flagsDebug = { - log: flags.string({ + network: flags.string({ + description: "network used for crypto", + default: "testnet", + }), + log: flags.boolean({ description: "log the data to the console", }), - copy: flags.string({ + copy: flags.boolean({ description: "copy the data to the clipboard", }), }; @@ -149,7 +153,7 @@ export abstract class BaseCommand extends Command { protected async getTransaction(id: string): Promise { try { const { data } = await this.api.get(`transactions/${id}`); - + return data; } catch (error) { logger.error(error.message); diff --git a/packages/core-tester-cli/src/commands/debug/deserialize.ts b/packages/core-tester-cli/src/commands/debug/deserialize.ts index 8f53e651b9..585a6b24bb 100644 --- a/packages/core-tester-cli/src/commands/debug/deserialize.ts +++ b/packages/core-tester-cli/src/commands/debug/deserialize.ts @@ -1,4 +1,4 @@ -import { models, Transaction } from "@arkecosystem/crypto"; +import { configManager, models, NetworkName, Transaction } from "@arkecosystem/crypto"; import { flags } from "@oclif/command"; import { handleOutput } from "../../utils"; import { BaseCommand } from "../command"; @@ -22,6 +22,8 @@ export class DeserializeCommand extends BaseCommand { public async run(): Promise { const { flags } = this.parse(DeserializeCommand); + configManager.setFromPreset(flags.network as NetworkName); + let output; if (flags.type === "transaction") { output = Transaction.fromHex(flags.data).data; diff --git a/packages/core-tester-cli/src/commands/debug/identity.ts b/packages/core-tester-cli/src/commands/debug/identity.ts index 3d257dff6e..f4e8573c08 100644 --- a/packages/core-tester-cli/src/commands/debug/identity.ts +++ b/packages/core-tester-cli/src/commands/debug/identity.ts @@ -1,4 +1,4 @@ -import { crypto } from "@arkecosystem/crypto"; +import { configManager, crypto, NetworkName } from "@arkecosystem/crypto"; import { flags } from "@oclif/command"; import { handleOutput } from "../../utils"; import { BaseCommand } from "../command"; @@ -12,11 +12,6 @@ export class IdentityCommand extends BaseCommand { description: "the data to get the identities from", required: true, }), - network: flags.integer({ - description: "the network version used for calculating the address.", - required: true, - default: 30, - }), type: flags.string({ description: "the input type is either of passphrase, privateKey or publicKey", required: true, @@ -26,6 +21,8 @@ export class IdentityCommand extends BaseCommand { public async run(): Promise { const { flags } = this.parse(IdentityCommand); + configManager.setFromPreset(flags.network as NetworkName); + let output; if (flags.type === "passphrase") { @@ -34,19 +31,19 @@ export class IdentityCommand extends BaseCommand { passphrase: flags.data, publicKey: keys.publicKey, privateKey: keys.privateKey, - address: crypto.getAddress(keys.publicKey, flags.network), + address: crypto.getAddress(keys.publicKey), }; } else if (flags.type === "privateKey") { const keys = crypto.getKeysByPrivateKey(flags.data); output = { publicKey: keys.publicKey, privateKey: keys.privateKey, - address: crypto.getAddress(keys.publicKey, flags.network), + address: crypto.getAddress(keys.publicKey), }; } else if (flags.type === "publicKey") { output = { publicKey: flags.data, - address: crypto.getAddress(flags.data, flags.network), + address: crypto.getAddress(flags.data), }; } diff --git a/packages/core-tester-cli/src/commands/debug/serialize.ts b/packages/core-tester-cli/src/commands/debug/serialize.ts index 0ae78aa331..b66c2b689f 100644 --- a/packages/core-tester-cli/src/commands/debug/serialize.ts +++ b/packages/core-tester-cli/src/commands/debug/serialize.ts @@ -1,4 +1,4 @@ -import { models, Transaction } from "@arkecosystem/crypto"; +import { configManager, models, NetworkName, Transaction } from "@arkecosystem/crypto"; import { flags } from "@oclif/command"; import { handleOutput } from "../../utils"; import { BaseCommand } from "../command"; @@ -25,6 +25,8 @@ export class SerializeCommand extends BaseCommand { public async run(): Promise { const { flags } = this.parse(SerializeCommand); + configManager.setFromPreset(flags.network as NetworkName); + const serialized = flags.type === "transaction" ? Transaction.fromData(JSON.parse(flags.data)).serialized diff --git a/packages/core-tester-cli/src/commands/debug/verify-second-signature.ts b/packages/core-tester-cli/src/commands/debug/verify-second-signature.ts index 7c60bdf231..520389658b 100644 --- a/packages/core-tester-cli/src/commands/debug/verify-second-signature.ts +++ b/packages/core-tester-cli/src/commands/debug/verify-second-signature.ts @@ -1,4 +1,4 @@ -import { crypto, Transaction } from "@arkecosystem/crypto"; +import { configManager, crypto, NetworkName, Transaction } from "@arkecosystem/crypto"; import { flags } from "@oclif/command"; import { handleOutput } from "../../utils"; import { BaseCommand } from "../command"; @@ -21,6 +21,8 @@ export class VerifySecondSignatureCommand extends BaseCommand { public async run(): Promise { const { flags } = this.parse(VerifySecondSignatureCommand); + configManager.setFromPreset(flags.network as NetworkName); + const { data } = Transaction.fromHex(flags.data); return handleOutput(flags, crypto.verifySecondSignature(data, flags.publicKey)); diff --git a/packages/core-tester-cli/src/commands/debug/verify.ts b/packages/core-tester-cli/src/commands/debug/verify.ts index 5fa8128562..c7a3bf3734 100644 --- a/packages/core-tester-cli/src/commands/debug/verify.ts +++ b/packages/core-tester-cli/src/commands/debug/verify.ts @@ -1,4 +1,4 @@ -import { models, Transaction } from "@arkecosystem/crypto"; +import { configManager, models, NetworkName, Transaction } from "@arkecosystem/crypto"; import { flags } from "@oclif/command"; import { handleOutput } from "../../utils"; import { BaseCommand } from "../command"; @@ -21,6 +21,8 @@ export class VerifyCommand extends BaseCommand { public async run(): Promise { const { flags } = this.parse(VerifyCommand); + configManager.setFromPreset(flags.network as NetworkName); + let output = false; if (flags.type === "transaction") { output = Transaction.fromHex(flags.data).verified; diff --git a/packages/crypto/src/managers/index.ts b/packages/crypto/src/managers/index.ts index 7345bebea4..4379632509 100644 --- a/packages/crypto/src/managers/index.ts +++ b/packages/crypto/src/managers/index.ts @@ -1,5 +1,5 @@ -import { configManager } from "./config"; +import { configManager, NetworkName } from "./config"; import { feeManager } from "./fee"; import { NetworkManager } from "./network"; -export { configManager, feeManager, NetworkManager }; +export { configManager, feeManager, NetworkManager, NetworkName }; From 78899474d6af1d85d12f3bf060b6aab33002f182 Mon Sep 17 00:00:00 2001 From: Edgar Goetzendorff Date: Wed, 6 Mar 2019 16:54:40 +0100 Subject: [PATCH 2/2] feat(core-api): add active delegates endpoint (#2205) --- .../core-api/v2/handlers/delegates.test.ts | 31 +++++++++++++++++++ .../delegates-business-repository.test.ts | 5 +-- .../src/versions/2/delegates/controller.ts | 11 +++++++ .../src/versions/2/delegates/methods.ts | 23 ++++++++++++-- .../src/versions/2/delegates/routes.ts | 9 ++++++ .../src/versions/2/delegates/schema.ts | 8 +++++ .../delegates-business-repository.ts | 8 +---- .../delegates-business-repository.ts | 2 +- packages/core-p2p/src/peer-verifier.ts | 6 ++-- 9 files changed, 86 insertions(+), 17 deletions(-) diff --git a/__tests__/integration/core-api/v2/handlers/delegates.test.ts b/__tests__/integration/core-api/v2/handlers/delegates.test.ts index d53f5a6814..bcdf9c5542 100644 --- a/__tests__/integration/core-api/v2/handlers/delegates.test.ts +++ b/__tests__/integration/core-api/v2/handlers/delegates.test.ts @@ -136,6 +136,37 @@ describe("API 2.0 - Delegates", () => { ); }); + describe("GET /delegates/active", () => { + describe.each([["API-Version", "request"], ["Accept", "requestWithAcceptHeader"]])( + "using the %s header", + (header, request) => { + it("should GET all the active delegates at the current network height", async () => { + const activeDelegates = app.getConfig().getMilestone().activeDelegates; + + const response = await utils[request]("GET", "delegates/active"); + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + expect(response.data.data).toHaveLength(activeDelegates); + + response.data.data.forEach(utils.expectDelegate); + expect(response.data.data.sort((a, b) => a.rank < b.rank)).toEqual(response.data.data); + }); + + it("should GET all the active delegates at the specified height", async () => { + const activeDelegates = app.getConfig().getMilestone(1).activeDelegates; + + const response = await utils[request]("GET", "delegates/active", { height: 1 }); + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + expect(response.data.data).toHaveLength(activeDelegates); + + response.data.data.forEach(utils.expectDelegate); + expect(response.data.data.sort((a, b) => a.rank < b.rank)).toEqual(response.data.data); + }); + }, + ); + }); + describe("GET /delegates/:id", () => { describe.each([["API-Version", "request"], ["Accept", "requestWithAcceptHeader"]])( "using the %s header", diff --git a/__tests__/unit/core-database/repositories/delegates-business-repository.test.ts b/__tests__/unit/core-database/repositories/delegates-business-repository.test.ts index 8d47369c02..ffd1a10998 100644 --- a/__tests__/unit/core-database/repositories/delegates-business-repository.test.ts +++ b/__tests__/unit/core-database/repositories/delegates-business-repository.test.ts @@ -405,10 +405,7 @@ describe("Delegate Repository", () => { expect(results).toBeArray(); expect(results[0].username).toBeString(); - expect(results[0].approval).toBeNumber(); - expect(results[0].productivity).toBeNumber(); - expect(results[0].approval).toBe(delegateCalculator.calculateApproval(delegate, height)); - expect(results[0].productivity).toBe(delegateCalculator.calculateProductivity(delegate)); + expect(results[0].username).toEqual(delegate.username); }); }); }); diff --git a/packages/core-api/src/versions/2/delegates/controller.ts b/packages/core-api/src/versions/2/delegates/controller.ts index c36d413476..de44d6549b 100644 --- a/packages/core-api/src/versions/2/delegates/controller.ts +++ b/packages/core-api/src/versions/2/delegates/controller.ts @@ -14,6 +14,17 @@ export class DelegatesController extends Controller { } } + public async active(request: Hapi.Request, h: Hapi.ResponseToolkit) { + try { + // @ts-ignore + const data = await request.server.methods.v2.delegates.active(request); + + return super.respondWithCache(data, h); + } catch (error) { + return Boom.badImplementation(error); + } + } + public async show(request: Hapi.Request, h: Hapi.ResponseToolkit) { try { // @ts-ignore diff --git a/packages/core-api/src/versions/2/delegates/methods.ts b/packages/core-api/src/versions/2/delegates/methods.ts index 696e1bfb7f..7dc122918f 100644 --- a/packages/core-api/src/versions/2/delegates/methods.ts +++ b/packages/core-api/src/versions/2/delegates/methods.ts @@ -1,12 +1,14 @@ import { app } from "@arkecosystem/core-container"; -import { Database } from "@arkecosystem/core-interfaces"; +import { Blockchain, Database } from "@arkecosystem/core-interfaces"; import { orderBy } from "@arkecosystem/utils"; import Boom from "boom"; import { blocksRepository } from "../../../repositories"; import { ServerCache } from "../../../services"; -import { paginate, respondWithResource, toPagination } from "../utils"; +import { paginate, respondWithResource, respondWithCollection, toPagination } from "../utils"; +const config = app.getConfig(); const databaseService = app.resolvePlugin("database"); +const blockchain = app.resolvePlugin("blockchain"); const index = async request => { const delegates = await databaseService.delegates.findAll({ @@ -17,6 +19,18 @@ const index = async request => { return toPagination(request, delegates, "delegate"); }; +const active = async request => { + const delegates = await databaseService.delegates.getActiveAtHeight( + request.query.height || blockchain.getLastHeight() + ); + + if (!delegates.length) { + return Boom.notFound("Delegates not found"); + } + + return respondWithCollection(request, delegates, "delegate"); +}; + const show = async request => { const delegate = await databaseService.delegates.findById(request.params.id); @@ -82,11 +96,16 @@ const voterBalances = async request => { }; export function registerMethods(server) { + const { activeDelegates, blocktime } = config.getMilestone(); + ServerCache.make(server) .method("v2.delegates.index", index, 8, request => ({ ...request.query, ...paginate(request), })) + .method("v2.delegates.active", active, activeDelegates * blocktime, request => ({ + ...request.query + })) .method("v2.delegates.show", show, 8, request => ({ id: request.params.id })) .method("v2.delegates.search", search, 30, request => ({ ...request.payload, diff --git a/packages/core-api/src/versions/2/delegates/routes.ts b/packages/core-api/src/versions/2/delegates/routes.ts index b1c7705e7c..8552456be0 100644 --- a/packages/core-api/src/versions/2/delegates/routes.ts +++ b/packages/core-api/src/versions/2/delegates/routes.ts @@ -15,6 +15,15 @@ export function registerRoutes(server: Hapi.Server): void { }, }); + server.route({ + method: "GET", + path: "/delegates/active", + handler: controller.active, + options: { + validate: Schema.active, + }, + }); + server.route({ method: "GET", path: "/delegates/{id}", diff --git a/packages/core-api/src/versions/2/delegates/schema.ts b/packages/core-api/src/versions/2/delegates/schema.ts index 96fcfb4ae5..111208b3b5 100644 --- a/packages/core-api/src/versions/2/delegates/schema.ts +++ b/packages/core-api/src/versions/2/delegates/schema.ts @@ -74,6 +74,14 @@ export const index: object = { }, }; +export const active: object = { + query: { + height: Joi.number() + .integer() + .min(1), + } +}; + export const show: object = { params: { id: schemaIdentifier, diff --git a/packages/core-database/src/repositories/delegates-business-repository.ts b/packages/core-database/src/repositories/delegates-business-repository.ts index 10ed454a62..c2615f209f 100644 --- a/packages/core-database/src/repositories/delegates-business-repository.ts +++ b/packages/core-database/src/repositories/delegates-business-repository.ts @@ -150,13 +150,7 @@ export class DelegatesBusinessRepository implements Database.IDelegatesBusinessR const delegates = await this.databaseServiceProvider().getActiveDelegates(height); return delegates.map(delegate => { - const wallet = this.databaseServiceProvider().wallets.findById(delegate.publicKey); - - return { - username: wallet.username, - approval: delegateCalculator.calculateApproval(delegate, height), - productivity: delegateCalculator.calculateProductivity(wallet), - }; + return this.databaseServiceProvider().wallets.findById(delegate.publicKey); }); } diff --git a/packages/core-interfaces/src/core-database/business-repository/delegates-business-repository.ts b/packages/core-interfaces/src/core-database/business-repository/delegates-business-repository.ts index 7fed3158c3..f2a3bd4e3a 100644 --- a/packages/core-interfaces/src/core-database/business-repository/delegates-business-repository.ts +++ b/packages/core-interfaces/src/core-database/business-repository/delegates-business-repository.ts @@ -10,5 +10,5 @@ export interface IDelegatesBusinessRepository { findById(id: string): models.Wallet; - getActiveAtHeight(height: number): Promise>; + getActiveAtHeight(height: number): Promise; } diff --git a/packages/core-p2p/src/peer-verifier.ts b/packages/core-p2p/src/peer-verifier.ts index acc0ce845f..dcb097a123 100644 --- a/packages/core-p2p/src/peer-verifier.ts +++ b/packages/core-p2p/src/peer-verifier.ts @@ -300,7 +300,7 @@ export class PeerVerifier { // the last block in a round (so that the delegates calculations are still the same for // both chains). - const delegates = await this.getDelegates(round); + const delegates = await this.getDelegatesByRound(round); const hisBlocksByHeight = {}; @@ -324,10 +324,10 @@ export class PeerVerifier { /** * Get the delegates for the given round. - * @param {Object} round round to get delegates for + * @param {Object} round to get delegates for * @return {Object} a map of { publicKey: delegate, ... } of all delegates for the given round */ - private async getDelegates(round: any): Promise { + private async getDelegatesByRound(round: any): Promise { const numDelegates = round.maxDelegates; const heightOfFirstBlockInRound = (round.round - 1) * numDelegates + 1;