From 6c6c96c924f7859b93d3befa453ab02c082876bf Mon Sep 17 00:00:00 2001 From: KovacZan <39158639+KovacZan@users.noreply.github.com> Date: Sat, 28 Sep 2019 01:58:16 +0200 Subject: [PATCH 01/20] refactor(core-magistrate): Split core-marketplace into core-magistrate-crypto and core-magistrate-transactions (#2967) --- .../transaction-forging/__support__/index.ts | 2 +- .../bridgechain-registration.test.ts | 266 ++++++++++++----- .../bridgechain-resignation.test.ts | 234 +++++++++++---- .../bridgechain-update.test.ts | 281 +++++++++++++----- .../business-registration.test.ts | 199 +++++++++++-- .../business-resignation.test.ts | 259 ++++++++++++---- .../business-update.test.ts | 264 ++++++++++++---- __tests__/helpers/transaction-factory.ts | 25 +- .../core-blockchain/state-machine.test.ts | 54 ++-- .../builders/bridgechain-registration.test.ts | 12 +- .../builders/bridgechain-resignation.test.ts | 8 +- .../builders/bridgechain-update.test.ts | 8 +- .../builders/business-registration.test.ts | 12 +- .../builders/business-resignation.test.ts | 8 +- .../builders/business-update.test.ts | 8 +- .../handlers/bridgechain-handlers.test.ts | 34 +-- .../handlers/business-handlers.test.ts | 23 +- .../handlers/business-registration.test.ts | 31 +- .../handlers/business-resignation.test.ts | 22 +- .../handlers/handlers.test.ts | 19 +- .../helper.ts | 2 +- .../bridgechain-registration.test.ts | 8 +- .../bridgechain-resignation.test.ts | 8 +- .../transactions/bridgechain-update.test.ts | 8 +- .../business-registration.test.ts | 8 +- .../transactions/business-resgination.test.ts | 8 +- .../transactions/business-update.test.ts | 8 +- .../wallet.test.ts | 6 +- .../__fixtures__/transactions.ts | 2 +- __tests__/utils/config/testnet/plugins.js | 4 +- __tests__/utils/config/unitnet/plugins.js | 2 +- .../src/repositories/transactions.ts | 30 +- .../README.md | 2 +- packages/core-magistrate-crypto/package.json | 29 ++ .../src/builders/bridgechain-registration.ts | 6 +- .../src/builders/bridgechain-resignation.ts | 6 +- .../src/builders/bridgechain-update.ts | 6 +- .../src/builders/business-registration.ts | 6 +- .../src/builders/business-resignation.ts | 6 +- .../src/builders/business-update.ts | 6 +- .../src/builders/index.ts | 0 .../src/enums.ts | 6 +- packages/core-magistrate-crypto/src/index.ts | 6 + .../src/interfaces.ts | 13 - .../transactions/bridgechain-registration.ts | 12 +- .../transactions/bridgechain-resignation.ts | 13 +- .../src/transactions/bridgechain-update.ts | 12 +- .../src/transactions/business-registration.ts | 12 +- .../src/transactions/business-resignation.ts | 12 +- .../src/transactions/business-update.ts | 12 +- .../src/transactions}/index.ts | 0 .../transactions/utils/bridgechain-schemas.ts | 0 .../src/transactions/utils/business-schema.ts | 0 .../tsconfig.json | 0 .../core-magistrate-transactions/README.md | 21 ++ .../package.json | 7 +- .../src/defaults.ts | 0 .../src/errors.ts | 0 .../src/events.ts | 2 +- .../src/handlers/bridgechain-registration.ts | 10 +- .../src/handlers/bridgechain-resignation.ts | 18 +- .../src/handlers/bridgechain-update.ts | 29 +- .../src/handlers/business-registration.ts | 12 +- .../src/handlers/business-resignation.ts | 6 +- .../src/handlers/business-update.ts | 50 ++-- .../src/handlers}/index.ts | 0 .../core-magistrate-transactions/src/index.ts | 3 + .../src/interfaces.ts | 15 + .../src/plugin.ts | 11 +- .../src/wallet-manager.ts | 2 +- .../tsconfig.json | 7 + packages/core-marketplace/src/index.ts | 5 - .../core-transaction-pool/src/connection.ts | 8 +- packages/core/bin/config/devnet/plugins.js | 2 +- packages/core/bin/config/mainnet/plugins.js | 2 +- packages/core/bin/config/testnet/plugins.js | 2 +- 76 files changed, 1568 insertions(+), 672 deletions(-) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/bridgechain-registration.test.ts (85%) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/bridgechain-resignation.test.ts (66%) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/bridgechain-update.test.ts (72%) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/business-registration.test.ts (87%) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/business-resignation.test.ts (65%) rename __tests__/unit/{core-marketplace => core-magistrate}/builders/business-update.test.ts (70%) rename __tests__/unit/{core-marketplace => core-magistrate}/handlers/bridgechain-handlers.test.ts (88%) rename __tests__/unit/{core-marketplace => core-magistrate}/handlers/business-handlers.test.ts (88%) rename __tests__/unit/{core-marketplace => core-magistrate}/handlers/business-registration.test.ts (83%) rename __tests__/unit/{core-marketplace => core-magistrate}/handlers/business-resignation.test.ts (73%) rename __tests__/unit/{core-marketplace => core-magistrate}/handlers/handlers.test.ts (57%) rename __tests__/unit/{core-marketplace => core-magistrate}/helper.ts (97%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/bridgechain-registration.test.ts (97%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/bridgechain-resignation.test.ts (87%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/bridgechain-update.test.ts (76%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/business-registration.test.ts (96%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/business-resgination.test.ts (73%) rename __tests__/unit/{core-marketplace => core-magistrate}/transactions/business-update.test.ts (92%) rename __tests__/unit/{core-marketplace => core-magistrate}/wallet.test.ts (93%) rename packages/{core-marketplace => core-magistrate-crypto}/README.md (89%) create mode 100644 packages/core-magistrate-crypto/package.json rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/bridgechain-registration.ts (86%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/bridgechain-resignation.ts (82%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/bridgechain-update.ts (84%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/business-registration.ts (83%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/business-resignation.ts (79%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/business-update.ts (83%) rename packages/{core-marketplace => core-magistrate-crypto}/src/builders/index.ts (100%) rename packages/{core-marketplace => core-magistrate-crypto}/src/enums.ts (75%) create mode 100644 packages/core-magistrate-crypto/src/index.ts rename packages/{core-marketplace => core-magistrate-crypto}/src/interfaces.ts (62%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/bridgechain-registration.ts (89%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/bridgechain-resignation.ts (77%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/bridgechain-update.ts (84%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/business-registration.ts (88%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/business-resignation.ts (58%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/business-update.ts (90%) rename packages/{core-marketplace/src/handlers => core-magistrate-crypto/src/transactions}/index.ts (100%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/utils/bridgechain-schemas.ts (100%) rename packages/{core-marketplace => core-magistrate-crypto}/src/transactions/utils/business-schema.ts (100%) rename packages/{core-marketplace => core-magistrate-crypto}/tsconfig.json (100%) create mode 100644 packages/core-magistrate-transactions/README.md rename packages/{core-marketplace => core-magistrate-transactions}/package.json (82%) rename packages/{core-marketplace => core-magistrate-transactions}/src/defaults.ts (100%) rename packages/{core-marketplace => core-magistrate-transactions}/src/errors.ts (100%) rename packages/{core-marketplace => core-magistrate-transactions}/src/events.ts (87%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/bridgechain-registration.ts (93%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/bridgechain-resignation.ts (86%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/bridgechain-update.ts (88%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/business-registration.ts (90%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/business-resignation.ts (95%) rename packages/{core-marketplace => core-magistrate-transactions}/src/handlers/business-update.ts (72%) rename packages/{core-marketplace/src/transactions => core-magistrate-transactions/src/handlers}/index.ts (100%) create mode 100644 packages/core-magistrate-transactions/src/index.ts create mode 100644 packages/core-magistrate-transactions/src/interfaces.ts rename packages/{core-marketplace => core-magistrate-transactions}/src/plugin.ts (81%) rename packages/{core-marketplace => core-magistrate-transactions}/src/wallet-manager.ts (97%) create mode 100644 packages/core-magistrate-transactions/tsconfig.json delete mode 100644 packages/core-marketplace/src/index.ts diff --git a/__tests__/functional/transaction-forging/__support__/index.ts b/__tests__/functional/transaction-forging/__support__/index.ts index 1f53f30c2b..772db21faa 100644 --- a/__tests__/functional/transaction-forging/__support__/index.ts +++ b/__tests__/functional/transaction-forging/__support__/index.ts @@ -22,7 +22,7 @@ export const setUp = async (): Promise => { "@arkecosystem/core-logger-pino", "@arkecosystem/core-state", "@arkecosystem/core-database-postgres", - "@arkecosystem/core-marketplace", + "@arkecosystem/core-magistrate-transactions", "@arkecosystem/core-transaction-pool", "@arkecosystem/core-p2p", "@arkecosystem/core-blockchain", diff --git a/__tests__/functional/transaction-forging/bridgechain-registration.test.ts b/__tests__/functional/transaction-forging/bridgechain-registration.test.ts index 8a3da50a1d..9f3c5a9e7e 100644 --- a/__tests__/functional/transaction-forging/bridgechain-registration.test.ts +++ b/__tests__/functional/transaction-forging/bridgechain-registration.test.ts @@ -1,89 +1,207 @@ import { Identities } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; -const { passphrase } = support.passphrases; - beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Bridgechain registration", () => { - it("should broadcast, accept and forge it ", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Registering a business - const businessRegistration = TransactionFactory.businessRegistration({ - name: "arkecosystem", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); - - // Registering a bridgechain - const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ - name: "cryptoProject", - seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], - genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", - bridgechainRepository: "somerepository", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainRegistration.id).toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => { + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "arkecosystem", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + }); + + it("should broadcast, accept and forge it again [Signed with 1 Passphrase]", async () => { + // Registering a bridgechain again + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + }); + + it("should reject bridgechain registration, because business resigned [Signed with 1 Passphrase]", async () => { + // Business resignation + const businessResignation = TransactionFactory.businessResignation() + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Bridgechain resignation + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(secrets[0]) + .createOne(); + + expect(bridgechainRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).not.toBeForged(); + }); }); - it("should broadcast, accept and forge it again", async () => { - // Registering a bridgechain again - const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ - name: "cryptoProject", - seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], - genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", - bridgechainRepository: "somerepository", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainRegistration.id).toBeForged(); + describe("Signed with 2 Passphrases", () => { + it("should broadcast, accept and forge it [Signed with 2 Passphrases] ", async () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 150 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "arkecosystem", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + }); }); - it("should reject bridgechain registration, because business resigned", async () => { - // Business resignation - const businessResignation = TransactionFactory.businessResignation() - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessResignation).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessResignation.id).toBeForged(); - - // Bridgechain resignation - const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ - name: "cryptoProject", - seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], - genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", - bridgechainRepository: "somerepository", - }) - .withPassphrase(secrets[0]) - .createOne(); - - expect(bridgechainRegistration).toBeRejected(); - await support.snoozeForBlock(1); - await expect(bridgechainRegistration.id).not.toBeForged(); + describe("Signed with multi signature [3 of 3]", () => { + // Register a multi signature wallet with defaults + const passphrase = generateMnemonic(); + const passphrases = [passphrase, secrets[4], secrets[5]]; + const participants = [ + Identities.PublicKey.fromPassphrase(passphrases[0]), + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + ]; + + it("should broadcast, accept and forge it [3-of-3 multisig]", async () => { + // Funds to register a multi signature wallet + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(passphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + const multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + const multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 100 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + }); }); }); diff --git a/__tests__/functional/transaction-forging/bridgechain-resignation.test.ts b/__tests__/functional/transaction-forging/bridgechain-resignation.test.ts index c798c6cd70..080ff4362f 100644 --- a/__tests__/functional/transaction-forging/bridgechain-resignation.test.ts +++ b/__tests__/functional/transaction-forging/bridgechain-resignation.test.ts @@ -1,64 +1,192 @@ import { Identities } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; -const { passphrase } = support.passphrases; - beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Bridgechain registration", () => { - it("should broadcast, accept and forge it", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Business registration - const businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); - - // Bridgechain registration - const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ - name: "cryptoProject", - seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], - genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", - bridgechainRepository: "www.repository.com/myorg/myrepo", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainRegistration.id).toBeForged(); - - // Bridgechain resignation - let bridgechainResignation = TransactionFactory.bridgechainResignation("1") - .withPassphrase(secrets[0]) - .createOne(); - await expect(bridgechainResignation).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainResignation.id).toBeForged(); - - bridgechainResignation = TransactionFactory.bridgechainResignation("1") - .withPassphrase(secrets[0]) - .createOne(); - - expect(bridgechainResignation).toBeRejected(); - await support.snoozeForBlock(1); - await expect(bridgechainResignation.id).not.toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => { + // Business registration + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Bridgechain registration + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "www.repository.com/myorg/myrepo", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + + // Bridgechain resignation + let bridgechainResignation = TransactionFactory.bridgechainResignation("1") + .withPassphrase(secrets[0]) + .createOne(); + await expect(bridgechainResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainResignation.id).toBeForged(); + + bridgechainResignation = TransactionFactory.bridgechainResignation("1") + .withPassphrase(secrets[0]) + .createOne(); + + expect(bridgechainResignation).toBeRejected(); + await support.snoozeForBlock(1); + await expect(bridgechainResignation.id).not.toBeForged(); + }); + }); + + describe("Signed with 2 Passphrases", () => { + it("should broadcast, accept and forge it [Signed with 2 Passphrases]", async () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 150 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "arkecosystem", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + }); + }); + + describe("Signed with multi signature [3 of 3]", () => { + // Register a multi signature wallet with defaults + const passphrase = generateMnemonic(); + const passphrases = [passphrase, secrets[4], secrets[5]]; + const participants = [ + Identities.PublicKey.fromPassphrase(passphrases[0]), + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + ]; + + it("should broadcast, accept and forge it [3-of-3 multisig]", async () => { + // Funds to register a multi signature wallet + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(passphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + const multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + const multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 150 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + + // Bridgechain resignation + const bridgechainResignation = TransactionFactory.bridgechainResignation("3") + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(bridgechainResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainResignation.id).toBeForged(); + }); }); }); diff --git a/__tests__/functional/transaction-forging/bridgechain-update.test.ts b/__tests__/functional/transaction-forging/bridgechain-update.test.ts index 3b922f5f83..e6199606f6 100644 --- a/__tests__/functional/transaction-forging/bridgechain-update.test.ts +++ b/__tests__/functional/transaction-forging/bridgechain-update.test.ts @@ -1,80 +1,223 @@ import { Identities, Utils } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; -const { passphrase } = support.passphrases; - beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Bridgechain update", () => { - it("should broadcast, accept and forge it ", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Registering a business - const businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); - - // Registering a bridgechain - const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ - name: "cryptoProject", - seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], - genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", - bridgechainRepository: "somerepository", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainRegistration.id).toBeForged(); - - // Updating a bridgechain - let bridgechainUpdate = TransactionFactory.bridgechainUpdate({ - bridgechainId: Utils.BigNumber.ONE, - seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainUpdate).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainUpdate.id).toBeForged(); - - // Bridgechain resignation - const bridgechainResignation = TransactionFactory.bridgechainResignation("1") - .withPassphrase(secrets[0]) - .createOne(); - await expect(bridgechainResignation).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(bridgechainResignation.id).toBeForged(); - - // Updating a bridgechain after resignation - bridgechainUpdate = TransactionFactory.bridgechainUpdate({ - bridgechainId: Utils.BigNumber.ONE, - seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(bridgechainUpdate).toBeRejected(); - await support.snoozeForBlock(1); - await expect(bridgechainUpdate.id).not.toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => { + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + + // Updating a bridgechain + let bridgechainUpdate = TransactionFactory.bridgechainUpdate({ + bridgechainId: Utils.BigNumber.ONE, + seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainUpdate.id).toBeForged(); + + // Bridgechain resignation + const bridgechainResignation = TransactionFactory.bridgechainResignation("1") + .withPassphrase(secrets[0]) + .createOne(); + await expect(bridgechainResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainResignation.id).toBeForged(); + + // Updating a bridgechain after resignation + bridgechainUpdate = TransactionFactory.bridgechainUpdate({ + bridgechainId: Utils.BigNumber.ONE, + seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(bridgechainUpdate).toBeRejected(); + await support.snoozeForBlock(1); + await expect(bridgechainUpdate.id).not.toBeForged(); + }); + }); + + describe("Signed with 2 Passphrases", () => { + it("should broadcast, accept and forge it [Signed with 2 Passphrases]", async () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 200 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "arkecosystem", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + + // Update a bridgechian + const bridgechainUpdate = TransactionFactory.bridgechainUpdate({ + bridgechainId: Utils.BigNumber.make("2"), + seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(bridgechainUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainUpdate.id).toBeForged(); + }); + }); + + describe("Signed with multi signature [3 of 3]", () => { + // Register a multi signature wallet with defaults + const passphrase = generateMnemonic(); + const passphrases = [passphrase, secrets[4], secrets[5]]; + const participants = [ + Identities.PublicKey.fromPassphrase(passphrases[0]), + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + ]; + it("should broadcast, accept and forge it [3-of-3 multisig]", async () => { + // Funds to register a multi signature wallet + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(passphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + const multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + const multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 150 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Registering a bridgechain + const bridgechainRegistration = TransactionFactory.bridgechainRegistration({ + name: "cryptoProject", + seedNodes: ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"], + genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935", + bridgechainRepository: "somerepository", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(bridgechainRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainRegistration.id).toBeForged(); + + // Update a bridgechian + const bridgechainUpdate = TransactionFactory.bridgechainUpdate({ + bridgechainId: Utils.BigNumber.make("3"), + seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"], + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(bridgechainUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(bridgechainUpdate.id).toBeForged(); + }); }); }); diff --git a/__tests__/functional/transaction-forging/business-registration.test.ts b/__tests__/functional/transaction-forging/business-registration.test.ts index 686a0ea909..f9ba497efb 100644 --- a/__tests__/functional/transaction-forging/business-registration.test.ts +++ b/__tests__/functional/transaction-forging/business-registration.test.ts @@ -1,4 +1,5 @@ import { Identities } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; @@ -9,40 +10,172 @@ beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Business registration", () => { - it("should broadcast, accept and forge it", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Registering a business - const businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => { + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + }); + + it("should be rejected, because wallet is already a business [Signed with 1 Passphrase]", async () => { + // Registering a business again + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); }); - it("should be rejected, because wallet is already a business", async () => { - // Registering a business again - const businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeRejected(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).not.toBeForged(); + describe("Signed with 2 Passphrases", () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + it("should broadcast, accept and forge it [Signed with 2 Passphrases]", async () => { + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 150 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + }); + + it("should be rejected, because wallet is already a business [Signed with 2 Passphrases]", async () => { + // Registering a business again + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); + }); + + describe("Signed with multi signature [3 of 5]", () => { + // Multi signature wallet data + const passphrase = generateMnemonic(); + const registerPassphrases = [passphrase, secrets[1], secrets[2], secrets[3], secrets[4]]; + const signPassphrases = [passphrase, secrets[1], secrets[2]]; + const participants = [ + Identities.PublicKey.fromPassphrase(registerPassphrases[0]), + Identities.PublicKey.fromPassphrase(registerPassphrases[1]), + Identities.PublicKey.fromPassphrase(registerPassphrases[2]), + Identities.PublicKey.fromPassphrase(registerPassphrases[3]), + Identities.PublicKey.fromPassphrase(registerPassphrases[4]), + ]; + let multiSigAddress; + let multiSigPublicKey; + it("should broadcast, accept and forge it [3 of 5]", async () => { + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(registerPassphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 100 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(signPassphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + }); + + it("should be rejected, because wallet is already a business [3 of 5]", async () => { + // Registering a business again + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(signPassphrases) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); }); }); diff --git a/__tests__/functional/transaction-forging/business-resignation.test.ts b/__tests__/functional/transaction-forging/business-resignation.test.ts index 90da0733e5..3ae3416084 100644 --- a/__tests__/functional/transaction-forging/business-resignation.test.ts +++ b/__tests__/functional/transaction-forging/business-resignation.test.ts @@ -1,64 +1,217 @@ import { Identities } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; -const { passphrase } = support.passphrases; - beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Business resignation", () => { - it("should broadcast, accept and forge it", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Registering a business - let businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); - - // Resigning a business - let businessResignation = TransactionFactory.businessResignation() - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessResignation).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessResignation.id).toBeForged(); - - // Reject a second resignation - businessResignation = TransactionFactory.businessResignation() - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessResignation).toBeRejected(); - await support.snoozeForBlock(1); - await expect(businessResignation.id).not.toBeForged(); - - // Reject a new registration - businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeRejected(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).not.toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => { + // Registering a business + let businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Resigning a business + let businessResignation = TransactionFactory.businessResignation() + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Reject a second resignation + businessResignation = TransactionFactory.businessResignation() + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessResignation).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).not.toBeForged(); + + // Reject a new registration + businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); + }); + + describe("Signed with 2 Passphrases", () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + it("should broadcast, accept and forge it [Signed with 2 Passphrases] ", async () => { + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 250 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + let businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Resigning a business + let businessResignation = TransactionFactory.businessResignation() + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Reject a second resignation + businessResignation = TransactionFactory.businessResignation() + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessResignation).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).not.toBeForged(); + + // Reject a new registration + businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); + }); + describe("Signed with multi signature [3 of 3]", () => { + // Multi signature wallet data + const passphrase = generateMnemonic(); + const passphrases = [passphrase, secrets[4], secrets[5]]; + const participants = [ + Identities.PublicKey.fromPassphrase(passphrases[0]), + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + ]; + + it("should broadcast, accept and forge it [3-of-3 multisig]", async () => { + // Funds to register a multi signature wallet + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(passphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + const multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + const multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 300 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + let businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Resigning a business + let businessResignation = TransactionFactory.businessResignation() + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Reject a second resignation + businessResignation = TransactionFactory.businessResignation() + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessResignation).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).not.toBeForged(); + + // Reject a new registration + businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).not.toBeForged(); + }); }); }); diff --git a/__tests__/functional/transaction-forging/business-update.test.ts b/__tests__/functional/transaction-forging/business-update.test.ts index 85fbd3a712..4edca9120e 100644 --- a/__tests__/functional/transaction-forging/business-update.test.ts +++ b/__tests__/functional/transaction-forging/business-update.test.ts @@ -1,67 +1,223 @@ import { Identities } from "@arkecosystem/crypto"; +import { generateMnemonic } from "bip39"; import { TransactionFactory } from "../../helpers/transaction-factory"; import { secrets } from "../../utils/config/testnet/delegates.json"; import * as support from "./__support__"; -const { passphrase } = support.passphrases; - beforeAll(support.setUp); afterAll(support.tearDown); describe("Transaction Forging - Business update", () => { - it("should broadcast, accept and forge it", async () => { - // Initial Funds - const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(initialFunds).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(initialFunds.id).toBeForged(); - - // Registering a business - const businessRegistration = TransactionFactory.businessRegistration({ - name: "ark", - website: "ark.io", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessRegistration).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessRegistration.id).toBeForged(); - - // Updating a business - const businessUpdate = TransactionFactory.businessUpdate({ - name: "ark2", - }) - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessUpdate).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessUpdate.id).toBeForged(); + describe("Signed with 1 Passphrase", () => { + it("should broadcast, accept and forge it", async () => { + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Updating a business + const businessUpdate = TransactionFactory.businessUpdate({ + name: "ark2", + }) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).toBeForged(); + }); + + it("should broadcast, accept and forge it ", async () => { + // Resigning a business + const businessResignation = TransactionFactory.businessResignation() + .withPassphrase(secrets[0]) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Updating a business + const businessUpdate = TransactionFactory.businessUpdate({ + name: "ark3", + }) + .withPassphrase(secrets[0]) + .createOne(); + + expect(businessUpdate).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).not.toBeForged(); + }); }); - it("should broadcast, accept and forge it ", async () => { - // Resigning a business - const businessResignation = TransactionFactory.businessResignation() - .withPassphrase(secrets[0]) - .createOne(); - - await expect(businessResignation).toBeAccepted(); - await support.snoozeForBlock(1); - await expect(businessResignation.id).toBeForged(); - - // Updating a business - const businessUpdate = TransactionFactory.businessUpdate({ - name: "ark3", - }) - .withPassphrase(secrets[0]) - .createOne(); - - expect(businessUpdate).toBeRejected(); - await support.snoozeForBlock(1); - await expect(businessUpdate.id).not.toBeForged(); + describe("Signed with 2 Passphases", () => { + // Prepare a fresh wallet for the tests + const passphrase = generateMnemonic(); + const secondPassphrase = generateMnemonic(); + + it("should broadcast, accept and forge it [Signed with 2 Passphrases]", async () => { + // Initial Funds + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 1000 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Register a second passphrase + const secondSignature = TransactionFactory.secondSignature(secondPassphrase) + .withPassphrase(passphrase) + .createOne(); + + await expect(secondSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(secondSignature.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Updating a business + let businessUpdate = TransactionFactory.businessUpdate({ + name: "ark2", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).toBeForged(); + + // Resigning a business + const businessResignation = TransactionFactory.businessResignation() + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Reject business update + businessUpdate = TransactionFactory.businessUpdate({ + name: "ark3", + }) + .withPassphrase(passphrase) + .withSecondPassphrase(secondPassphrase) + .createOne(); + + expect(businessUpdate).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).not.toBeForged(); + }); + }); + + describe("Signed with multi signature [3 of 3]", () => { + // Register a multi signature wallet with defaults + const passphrase = generateMnemonic(); + const passphrases = [passphrase, secrets[4], secrets[5]]; + const participants = [ + Identities.PublicKey.fromPassphrase(passphrases[0]), + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + ]; + + it("should broadcast, accept and forge it [3-of-3 multisig]", async () => { + // Funds to register a multi signature wallet + const initialFunds = TransactionFactory.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(initialFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(initialFunds.id).toBeForged(); + + // Registering a multi-signature wallet + const multiSignature = TransactionFactory.multiSignature(participants, 3) + .withPassphrase(passphrase) + .withPassphraseList(passphrases) + .createOne(); + + await expect(multiSignature).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignature.id).toBeForged(); + + // Send funds to multi signature wallet + const multiSigAddress = Identities.Address.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + const multiSigPublicKey = Identities.PublicKey.fromMultiSignatureAsset(multiSignature.asset.multiSignature); + + const multiSignatureFunds = TransactionFactory.transfer(multiSigAddress, 200 * 1e8) + .withPassphrase(secrets[0]) + .createOne(); + + await expect(multiSignatureFunds).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(multiSignatureFunds.id).toBeForged(); + + // Registering a business + const businessRegistration = TransactionFactory.businessRegistration({ + name: "ark", + website: "ark.io", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessRegistration).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessRegistration.id).toBeForged(); + + // Updating a business + let businessUpdate = TransactionFactory.businessUpdate({ + name: "ark2", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessUpdate).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).toBeForged(); + + // Resigning a business + const businessResignation = TransactionFactory.businessResignation() + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + await expect(businessResignation).toBeAccepted(); + await support.snoozeForBlock(1); + await expect(businessResignation.id).toBeForged(); + + // Reject business update + businessUpdate = TransactionFactory.businessUpdate({ + name: "ark3", + }) + .withSenderPublicKey(multiSigPublicKey) + .withPassphraseList(passphrases) + .createOne(); + + expect(businessUpdate).toBeRejected(); + await support.snoozeForBlock(1); + await expect(businessUpdate.id).not.toBeForged(); + }); }); }); diff --git a/__tests__/helpers/transaction-factory.ts b/__tests__/helpers/transaction-factory.ts index 2f882c6880..4e238e6152 100644 --- a/__tests__/helpers/transaction-factory.ts +++ b/__tests__/helpers/transaction-factory.ts @@ -1,6 +1,9 @@ import { app } from "@arkecosystem/core-container"; import { Database } from "@arkecosystem/core-interfaces"; -import { Builders as MarketplaceBuilders, Interfaces as MarketplaceInterfaces } from "@arkecosystem/core-marketplace"; +import { + Builders as MagistrateBuilders, + Interfaces as MagistrateInterfaces, +} from "@arkecosystem/core-magistrate-crypto"; import { Identities, Interfaces, Managers, Transactions, Types, Utils } from "@arkecosystem/crypto"; import { secrets } from "../utils/config/testnet/delegates.json"; @@ -115,41 +118,41 @@ export class TransactionFactory { } public static businessRegistration( - businessRegistrationAsset: MarketplaceInterfaces.IBusinessRegistrationAsset, + businessRegistrationAsset: MagistrateInterfaces.IBusinessRegistrationAsset, ): TransactionFactory { - const businessRegistrationBuilder = new MarketplaceBuilders.BusinessRegistrationBuilder(); + const businessRegistrationBuilder = new MagistrateBuilders.BusinessRegistrationBuilder(); businessRegistrationBuilder.businessRegistrationAsset(businessRegistrationAsset); return new TransactionFactory(businessRegistrationBuilder); } public static businessResignation(): TransactionFactory { - return new TransactionFactory(new MarketplaceBuilders.BusinessResignationBuilder()); + return new TransactionFactory(new MagistrateBuilders.BusinessResignationBuilder()); } - public static businessUpdate(businessUpdateAsset: MarketplaceInterfaces.IBusinessUpdateAsset): TransactionFactory { - const businessUpdateBuilder = new MarketplaceBuilders.BusinessUpdateBuilder(); + public static businessUpdate(businessUpdateAsset: MagistrateInterfaces.IBusinessUpdateAsset): TransactionFactory { + const businessUpdateBuilder = new MagistrateBuilders.BusinessUpdateBuilder(); businessUpdateBuilder.businessUpdateAsset(businessUpdateAsset); return new TransactionFactory(businessUpdateBuilder); } public static bridgechainRegistration( - bridgechainRegistrationAsset: MarketplaceInterfaces.IBridgechainRegistrationAsset, + bridgechainRegistrationAsset: MagistrateInterfaces.IBridgechainRegistrationAsset, ): TransactionFactory { - const bridgechainRegistrationBuilder = new MarketplaceBuilders.BridgechainRegistrationBuilder(); + const bridgechainRegistrationBuilder = new MagistrateBuilders.BridgechainRegistrationBuilder(); bridgechainRegistrationBuilder.bridgechainRegistrationAsset(bridgechainRegistrationAsset); return new TransactionFactory(bridgechainRegistrationBuilder); } public static bridgechainResignation(registeredBridgechainId: string): TransactionFactory { - const bridgechainResignationBuilder = new MarketplaceBuilders.BridgechainResignationBuilder(); + const bridgechainResignationBuilder = new MagistrateBuilders.BridgechainResignationBuilder(); bridgechainResignationBuilder.businessResignationAsset(registeredBridgechainId); return new TransactionFactory(bridgechainResignationBuilder); } public static bridgechainUpdate( - bridgechainUpdateAsset: MarketplaceInterfaces.IBridgechainUpdateAsset, + bridgechainUpdateAsset: MagistrateInterfaces.IBridgechainUpdateAsset, ): TransactionFactory { - const bridgechainUpdateBuilder = new MarketplaceBuilders.BridgechainUpdateBuilder(); + const bridgechainUpdateBuilder = new MagistrateBuilders.BridgechainUpdateBuilder(); bridgechainUpdateBuilder.bridgechainUpdateAsset(bridgechainUpdateAsset); return new TransactionFactory(bridgechainUpdateBuilder); } diff --git a/__tests__/unit/core-blockchain/state-machine.test.ts b/__tests__/unit/core-blockchain/state-machine.test.ts index 18e1359ceb..d03d4d92fa 100644 --- a/__tests__/unit/core-blockchain/state-machine.test.ts +++ b/__tests__/unit/core-blockchain/state-machine.test.ts @@ -75,17 +75,17 @@ describe("State Machine", () => { - stateStorage.noBlockCounter > 5 and process queue is empty - stateStorage.p2pUpdateCounter + 1 > 3 (network keeps missing blocks) - blockchain.p2p.checkNetworkHealth() returns a forked network status`, async () => { - blockchain.isSynced = jest.fn(() => false); - blockchain.queue.idle = jest.fn(() => true); - stateStorage.noBlockCounter = 6; - stateStorage.p2pUpdateCounter = 3; + blockchain.isSynced = jest.fn(() => false); + blockchain.queue.idle = jest.fn(() => true); + stateStorage.noBlockCounter = 6; + stateStorage.p2pUpdateCounter = 3; - jest.spyOn(getMonitor, "checkNetworkHealth").mockImplementation(() => ({ - forked: true, - })); + jest.spyOn(getMonitor, "checkNetworkHealth").mockImplementation(() => ({ + forked: true, + })); - await expect(actionMap.checkLastDownloadedBlockSynced).toDispatch(blockchain, "FORK"); - }); + await expect(actionMap.checkLastDownloadedBlockSynced).toDispatch(blockchain, "FORK"); + }); it('should dispatch the event "SYNCED" if stateStorage.networkStart is true', async () => { blockchain.isSynced = jest.fn(() => false); @@ -406,11 +406,11 @@ describe("State Machine", () => { jest.spyOn(container.app, "resolveOptions").mockImplementation(plugin => plugin === "blockchain" ? { - databaseRollback: { - maxBlockRewind: 14, - steps: 3, - }, - } + databaseRollback: { + maxBlockRewind: 14, + steps: 3, + }, + } : {}, ); }); @@ -441,22 +441,22 @@ describe("State Machine", () => { it(`should try to remove X blocks based on databaseRollback config until database.verifyBlockchain() passes and dispatch FAILURE as verifyBlockchain never passed`, async () => { + // @ts-ignore + const removeTopBlocks = jest.spyOn(blockchain, "removeTopBlocks").mockReturnValue(true); + // @ts-ignore + jest.spyOn(blockchain.database, "verifyBlockchain").mockReturnValue(false); + jest.spyOn(blockchain.state, "getLastBlock").mockReturnValue({ // @ts-ignore - const removeTopBlocks = jest.spyOn(blockchain, "removeTopBlocks").mockReturnValue(true); - // @ts-ignore - jest.spyOn(blockchain.database, "verifyBlockchain").mockReturnValue(false); - jest.spyOn(blockchain.state, "getLastBlock").mockReturnValue({ - // @ts-ignore - data: { - height: 1, - }, - }); + data: { + height: 1, + }, + }); - // tslint:disable-next-line: await-promise - await expect(() => actionMap.rollbackDatabase()).toDispatch(blockchain, "FAILURE"); + // tslint:disable-next-line: await-promise + await expect(() => actionMap.rollbackDatabase()).toDispatch(blockchain, "FAILURE"); - expect(removeTopBlocks).toHaveBeenCalledTimes(5); // because after 5 times we get past maxBlockRewind - }); + expect(removeTopBlocks).toHaveBeenCalledTimes(5); // because after 5 times we get past maxBlockRewind + }); }); }); }); diff --git a/__tests__/unit/core-marketplace/builders/bridgechain-registration.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts similarity index 85% rename from __tests__/unit/core-marketplace/builders/bridgechain-registration.test.ts rename to __tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts index 278dcc414e..357cd72671 100644 --- a/__tests__/unit/core-marketplace/builders/bridgechain-registration.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts @@ -1,23 +1,23 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; import { Errors, Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { BridgechainRegistrationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { MarketplaceTransactionType } from "../../../../packages/core-marketplace/src/enums"; -import { BridgechainRegistrationTransaction } from "../../../../packages/core-marketplace/src/transactions"; +import { MagistrateTransactionType } from "../../../../packages/core-magistrate-crypto/src/enums"; +import { BridgechainRegistrationTransaction } from "../../../../packages/core-magistrate-crypto/src/transactions"; import { bridgechainRegistrationAsset1, bridgechainRegistrationAsset2, bridgechainRegistrationAssetBad, } from "../helper"; -let builder: BridgechainRegistrationBuilder; +let builder: MagistrateBuilders.BridgechainRegistrationBuilder; describe("Bridgechain registration builder", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BridgechainRegistrationTransaction); beforeEach(() => { - builder = new BridgechainRegistrationBuilder(); + builder = new MagistrateBuilders.BridgechainRegistrationBuilder(); }); describe("should test verification", () => { @@ -38,7 +38,7 @@ describe("Bridgechain registration builder", () => { describe("should test properties", () => { it("should have its specific properties", () => { - expect(builder).toHaveProperty("data.type", MarketplaceTransactionType.BridgechainRegistration); + expect(builder).toHaveProperty("data.type", MagistrateTransactionType.BridgechainRegistration); expect(builder).toHaveProperty("data.amount", Utils.BigNumber.ZERO); expect(builder).toHaveProperty("data.fee", BridgechainRegistrationTransaction.staticFee()); expect(builder).toHaveProperty("data.recipientId", undefined); diff --git a/__tests__/unit/core-marketplace/builders/bridgechain-resignation.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts similarity index 66% rename from __tests__/unit/core-marketplace/builders/bridgechain-resignation.test.ts rename to __tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts index 16ff54f71a..8230ea82d6 100644 --- a/__tests__/unit/core-marketplace/builders/bridgechain-resignation.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts @@ -1,17 +1,17 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; -import { BridgechainResignationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BridgechainResignationTransaction } from "../../../../packages/core-marketplace/src/transactions"; -let builder: BridgechainResignationBuilder; +let builder: MagistrateBuilders.BridgechainResignationBuilder; describe("Bridgechain resignation builder", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BridgechainResignationTransaction); beforeEach(() => { - builder = new BridgechainResignationBuilder(); + builder = new MagistrateBuilders.BridgechainResignationBuilder(); }); describe("should test verification", () => { it("should be true", () => { diff --git a/__tests__/unit/core-marketplace/builders/bridgechain-update.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts similarity index 72% rename from __tests__/unit/core-marketplace/builders/bridgechain-update.test.ts rename to __tests__/unit/core-magistrate/builders/bridgechain-update.test.ts index 71def32eb9..80f74f0e25 100644 --- a/__tests__/unit/core-marketplace/builders/bridgechain-update.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts @@ -1,10 +1,10 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BridgechainUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { BridgechainUpdateBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BridgechainUpdateTransaction } from "../../../../packages/core-marketplace/src/transactions"; -let builder: BridgechainUpdateBuilder; +let builder: MagistrateBuilders.BridgechainUpdateBuilder; describe("Bridgechain update builder", () => { Managers.configManager.setFromPreset("testnet"); @@ -12,7 +12,7 @@ describe("Bridgechain update builder", () => { Transactions.TransactionRegistry.registerTransactionType(BridgechainUpdateTransaction); beforeEach(() => { - builder = new BridgechainUpdateBuilder(); + builder = new MagistrateBuilders.BridgechainUpdateBuilder(); }); describe("should test verification", () => { diff --git a/__tests__/unit/core-marketplace/builders/business-registration.test.ts b/__tests__/unit/core-magistrate/builders/business-registration.test.ts similarity index 87% rename from __tests__/unit/core-marketplace/builders/business-registration.test.ts rename to __tests__/unit/core-magistrate/builders/business-registration.test.ts index 1692ac4d78..4faf686141 100644 --- a/__tests__/unit/core-marketplace/builders/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-registration.test.ts @@ -1,18 +1,18 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { BusinessRegistrationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { MarketplaceTransactionType } from "../../../../packages/core-marketplace/src/enums"; -import { BusinessRegistrationTransaction } from "../../../../packages/core-marketplace/src/transactions"; -let builder: BusinessRegistrationBuilder; +let builder: MagistrateBuilders.BusinessRegistrationBuilder; describe("Business registration builder", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessRegistrationTransaction); beforeEach(() => { - builder = new BusinessRegistrationBuilder(); + builder = new MagistrateBuilders.BusinessRegistrationBuilder(); }); describe("should test verification ", () => { @@ -58,7 +58,7 @@ describe("Business registration builder", () => { describe("should test properties", () => { it("should have its specific properties", () => { - expect(builder).toHaveProperty("data.type", MarketplaceTransactionType.BusinessRegistration); + expect(builder).toHaveProperty("data.type", MagistrateTransactionType.BusinessRegistration); expect(builder).toHaveProperty("data.amount", Utils.BigNumber.ZERO); expect(builder).toHaveProperty("data.fee", BusinessRegistrationTransaction.staticFee()); expect(builder).toHaveProperty("data.recipientId", undefined); diff --git a/__tests__/unit/core-marketplace/builders/business-resignation.test.ts b/__tests__/unit/core-magistrate/builders/business-resignation.test.ts similarity index 65% rename from __tests__/unit/core-marketplace/builders/business-resignation.test.ts rename to __tests__/unit/core-magistrate/builders/business-resignation.test.ts index 3e6ce2591a..aa4bee0d44 100644 --- a/__tests__/unit/core-marketplace/builders/business-resignation.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-resignation.test.ts @@ -1,17 +1,17 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; -import { BusinessResignationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessResignationTransaction } from "../../../../packages/core-marketplace/src/transactions"; -let builder: BusinessResignationBuilder; +let builder: MagistrateBuilders.BusinessResignationBuilder; describe("Business resignation builder", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessResignationTransaction); beforeEach(() => { - builder = new BusinessResignationBuilder(); + builder = new MagistrateBuilders.BusinessResignationBuilder(); }); describe("should test verification", () => { diff --git a/__tests__/unit/core-marketplace/builders/business-update.test.ts b/__tests__/unit/core-magistrate/builders/business-update.test.ts similarity index 70% rename from __tests__/unit/core-marketplace/builders/business-update.test.ts rename to __tests__/unit/core-magistrate/builders/business-update.test.ts index b9cd30c92d..011af20549 100644 --- a/__tests__/unit/core-marketplace/builders/business-update.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-update.test.ts @@ -1,17 +1,17 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; -import { BusinessUpdateBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessUpdateTransaction } from "../../../../packages/core-marketplace/src/transactions"; -let builder: BusinessUpdateBuilder; +let builder: MagistrateBuilders.BusinessUpdateBuilder; describe("Business update builder", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessUpdateTransaction); beforeEach(() => { - builder = new BusinessUpdateBuilder(); + builder = new MagistrateBuilders.BusinessUpdateBuilder(); }); describe("should test verification", () => { diff --git a/__tests__/unit/core-marketplace/handlers/bridgechain-handlers.test.ts b/__tests__/unit/core-magistrate/handlers/bridgechain-handlers.test.ts similarity index 88% rename from __tests__/unit/core-marketplace/handlers/bridgechain-handlers.test.ts rename to __tests__/unit/core-magistrate/handlers/bridgechain-handlers.test.ts index fcabdd421f..f26653c5e5 100644 --- a/__tests__/unit/core-marketplace/handlers/bridgechain-handlers.test.ts +++ b/__tests__/unit/core-magistrate/handlers/bridgechain-handlers.test.ts @@ -1,36 +1,34 @@ import "jest-extended"; import { State } from "@arkecosystem/core-interfaces"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers, Utils } from "@arkecosystem/crypto"; import { - BridgechainRegistrationBuilder, - BridgechainResignationBuilder, - BusinessRegistrationBuilder, -} from "../../../../packages/core-marketplace/src/builders"; - -import { BridgechainIsResignedError, WalletIsNotBusinessError } from "../../../../packages/core-marketplace/src/errors"; + BridgechainIsResignedError, + WalletIsNotBusinessError, +} from "../../../../packages/core-magistrate-transactions/src/errors"; import { BridgechainRegistrationTransactionHandler, BridgechainResignationTransactionHandler, BusinessRegistrationTransactionHandler, -} from "../../../../packages/core-marketplace/src/handlers"; -import { IBusinessWalletAttributes } from "../../../../packages/core-marketplace/src/interfaces"; +} from "../../../../packages/core-magistrate-transactions/src/handlers"; +import { IBusinessWalletAttributes } from "../../../../packages/core-magistrate-transactions/src/interfaces"; import { bridgechainIndexer, businessIndexer, - MarketplaceIndex, -} from "../../../../packages/core-marketplace/src/wallet-manager"; + MagistrateIndex, +} from "../../../../packages/core-magistrate-transactions/src/wallet-manager"; import { bridgechainRegistrationAsset1, bridgechainRegistrationAsset2, businessRegistrationAsset1 } from "../helper"; let businessRegistrationHandler: Handlers.TransactionHandler; let bridgechainRegistrationHandler: Handlers.TransactionHandler; let bridgechainResignationHandler: Handlers.TransactionHandler; -let businessRegistrationBuilder: BusinessRegistrationBuilder; -let bridgechianRegistrationBuilder: BridgechainRegistrationBuilder; -let bridgechainResignationBuilder: BridgechainResignationBuilder; +let businessRegistrationBuilder: MagistrateBuilders.BusinessRegistrationBuilder; +let bridgechianRegistrationBuilder: MagistrateBuilders.BridgechainRegistrationBuilder; +let bridgechainResignationBuilder: MagistrateBuilders.BridgechainResignationBuilder; let senderWallet: Wallets.Wallet; let walletManager: State.IWalletManager; @@ -47,13 +45,13 @@ describe("should test marketplace transaction handlers", () => { bridgechainRegistrationHandler = new BridgechainRegistrationTransactionHandler(); bridgechainResignationHandler = new BridgechainResignationTransactionHandler(); - businessRegistrationBuilder = new BusinessRegistrationBuilder(); - bridgechianRegistrationBuilder = new BridgechainRegistrationBuilder(); - bridgechainResignationBuilder = new BridgechainResignationBuilder(); + businessRegistrationBuilder = new MagistrateBuilders.BusinessRegistrationBuilder(); + bridgechianRegistrationBuilder = new MagistrateBuilders.BridgechainRegistrationBuilder(); + bridgechainResignationBuilder = new MagistrateBuilders.BridgechainResignationBuilder(); walletManager = new Wallets.WalletManager(); - walletManager.registerIndex(MarketplaceIndex.Businesses, businessIndexer); - walletManager.registerIndex(MarketplaceIndex.Bridgechains, bridgechainIndexer); + walletManager.registerIndex(MagistrateIndex.Businesses, businessIndexer); + walletManager.registerIndex(MagistrateIndex.Bridgechains, bridgechainIndexer); senderWallet = new Wallets.Wallet("ANBkoGqWeTSiaEVgVzSKZd3jS7UWzv9PSo"); senderWallet.balance = Utils.BigNumber.make(4527654310); diff --git a/__tests__/unit/core-marketplace/handlers/business-handlers.test.ts b/__tests__/unit/core-magistrate/handlers/business-handlers.test.ts similarity index 88% rename from __tests__/unit/core-marketplace/handlers/business-handlers.test.ts rename to __tests__/unit/core-magistrate/handlers/business-handlers.test.ts index 0123aef70a..be85cf4e96 100644 --- a/__tests__/unit/core-marketplace/handlers/business-handlers.test.ts +++ b/__tests__/unit/core-magistrate/handlers/business-handlers.test.ts @@ -1,32 +1,29 @@ import "jest-extended"; import { State } from "@arkecosystem/core-interfaces"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { businessIndexer, MagistrateIndex } from "@arkecosystem/core-magistrate-transactions/src/wallet-manager"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers, Utils } from "@arkecosystem/crypto"; -import { - BusinessRegistrationBuilder, - BusinessResignationBuilder, -} from "../../../../packages/core-marketplace/src/builders"; import { BusinessAlreadyRegisteredError, BusinessIsNotRegisteredError, BusinessIsResignedError, -} from "../../../../packages/core-marketplace/src/errors"; +} from "../../../../packages/core-magistrate-transactions/src/errors"; import { BusinessRegistrationTransactionHandler, BusinessResignationTransactionHandler, BusinessUpdateTransactionHandler, -} from "../../../../packages/core-marketplace/src/handlers"; -import { IBusinessWalletAttributes } from "../../../../packages/core-marketplace/src/interfaces"; -import { businessIndexer, MarketplaceIndex } from "../../../../packages/core-marketplace/src/wallet-manager"; +} from "../../../../packages/core-magistrate-transactions/src/handlers"; +import { IBusinessWalletAttributes } from "../../../../packages/core-magistrate-transactions/src/interfaces"; import { businessRegistrationAsset1, businessRegistrationAsset2 } from "../helper"; let businessRegistrationHandler: Handlers.TransactionHandler; let businessResignationHandler: Handlers.TransactionHandler; -let businessRegistrationBuilder: BusinessRegistrationBuilder; -let businessResignationBuilder: BusinessResignationBuilder; +let businessRegistrationBuilder: MagistrateBuilders.BusinessRegistrationBuilder; +let businessResignationBuilder: MagistrateBuilders.BusinessResignationBuilder; let senderWallet: Wallets.Wallet; let walletManager: State.IWalletManager; @@ -42,11 +39,11 @@ describe("should test marketplace transaction handlers", () => { businessRegistrationHandler = new BusinessRegistrationTransactionHandler(); businessResignationHandler = new BusinessResignationTransactionHandler(); - businessRegistrationBuilder = new BusinessRegistrationBuilder(); - businessResignationBuilder = new BusinessResignationBuilder(); + businessRegistrationBuilder = new MagistrateBuilders.BusinessRegistrationBuilder(); + businessResignationBuilder = new MagistrateBuilders.BusinessResignationBuilder(); walletManager = new Wallets.WalletManager(); - walletManager.registerIndex(MarketplaceIndex.Businesses, businessIndexer); + walletManager.registerIndex(MagistrateIndex.Businesses, businessIndexer); senderWallet = new Wallets.Wallet("ANBkoGqWeTSiaEVgVzSKZd3jS7UWzv9PSo"); senderWallet.balance = Utils.BigNumber.make(4527654310); diff --git a/__tests__/unit/core-marketplace/handlers/business-registration.test.ts b/__tests__/unit/core-magistrate/handlers/business-registration.test.ts similarity index 83% rename from __tests__/unit/core-marketplace/handlers/business-registration.test.ts rename to __tests__/unit/core-magistrate/handlers/business-registration.test.ts index fe0e89bc0d..9baf945f20 100644 --- a/__tests__/unit/core-marketplace/handlers/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/handlers/business-registration.test.ts @@ -1,22 +1,20 @@ import "jest-extended"; import { State } from "@arkecosystem/core-interfaces"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; +import { businessIndexer, MagistrateIndex } from "@arkecosystem/core-magistrate-transactions/src/wallet-manager"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers, Utils } from "@arkecosystem/crypto"; -import { BusinessRegistrationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessAlreadyRegisteredError } from "../../../../packages/core-marketplace/src/errors"; -import { BusinessRegistrationTransactionHandler } from "../../../../packages/core-marketplace/src/handlers"; -import { - IBusinessRegistrationAsset, - IBusinessWalletAttributes, -} from "../../../../packages/core-marketplace/src/interfaces"; -import { businessIndexer, MarketplaceIndex } from "../../../../packages/core-marketplace/src/wallet-manager"; +import { BusinessAlreadyRegisteredError } from "../../../../packages/core-magistrate-transactions/src/errors"; +import { BusinessRegistrationTransactionHandler } from "../../../../packages/core-magistrate-transactions/src/handlers"; +import { IBusinessWalletAttributes } from "../../../../packages/core-magistrate-transactions/src/interfaces"; import { businessRegistrationAsset1 } from "../helper"; let businessRegistrationHandler: Handlers.TransactionHandler; -let businessRegistrationBuilder: BusinessRegistrationBuilder; +let businessRegistrationBuilder: MagistrateBuilders.BusinessRegistrationBuilder; let senderWallet: Wallets.Wallet; let walletManager: State.IWalletManager; @@ -29,10 +27,10 @@ describe("Business registration handler", () => { beforeEach(() => { businessRegistrationHandler = new BusinessRegistrationTransactionHandler(); - businessRegistrationBuilder = new BusinessRegistrationBuilder(); + businessRegistrationBuilder = new MagistrateBuilders.BusinessRegistrationBuilder(); walletManager = new Wallets.WalletManager(); - walletManager.registerIndex(MarketplaceIndex.Businesses, businessIndexer); + walletManager.registerIndex(MagistrateIndex.Businesses, businessIndexer); senderWallet = new Wallets.Wallet("ANBkoGqWeTSiaEVgVzSKZd3jS7UWzv9PSo"); senderWallet.balance = Utils.BigNumber.make(4527654311); @@ -53,7 +51,10 @@ describe("Business registration handler", () => { }); it("should reject because wallet is already a business", async () => { - senderWallet.setAttribute("business.businessAsset", businessRegistrationAsset1); + senderWallet.setAttribute( + "business.businessAsset", + businessRegistrationAsset1, + ); const actual = businessRegistrationBuilder .businessRegistrationAsset(businessRegistrationAsset1) @@ -98,7 +99,7 @@ describe("Business registration handler", () => { await businessRegistrationHandler.applyToSender(actual.build(), walletManager); const wallet = walletManager.findByIndex( - MarketplaceIndex.Businesses, + MagistrateIndex.Businesses, senderWallet.getAttribute("business").businessId.toFixed(), ); @@ -130,7 +131,7 @@ describe("Business registration handler", () => { senderWallet.nonce = Utils.BigNumber.make(1); walletManager.reindex(senderWallet); - let wallet = walletManager.findByIndex(MarketplaceIndex.Businesses, "1"); + let wallet = walletManager.findByIndex(MagistrateIndex.Businesses, "1"); expect(wallet).toBe(senderWallet); const actual = businessRegistrationBuilder @@ -141,7 +142,7 @@ describe("Business registration handler", () => { await businessRegistrationHandler.revertForSender(actual.build(), walletManager); - wallet = walletManager.findByIndex(MarketplaceIndex.Businesses, "1"); + wallet = walletManager.findByIndex(MagistrateIndex.Businesses, "1"); expect(wallet.getAttribute("business")).toBeUndefined(); }); }); diff --git a/__tests__/unit/core-marketplace/handlers/business-resignation.test.ts b/__tests__/unit/core-magistrate/handlers/business-resignation.test.ts similarity index 73% rename from __tests__/unit/core-marketplace/handlers/business-resignation.test.ts rename to __tests__/unit/core-magistrate/handlers/business-resignation.test.ts index 3b8b88c479..60f21682f9 100644 --- a/__tests__/unit/core-marketplace/handlers/business-resignation.test.ts +++ b/__tests__/unit/core-magistrate/handlers/business-resignation.test.ts @@ -1,27 +1,25 @@ import "jest-extended"; import { State } from "@arkecosystem/core-interfaces"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { businessIndexer, MagistrateIndex } from "@arkecosystem/core-magistrate-transactions/src/wallet-manager"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers, Utils } from "@arkecosystem/crypto"; -import { - BusinessRegistrationBuilder, - BusinessResignationBuilder, -} from "../../../../packages/core-marketplace/src/builders"; -import { BusinessIsNotRegisteredError } from "../../../../packages/core-marketplace/src/errors"; +import { BusinessIsNotRegisteredError } from "../../../../packages/core-magistrate-transactions/src/errors"; + import { BusinessRegistrationTransactionHandler, BusinessResignationTransactionHandler, -} from "../../../../packages/core-marketplace/src/handlers"; -import { businessIndexer, MarketplaceIndex } from "../../../../packages/core-marketplace/src/wallet-manager"; +} from "../../../../packages/core-magistrate-transactions/src/handlers"; // @ts-ignore let businessRegistrationHandler: Handlers.TransactionHandler; let businessResignationHandler: Handlers.TransactionHandler; // @ts-ignore -let businessRegistrationBuilder: BusinessRegistrationBuilder; -let businessResignationBuilder: BusinessResignationBuilder; +let businessRegistrationBuilder: MagistrateBuilders.BusinessRegistrationBuilder; +let businessResignationBuilder: MagistrateBuilders.BusinessResignationBuilder; let senderWallet: Wallets.Wallet; let walletManager: State.IWalletManager; @@ -36,11 +34,11 @@ describe("Business resignation handler", () => { businessRegistrationHandler = new BusinessRegistrationTransactionHandler(); businessResignationHandler = new BusinessResignationTransactionHandler(); - businessRegistrationBuilder = new BusinessRegistrationBuilder(); - businessResignationBuilder = new BusinessResignationBuilder(); + businessRegistrationBuilder = new MagistrateBuilders.BusinessRegistrationBuilder(); + businessResignationBuilder = new MagistrateBuilders.BusinessResignationBuilder(); walletManager = new Wallets.WalletManager(); - walletManager.registerIndex(MarketplaceIndex.Businesses, businessIndexer); + walletManager.registerIndex(MagistrateIndex.Businesses, businessIndexer); senderWallet = new Wallets.Wallet("ANBkoGqWeTSiaEVgVzSKZd3jS7UWzv9PSo"); senderWallet.balance = Utils.BigNumber.make(4527654312); diff --git a/__tests__/unit/core-marketplace/handlers/handlers.test.ts b/__tests__/unit/core-magistrate/handlers/handlers.test.ts similarity index 57% rename from __tests__/unit/core-marketplace/handlers/handlers.test.ts rename to __tests__/unit/core-magistrate/handlers/handlers.test.ts index 877c4b32af..5c4335ae4a 100644 --- a/__tests__/unit/core-marketplace/handlers/handlers.test.ts +++ b/__tests__/unit/core-magistrate/handlers/handlers.test.ts @@ -1,11 +1,8 @@ import "jest-extended"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers } from "@arkecosystem/crypto"; -import { - MarketplaceTransactionGroup, - MarketplaceTransactionType, -} from "../../../../packages/core-marketplace/src/enums"; import { BridgechainRegistrationTransactionHandler, BridgechainResignationTransactionHandler, @@ -13,7 +10,7 @@ import { BusinessRegistrationTransactionHandler, BusinessResignationTransactionHandler, BusinessUpdateTransactionHandler, -} from "../../../../packages/core-marketplace/src/handlers"; +} from "../../../../packages/core-magistrate-transactions/src/handlers"; describe("Registry test", () => { Managers.configManager.setFromPreset("testnet"); @@ -27,12 +24,12 @@ describe("Registry test", () => { Handlers.Registry.registerTransactionHandler(BridgechainUpdateTransactionHandler); expect(() => { - Handlers.Registry.get(MarketplaceTransactionType.BusinessRegistration, MarketplaceTransactionGroup); - Handlers.Registry.get(MarketplaceTransactionType.BusinessResignation, MarketplaceTransactionGroup); - Handlers.Registry.get(MarketplaceTransactionType.BridgechainRegistration, MarketplaceTransactionGroup); - Handlers.Registry.get(MarketplaceTransactionType.BridgechainResignation, MarketplaceTransactionGroup); - Handlers.Registry.get(MarketplaceTransactionType.BusinessUpdate, MarketplaceTransactionGroup); - Handlers.Registry.get(MarketplaceTransactionType.BridgechainUpdate, MarketplaceTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BusinessRegistration, MagistrateTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BusinessResignation, MagistrateTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BridgechainRegistration, MagistrateTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BridgechainResignation, MagistrateTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BusinessUpdate, MagistrateTransactionGroup); + Handlers.Registry.get(MagistrateTransactionType.BridgechainUpdate, MagistrateTransactionGroup); }).not.toThrowError(); }); }); diff --git a/__tests__/unit/core-marketplace/helper.ts b/__tests__/unit/core-magistrate/helper.ts similarity index 97% rename from __tests__/unit/core-marketplace/helper.ts rename to __tests__/unit/core-magistrate/helper.ts index 90aaf6eb1a..cd9ac582ed 100644 --- a/__tests__/unit/core-marketplace/helper.ts +++ b/__tests__/unit/core-magistrate/helper.ts @@ -5,7 +5,7 @@ import { IBridgechainRegistrationAsset, IBusinessRegistrationAsset, IBusinessUpdateAsset, -} from "../../../packages/core-marketplace/src/interfaces"; +} from "../../../packages/core-magistrate-crypto/src/interfaces"; export const checkCommonFields = (deserialized: Interfaces.ITransaction, expected) => { const fieldsToCheck = ["version", "network", "type", "senderPublicKey", "fee", "amount", "nonce"]; diff --git a/__tests__/unit/core-marketplace/transactions/bridgechain-registration.test.ts b/__tests__/unit/core-magistrate/transactions/bridgechain-registration.test.ts similarity index 97% rename from __tests__/unit/core-marketplace/transactions/bridgechain-registration.test.ts rename to __tests__/unit/core-magistrate/transactions/bridgechain-registration.test.ts index 5ec80cce67..54d64774b9 100644 --- a/__tests__/unit/core-marketplace/transactions/bridgechain-registration.test.ts +++ b/__tests__/unit/core-magistrate/transactions/bridgechain-registration.test.ts @@ -1,11 +1,11 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation } from "@arkecosystem/crypto"; -import { BridgechainRegistrationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BridgechainRegistrationTransaction } from "../../../../packages/core-marketplace/src/transactions"; +import { BridgechainRegistrationTransaction } from "../../../../packages/core-magistrate-crypto/src/transactions"; import { bridgechainRegistrationAsset1, bridgechainRegistrationAsset2, checkCommonFields } from "../helper"; -let builder: BridgechainRegistrationBuilder; +let builder: MagistrateBuilders.BridgechainRegistrationBuilder; describe("Bridgechain registration transaction", () => { Managers.configManager.setFromPreset("testnet"); @@ -13,7 +13,7 @@ describe("Bridgechain registration transaction", () => { Transactions.TransactionRegistry.registerTransactionType(BridgechainRegistrationTransaction); beforeEach(() => { - builder = new BridgechainRegistrationBuilder(); + builder = new MagistrateBuilders.BridgechainRegistrationBuilder(); }); describe("Ser/deser", () => { diff --git a/__tests__/unit/core-marketplace/transactions/bridgechain-resignation.test.ts b/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts similarity index 87% rename from __tests__/unit/core-marketplace/transactions/bridgechain-resignation.test.ts rename to __tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts index d0a9accad1..3d17864ab3 100644 --- a/__tests__/unit/core-marketplace/transactions/bridgechain-resignation.test.ts +++ b/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts @@ -1,18 +1,18 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; -import { BridgechainResignationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BridgechainResignationTransaction } from "../../../../packages/core-marketplace/src/transactions"; import { checkCommonFields } from "../helper"; -let builder: BridgechainResignationBuilder; +let builder: MagistrateBuilders.BridgechainResignationBuilder; describe("Bridgechain registration transaction", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BridgechainResignationTransaction); beforeEach(() => { - builder = new BridgechainResignationBuilder(); + builder = new MagistrateBuilders.BridgechainResignationBuilder(); }); describe("Ser/deser", () => { diff --git a/__tests__/unit/core-marketplace/transactions/bridgechain-update.test.ts b/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts similarity index 76% rename from __tests__/unit/core-marketplace/transactions/bridgechain-update.test.ts rename to __tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts index 28afdb605f..392ec093bf 100644 --- a/__tests__/unit/core-marketplace/transactions/bridgechain-update.test.ts +++ b/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts @@ -1,11 +1,11 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BridgechainUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { BridgechainUpdateBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BridgechainUpdateTransaction } from "../../../../packages/core-marketplace/src/transactions"; import { checkCommonFields } from "../helper"; -let builder: BridgechainUpdateBuilder; +let builder: MagistrateBuilders.BridgechainUpdateBuilder; describe("Bridgechain update ser/deser", () => { Managers.configManager.setFromPreset("testnet"); @@ -13,7 +13,7 @@ describe("Bridgechain update ser/deser", () => { Transactions.TransactionRegistry.registerTransactionType(BridgechainUpdateTransaction); beforeEach(() => { - builder = new BridgechainUpdateBuilder(); + builder = new MagistrateBuilders.BridgechainUpdateBuilder(); }); it("should ser/deserialize giving back original fields", () => { diff --git a/__tests__/unit/core-marketplace/transactions/business-registration.test.ts b/__tests__/unit/core-magistrate/transactions/business-registration.test.ts similarity index 96% rename from __tests__/unit/core-marketplace/transactions/business-registration.test.ts rename to __tests__/unit/core-magistrate/transactions/business-registration.test.ts index 356f43adbc..cfd945a397 100644 --- a/__tests__/unit/core-marketplace/transactions/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-registration.test.ts @@ -1,8 +1,8 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; -import { BusinessRegistrationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessRegistrationTransaction } from "../../../../packages/core-marketplace/src/transactions"; import { businessRegistrationAsset1, businessRegistrationAsset2, @@ -11,14 +11,14 @@ import { checkCommonFields, } from "../helper"; -let builder: BusinessRegistrationBuilder; +let builder: MagistrateBuilders.BusinessRegistrationBuilder; describe("Business registration transaction", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessRegistrationTransaction); beforeEach(() => { - builder = new BusinessRegistrationBuilder(); + builder = new MagistrateBuilders.BusinessRegistrationBuilder(); }); describe("Ser/deser", () => { diff --git a/__tests__/unit/core-marketplace/transactions/business-resgination.test.ts b/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts similarity index 73% rename from __tests__/unit/core-marketplace/transactions/business-resgination.test.ts rename to __tests__/unit/core-magistrate/transactions/business-resgination.test.ts index a61cc53b13..2455281a1f 100644 --- a/__tests__/unit/core-marketplace/transactions/business-resgination.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts @@ -1,18 +1,18 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; -import { BusinessResignationBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessResignationTransaction } from "../../../../packages/core-marketplace/src/transactions"; import { checkCommonFields } from "../helper"; -let builder: BusinessResignationBuilder; +let builder: MagistrateBuilders.BusinessResignationBuilder; describe("Business resignation ser/deser", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessResignationTransaction); beforeEach(() => { - builder = new BusinessResignationBuilder(); + builder = new MagistrateBuilders.BusinessResignationBuilder(); }); it("should ser/deserialize giving back original fields", () => { const businessResignation = builder diff --git a/__tests__/unit/core-marketplace/transactions/business-update.test.ts b/__tests__/unit/core-magistrate/transactions/business-update.test.ts similarity index 92% rename from __tests__/unit/core-marketplace/transactions/business-update.test.ts rename to __tests__/unit/core-magistrate/transactions/business-update.test.ts index 1468378eb2..e222c6425c 100644 --- a/__tests__/unit/core-marketplace/transactions/business-update.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-update.test.ts @@ -1,18 +1,18 @@ import "jest-extended"; +import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; -import { BusinessUpdateBuilder } from "../../../../packages/core-marketplace/src/builders"; -import { BusinessUpdateTransaction } from "../../../../packages/core-marketplace/src/transactions"; import { businessUpdateAsset1, businessUpdateAsset2, businessUpdateAsset3, checkCommonFields } from "../helper"; -let builder: BusinessUpdateBuilder; +let builder: MagistrateBuilders.BusinessUpdateBuilder; describe("Business update transaction", () => { Managers.configManager.setFromPreset("testnet"); Transactions.TransactionRegistry.registerTransactionType(BusinessUpdateTransaction); beforeEach(() => { - builder = new BusinessUpdateBuilder(); + builder = new MagistrateBuilders.BusinessUpdateBuilder(); }); describe("Ser/deser", () => { diff --git a/__tests__/unit/core-marketplace/wallet.test.ts b/__tests__/unit/core-magistrate/wallet.test.ts similarity index 93% rename from __tests__/unit/core-marketplace/wallet.test.ts rename to __tests__/unit/core-magistrate/wallet.test.ts index 844700bea6..5808f4ec04 100644 --- a/__tests__/unit/core-marketplace/wallet.test.ts +++ b/__tests__/unit/core-magistrate/wallet.test.ts @@ -1,10 +1,8 @@ -import "jest-extended"; - +import { BusinessRegistrationTransactionHandler } from "@arkecosystem/core-magistrate-transactions/src/handlers"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Utils } from "@arkecosystem/crypto"; -import { BusinessRegistrationTransactionHandler } from "../../../packages/core-marketplace/src/handlers"; -import { IBusinessWalletAttributes } from "../../../packages/core-marketplace/src/interfaces"; +import { IBusinessWalletAttributes } from "../../../packages/core-magistrate-transactions/src/interfaces"; describe("should test wallet", () => { it("should return the same data as added", () => { diff --git a/__tests__/unit/core-transaction-pool/__fixtures__/transactions.ts b/__tests__/unit/core-transaction-pool/__fixtures__/transactions.ts index 2d3c0b8fe1..edf095168d 100644 --- a/__tests__/unit/core-transaction-pool/__fixtures__/transactions.ts +++ b/__tests__/unit/core-transaction-pool/__fixtures__/transactions.ts @@ -1,5 +1,5 @@ -import { TransactionFactory } from "../../../helpers/transaction-factory"; import { Utils } from "@arkecosystem/crypto"; +import { TransactionFactory } from "../../../helpers/transaction-factory"; import { delegates } from "../../../utils/fixtures/unitnet/delegates"; export const transactions = { diff --git a/__tests__/utils/config/testnet/plugins.js b/__tests__/utils/config/testnet/plugins.js index e9fb307f69..9261cb62dd 100644 --- a/__tests__/utils/config/testnet/plugins.js +++ b/__tests__/utils/config/testnet/plugins.js @@ -2,7 +2,7 @@ module.exports = { "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, - "@arkecosystem/core-marketplace":{}, + "@arkecosystem/core-magistrate-transactions": {}, "@arkecosystem/core-database-postgres": { connection: { host: process.env.CORE_DB_HOST || "localhost", @@ -50,5 +50,5 @@ module.exports = { port: process.env.CORE_EXCHANGE_JSON_RPC_PORT || 8080, allowRemote: false, whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], - } + }, }; diff --git a/__tests__/utils/config/unitnet/plugins.js b/__tests__/utils/config/unitnet/plugins.js index 7703014a31..108ddf77e5 100644 --- a/__tests__/utils/config/unitnet/plugins.js +++ b/__tests__/utils/config/unitnet/plugins.js @@ -2,7 +2,7 @@ module.exports = { "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, - "@arkecosystem/core-marketplace":{}, + "@arkecosystem/core-magistrate-transactions":{}, "@arkecosystem/core-database-postgres": { connection: { host: process.env.CORE_DB_HOST || "localhost", diff --git a/packages/core-database-postgres/src/repositories/transactions.ts b/packages/core-database-postgres/src/repositories/transactions.ts index fbb2f401c2..c136fe699b 100644 --- a/packages/core-database-postgres/src/repositories/transactions.ts +++ b/packages/core-database-postgres/src/repositories/transactions.ts @@ -68,20 +68,22 @@ export class TransactionsRepository extends Repository implements Database.ITran const recipientWallet: State.IWallet = walletManager.findByAddress(first.value); for (const query of [selectQuery, selectQueryCount]) { - query.or( - this.query.sender_public_key - .equals(recipientWallet.publicKey) - .and(this.query.recipient_id.isNull()), - ).or( - // Include multipayment recipients - this.query.asset.contains({ - payments: [ - { - recipientId: first.value, - }, - ], - }), - ); + query + .or( + this.query.sender_public_key + .equals(recipientWallet.publicKey) + .and(this.query.recipient_id.isNull()), + ) + .or( + // Include multipayment recipients + this.query.asset.contains({ + payments: [ + { + recipientId: first.value, + }, + ], + }), + ); } } } else if (rest.length) { diff --git a/packages/core-marketplace/README.md b/packages/core-magistrate-crypto/README.md similarity index 89% rename from packages/core-marketplace/README.md rename to packages/core-magistrate-crypto/README.md index 20083814da..1cbace800a 100644 --- a/packages/core-marketplace/README.md +++ b/packages/core-magistrate-crypto/README.md @@ -6,7 +6,7 @@ ## Documentation -You can find installation instructions and detailed instructions on how to use this package at the [dedicated documentation site](https://docs.ark.io/guidebook/core/plugins/core-marketplace.html). +You can find installation instructions and detailed instructions on how to use this package at the [dedicated documentation site](https://docs.ark.io/guidebook/core/plugins/core-magistrate-crypto.html). ## Security diff --git a/packages/core-magistrate-crypto/package.json b/packages/core-magistrate-crypto/package.json new file mode 100644 index 0000000000..164d5371ab --- /dev/null +++ b/packages/core-magistrate-crypto/package.json @@ -0,0 +1,29 @@ +{ + "name": "@arkecosystem/core-magistrate-crypto", + "version": "2.5.0-next.10", + "description": "ARK transactions for businesses and bridgechains", + "license": "MIT", + "contributors": [ + "Joshua Noack ", + "Kristjan Košič ", + "Žan Kovač " + ], + "files": [ + "dist" + ], + "main": "dist/index", + "types": "dist/index", + "scripts": { + "build": "yarn clean && tsc", + "build:watch": "yarn clean && yarn compile -w", + "clean": "del dist", + "compile": "../../node_modules/typescript/bin/tsc", + "prepublishOnly": "yarn build" + }, + "dependencies": { + "@arkecosystem/crypto": "^2.5.0-next.10" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/core-marketplace/src/builders/bridgechain-registration.ts b/packages/core-magistrate-crypto/src/builders/bridgechain-registration.ts similarity index 86% rename from packages/core-marketplace/src/builders/bridgechain-registration.ts rename to packages/core-magistrate-crypto/src/builders/bridgechain-registration.ts index 18cbe37199..ba18318476 100644 --- a/packages/core-marketplace/src/builders/bridgechain-registration.ts +++ b/packages/core-magistrate-crypto/src/builders/bridgechain-registration.ts @@ -1,5 +1,5 @@ import { Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "../enums"; import { IBridgechainRegistrationAsset } from "../interfaces"; import { BridgechainRegistrationTransaction } from "../transactions"; @@ -7,8 +7,8 @@ export class BridgechainRegistrationBuilder extends Transactions.TransactionBuil constructor() { super(); this.data.version = 2; - this.data.typeGroup = MarketplaceTransactionGroup; - this.data.type = MarketplaceTransactionType.BridgechainRegistration; + this.data.typeGroup = MagistrateTransactionGroup; + this.data.type = MagistrateTransactionType.BridgechainRegistration; this.data.fee = BridgechainRegistrationTransaction.staticFee(); this.data.amount = Utils.BigNumber.ZERO; this.data.asset = { bridgechainRegistration: {} }; diff --git a/packages/core-marketplace/src/builders/bridgechain-resignation.ts b/packages/core-magistrate-crypto/src/builders/bridgechain-resignation.ts similarity index 82% rename from packages/core-marketplace/src/builders/bridgechain-resignation.ts rename to packages/core-magistrate-crypto/src/builders/bridgechain-resignation.ts index fddc9f9831..886111b129 100644 --- a/packages/core-marketplace/src/builders/bridgechain-resignation.ts +++ b/packages/core-magistrate-crypto/src/builders/bridgechain-resignation.ts @@ -1,13 +1,13 @@ import { Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "../enums"; import { BridgechainResignationTransaction } from "../transactions"; export class BridgechainResignationBuilder extends Transactions.TransactionBuilder { constructor() { super(); this.data.version = 2; - this.data.typeGroup = MarketplaceTransactionGroup; - this.data.type = MarketplaceTransactionType.BridgechainResignation; + this.data.typeGroup = MagistrateTransactionGroup; + this.data.type = MagistrateTransactionType.BridgechainResignation; this.data.fee = BridgechainResignationTransaction.staticFee(); this.data.amount = Utils.BigNumber.ZERO; this.data.asset = { bridgechainResignation: {} }; diff --git a/packages/core-marketplace/src/builders/bridgechain-update.ts b/packages/core-magistrate-crypto/src/builders/bridgechain-update.ts similarity index 84% rename from packages/core-marketplace/src/builders/bridgechain-update.ts rename to packages/core-magistrate-crypto/src/builders/bridgechain-update.ts index 6cb8bde34f..c172fe49a3 100644 --- a/packages/core-marketplace/src/builders/bridgechain-update.ts +++ b/packages/core-magistrate-crypto/src/builders/bridgechain-update.ts @@ -1,5 +1,5 @@ import { Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "../enums"; import { IBridgechainUpdateAsset } from "../interfaces"; import { BridgechainUpdateTransaction } from "../transactions"; @@ -7,8 +7,8 @@ export class BridgechainUpdateBuilder extends Transactions.TransactionBuilder
{ constructor() { super(); this.data.version = 2; - this.data.typeGroup = MarketplaceTransactionGroup; - this.data.type = MarketplaceTransactionType.BusinessResignation; + this.data.typeGroup = MagistrateTransactionGroup; + this.data.type = MagistrateTransactionType.BusinessResignation; this.data.fee = BusinessResignationTransaction.staticFee(); this.data.amount = Utils.BigNumber.ZERO; this.data.asset = { businessResignation: {} }; diff --git a/packages/core-marketplace/src/builders/business-update.ts b/packages/core-magistrate-crypto/src/builders/business-update.ts similarity index 83% rename from packages/core-marketplace/src/builders/business-update.ts rename to packages/core-magistrate-crypto/src/builders/business-update.ts index 8503ad2a22..496144bcd1 100644 --- a/packages/core-marketplace/src/builders/business-update.ts +++ b/packages/core-magistrate-crypto/src/builders/business-update.ts @@ -1,5 +1,5 @@ import { Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "../enums"; import { IBusinessUpdateAsset } from "../interfaces"; import { BusinessUpdateTransaction } from "../transactions"; @@ -7,8 +7,8 @@ export class BusinessUpdateBuilder extends Transactions.TransactionBuilder; -} - export interface IBridgechainRegistrationAsset { name: string; seedNodes: string[]; @@ -36,9 +29,3 @@ export interface IBridgechainUpdateAsset { export interface IBridgechainResignationAsset { bridgechainId: string; } - -export interface IBridgechainWalletAttributes { - bridgechainAsset: IBridgechainRegistrationAsset; - bridgechainId: Utils.BigNumber; - resigned?: boolean; -} diff --git a/packages/core-marketplace/src/transactions/bridgechain-registration.ts b/packages/core-magistrate-crypto/src/transactions/bridgechain-registration.ts similarity index 89% rename from packages/core-marketplace/src/transactions/bridgechain-registration.ts rename to packages/core-magistrate-crypto/src/transactions/bridgechain-registration.ts index 05de3ef13b..9bbb87b12a 100644 --- a/packages/core-marketplace/src/transactions/bridgechain-registration.ts +++ b/packages/core-magistrate-crypto/src/transactions/bridgechain-registration.ts @@ -1,14 +1,14 @@ import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; import { IBridgechainRegistrationAsset } from "../interfaces"; import { seedNodesSchema } from "./utils/bridgechain-schemas"; const { schemas } = Transactions; export class BridgechainRegistrationTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; - public static type: number = MarketplaceTransactionType.BridgechainRegistration; + public static typeGroup: number = MagistrateTransactionGroup; + public static type: number = MagistrateTransactionType.BridgechainRegistration; public static key: string = "bridgechainRegistration"; public static getSchema(): Transactions.schemas.TransactionSchema { @@ -16,8 +16,8 @@ export class BridgechainRegistrationTransaction extends Transactions.Transaction $id: "bridgechainRegistration", required: ["asset", "typeGroup"], properties: { - type: { transactionType: MarketplaceTransactionType.BridgechainRegistration }, - typeGroup: { const: MarketplaceTransactionGroup }, + type: { transactionType: MagistrateTransactionType.BridgechainRegistration }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, asset: { type: "object", @@ -53,7 +53,7 @@ export class BridgechainRegistrationTransaction extends Transactions.Transaction }, }); } - protected static defaultStaticFee = Utils.BigNumber.make(MarketplaceTransactionStaticFees.BridgechainRegistration); + protected static defaultStaticFee = Utils.BigNumber.make(MagistrateTransactionStaticFees.BridgechainRegistration); public serialize(): ByteBuffer { const { data } = this; diff --git a/packages/core-marketplace/src/transactions/bridgechain-resignation.ts b/packages/core-magistrate-crypto/src/transactions/bridgechain-resignation.ts similarity index 77% rename from packages/core-marketplace/src/transactions/bridgechain-resignation.ts rename to packages/core-magistrate-crypto/src/transactions/bridgechain-resignation.ts index 418a86517c..24b0a67a48 100644 --- a/packages/core-marketplace/src/transactions/bridgechain-resignation.ts +++ b/packages/core-magistrate-crypto/src/transactions/bridgechain-resignation.ts @@ -1,15 +1,14 @@ -import { Transactions } from "@arkecosystem/crypto"; -import { Utils } from "@arkecosystem/crypto"; +import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; import { IBridgechainResignationAsset } from "../interfaces"; const { schemas } = Transactions; -const bridgechainResignationType: number = MarketplaceTransactionType.BridgechainResignation; +const bridgechainResignationType: number = MagistrateTransactionType.BridgechainResignation; export class BridgechainResignationTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; + public static typeGroup: number = MagistrateTransactionGroup; public static type = bridgechainResignationType; public static key: string = "bridgechainResignation"; @@ -19,7 +18,7 @@ export class BridgechainResignationTransaction extends Transactions.Transaction required: ["asset", "typeGroup"], properties: { type: { transactionType: bridgechainResignationType }, - typeGroup: { const: MarketplaceTransactionGroup }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, asset: { type: "object", @@ -37,7 +36,7 @@ export class BridgechainResignationTransaction extends Transactions.Transaction }, }); } - protected static defaultStaticFee = Utils.BigNumber.make(MarketplaceTransactionStaticFees.BridgechainResignation); + protected static defaultStaticFee = Utils.BigNumber.make(MagistrateTransactionStaticFees.BridgechainResignation); public serialize(): ByteBuffer { const { data } = this; diff --git a/packages/core-marketplace/src/transactions/bridgechain-update.ts b/packages/core-magistrate-crypto/src/transactions/bridgechain-update.ts similarity index 84% rename from packages/core-marketplace/src/transactions/bridgechain-update.ts rename to packages/core-magistrate-crypto/src/transactions/bridgechain-update.ts index f446f9f2ca..2817c78c74 100644 --- a/packages/core-marketplace/src/transactions/bridgechain-update.ts +++ b/packages/core-magistrate-crypto/src/transactions/bridgechain-update.ts @@ -1,14 +1,14 @@ import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; import { IBridgechainUpdateAsset } from "../interfaces"; import { seedNodesSchema } from "./utils/bridgechain-schemas"; const { schemas } = Transactions; export class BridgechainUpdateTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; - public static type = MarketplaceTransactionType.BridgechainUpdate; + public static typeGroup: number = MagistrateTransactionGroup; + public static type = MagistrateTransactionType.BridgechainUpdate; public static key: string = "bridgechainUpdate"; public static getSchema(): Transactions.schemas.TransactionSchema { @@ -16,8 +16,8 @@ export class BridgechainUpdateTransaction extends Transactions.Transaction { $id: "bridgechainUpdate", required: ["asset", "typeGroup"], properties: { - type: { transactionType: MarketplaceTransactionType.BridgechainUpdate }, - typeGroup: { const: MarketplaceTransactionGroup }, + type: { transactionType: MagistrateTransactionType.BridgechainUpdate }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, asset: { type: "object", @@ -36,7 +36,7 @@ export class BridgechainUpdateTransaction extends Transactions.Transaction { }, }); } - protected static defaultStaticFee = Utils.BigNumber.make(MarketplaceTransactionStaticFees.BridgechainUpdate); + protected static defaultStaticFee = Utils.BigNumber.make(MagistrateTransactionStaticFees.BridgechainUpdate); public serialize(): ByteBuffer { const { data } = this; diff --git a/packages/core-marketplace/src/transactions/business-registration.ts b/packages/core-magistrate-crypto/src/transactions/business-registration.ts similarity index 88% rename from packages/core-marketplace/src/transactions/business-registration.ts rename to packages/core-magistrate-crypto/src/transactions/business-registration.ts index c6550af002..e9129b1312 100644 --- a/packages/core-marketplace/src/transactions/business-registration.ts +++ b/packages/core-magistrate-crypto/src/transactions/business-registration.ts @@ -1,14 +1,14 @@ import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; import { IBusinessRegistrationAsset } from "../interfaces"; import { businessSchema } from "./utils/business-schema"; const { schemas } = Transactions; export class BusinessRegistrationTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; - public static type: number = MarketplaceTransactionType.BusinessRegistration; + public static typeGroup: number = MagistrateTransactionGroup; + public static type: number = MagistrateTransactionType.BusinessRegistration; public static key: string = "businessRegistration"; public static getSchema(): Transactions.schemas.TransactionSchema { @@ -16,8 +16,8 @@ export class BusinessRegistrationTransaction extends Transactions.Transaction { $id: "businessRegistration", required: ["asset", "typeGroup"], properties: { - type: { transactionType: MarketplaceTransactionType.BusinessRegistration }, - typeGroup: { const: MarketplaceTransactionGroup }, + type: { transactionType: MagistrateTransactionType.BusinessRegistration }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, asset: { type: "object", @@ -35,7 +35,7 @@ export class BusinessRegistrationTransaction extends Transactions.Transaction { } protected static defaultStaticFee: Utils.BigNumber = Utils.BigNumber.make( - MarketplaceTransactionStaticFees.BusinessRegistration, + MagistrateTransactionStaticFees.BusinessRegistration, ); public serialize(): ByteBuffer { diff --git a/packages/core-marketplace/src/transactions/business-resignation.ts b/packages/core-magistrate-crypto/src/transactions/business-resignation.ts similarity index 58% rename from packages/core-marketplace/src/transactions/business-resignation.ts rename to packages/core-magistrate-crypto/src/transactions/business-resignation.ts index 8d1957cd1e..ee3342a250 100644 --- a/packages/core-marketplace/src/transactions/business-resignation.ts +++ b/packages/core-magistrate-crypto/src/transactions/business-resignation.ts @@ -1,12 +1,12 @@ import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; const { schemas } = Transactions; export class BusinessResignationTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; - public static type: number = MarketplaceTransactionType.BusinessResignation; + public static typeGroup: number = MagistrateTransactionGroup; + public static type: number = MagistrateTransactionType.BusinessResignation; public static key: string = "businessResignation"; public static getSchema(): Transactions.schemas.TransactionSchema { @@ -14,13 +14,13 @@ export class BusinessResignationTransaction extends Transactions.Transaction { $id: "businessResignation", required: ["typeGroup"], properties: { - type: { transactionType: MarketplaceTransactionType.BusinessResignation }, - typeGroup: { const: MarketplaceTransactionGroup }, + type: { transactionType: MagistrateTransactionType.BusinessResignation }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, }, }); } - protected static defaultStaticFee = Utils.BigNumber.make(MarketplaceTransactionStaticFees.BusinessResignation); + protected static defaultStaticFee = Utils.BigNumber.make(MagistrateTransactionStaticFees.BusinessResignation); public serialize(): ByteBuffer { return new ByteBuffer(0); diff --git a/packages/core-marketplace/src/transactions/business-update.ts b/packages/core-magistrate-crypto/src/transactions/business-update.ts similarity index 90% rename from packages/core-marketplace/src/transactions/business-update.ts rename to packages/core-magistrate-crypto/src/transactions/business-update.ts index 99bf7fbe63..15dcf752a5 100644 --- a/packages/core-marketplace/src/transactions/business-update.ts +++ b/packages/core-magistrate-crypto/src/transactions/business-update.ts @@ -1,14 +1,14 @@ import { Transactions, Utils } from "@arkecosystem/crypto"; import ByteBuffer from "bytebuffer"; -import { MarketplaceTransactionGroup, MarketplaceTransactionStaticFees, MarketplaceTransactionType } from "../enums"; +import { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "../enums"; import { IBusinessUpdateAsset } from "../interfaces"; import { businessSchema } from "./utils/business-schema"; const { schemas } = Transactions; export class BusinessUpdateTransaction extends Transactions.Transaction { - public static typeGroup: number = MarketplaceTransactionGroup; - public static type: number = MarketplaceTransactionType.BusinessUpdate; + public static typeGroup: number = MagistrateTransactionGroup; + public static type: number = MagistrateTransactionType.BusinessUpdate; public static key: string = "businessUpdate"; public static getSchema(): Transactions.schemas.TransactionSchema { @@ -16,8 +16,8 @@ export class BusinessUpdateTransaction extends Transactions.Transaction { $id: "businessUpdate", required: ["asset", "typeGroup"], properties: { - type: { transactionType: MarketplaceTransactionType.BusinessUpdate }, - typeGroup: { const: MarketplaceTransactionGroup }, + type: { transactionType: MagistrateTransactionType.BusinessUpdate }, + typeGroup: { const: MagistrateTransactionGroup }, amount: { bignumber: { minimum: 0, maximum: 0 } }, asset: { type: "object", @@ -49,7 +49,7 @@ export class BusinessUpdateTransaction extends Transactions.Transaction { } protected static defaultStaticFee: Utils.BigNumber = Utils.BigNumber.make( - MarketplaceTransactionStaticFees.BusinessUpdate, + MagistrateTransactionStaticFees.BusinessUpdate, ); public serialize(): ByteBuffer { diff --git a/packages/core-marketplace/src/handlers/index.ts b/packages/core-magistrate-crypto/src/transactions/index.ts similarity index 100% rename from packages/core-marketplace/src/handlers/index.ts rename to packages/core-magistrate-crypto/src/transactions/index.ts diff --git a/packages/core-marketplace/src/transactions/utils/bridgechain-schemas.ts b/packages/core-magistrate-crypto/src/transactions/utils/bridgechain-schemas.ts similarity index 100% rename from packages/core-marketplace/src/transactions/utils/bridgechain-schemas.ts rename to packages/core-magistrate-crypto/src/transactions/utils/bridgechain-schemas.ts diff --git a/packages/core-marketplace/src/transactions/utils/business-schema.ts b/packages/core-magistrate-crypto/src/transactions/utils/business-schema.ts similarity index 100% rename from packages/core-marketplace/src/transactions/utils/business-schema.ts rename to packages/core-magistrate-crypto/src/transactions/utils/business-schema.ts diff --git a/packages/core-marketplace/tsconfig.json b/packages/core-magistrate-crypto/tsconfig.json similarity index 100% rename from packages/core-marketplace/tsconfig.json rename to packages/core-magistrate-crypto/tsconfig.json diff --git a/packages/core-magistrate-transactions/README.md b/packages/core-magistrate-transactions/README.md new file mode 100644 index 0000000000..3538e22995 --- /dev/null +++ b/packages/core-magistrate-transactions/README.md @@ -0,0 +1,21 @@ +# ARK Core - Marketplace + +

+ +

+ +## Documentation + +You can find installation instructions and detailed instructions on how to use this package at the [dedicated documentation site](https://docs.ark.io/guidebook/core/plugins/core-magistrate-transactions.html). + +## Security + +If you discover a security vulnerability within this package, please send an e-mail to security@ark.io. All security vulnerabilities will be promptly addressed. + +## Credits + +This project exists thanks to all the people who [contribute](../../../../contributors). + +## License + +[MIT](LICENSE) © [ARK Ecosystem](https://ark.io) diff --git a/packages/core-marketplace/package.json b/packages/core-magistrate-transactions/package.json similarity index 82% rename from packages/core-marketplace/package.json rename to packages/core-magistrate-transactions/package.json index 3823e5bb78..22edf9aa47 100644 --- a/packages/core-marketplace/package.json +++ b/packages/core-magistrate-transactions/package.json @@ -1,12 +1,12 @@ { - "name": "@arkecosystem/core-marketplace", + "name": "@arkecosystem/core-magistrate-transactions", "version": "2.5.0-next.10", "description": "ARK transactions for businesses and bridgechains", "license": "MIT", "contributors": [ "Joshua Noack ", "Kristjan Košič ", - "Žan Kovač" + "Žan Kovač " ], "files": [ "dist" @@ -26,7 +26,8 @@ "@arkecosystem/core-interfaces": "^2.5.0-next.10", "@arkecosystem/core-transactions": "^2.5.0-next.10", "@arkecosystem/core-utils": "^2.5.0-next.10", - "@arkecosystem/crypto": "^2.5.0-next.10" + "@arkecosystem/crypto": "^2.5.0-next.10", + "@arkecosystem/core-magistrate-crypto": "^2.5.0-next.10" }, "publishConfig": { "access": "public" diff --git a/packages/core-marketplace/src/defaults.ts b/packages/core-magistrate-transactions/src/defaults.ts similarity index 100% rename from packages/core-marketplace/src/defaults.ts rename to packages/core-magistrate-transactions/src/defaults.ts diff --git a/packages/core-marketplace/src/errors.ts b/packages/core-magistrate-transactions/src/errors.ts similarity index 100% rename from packages/core-marketplace/src/errors.ts rename to packages/core-magistrate-transactions/src/errors.ts diff --git a/packages/core-marketplace/src/events.ts b/packages/core-magistrate-transactions/src/events.ts similarity index 87% rename from packages/core-marketplace/src/events.ts rename to packages/core-magistrate-transactions/src/events.ts index dee22c6b38..188c053512 100644 --- a/packages/core-marketplace/src/events.ts +++ b/packages/core-magistrate-transactions/src/events.ts @@ -1,4 +1,4 @@ -export enum MarketplaceAplicationEvents { +export enum MagistrateApplicationEvents { BusinessRegistered = "business.registered", BusinessResigned = "business.resigned", BusinessUpdate = "business.updated", diff --git a/packages/core-marketplace/src/handlers/bridgechain-registration.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts similarity index 93% rename from packages/core-marketplace/src/handlers/bridgechain-registration.ts rename to packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts index 7ecb26c84b..4db165ac82 100644 --- a/packages/core-marketplace/src/handlers/bridgechain-registration.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts @@ -1,11 +1,11 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { BridgechainRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions, Utils } from "@arkecosystem/crypto"; import { BusinessIsResignedError, WalletIsNotBusinessError } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; +import { MagistrateApplicationEvents } from "../events"; import { IBusinessWalletAttributes } from "../interfaces"; -import { BridgechainRegistrationTransaction } from "../transactions"; -import { MarketplaceIndex } from "../wallet-manager"; +import { MagistrateIndex } from "../wallet-manager"; import { BusinessRegistrationTransactionHandler } from "./business-registration"; export class BridgechainRegistrationTransactionHandler extends Handlers.TransactionHandler { @@ -67,7 +67,7 @@ export class BridgechainRegistrationTransactionHandler extends Handlers.Transact } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BridgechainRegistered, transaction.data); + emitter.emit(MagistrateApplicationEvents.BridgechainRegistered, transaction.data); } public async canEnterTransactionPool( @@ -132,6 +132,6 @@ export class BridgechainRegistrationTransactionHandler extends Handlers.Transact ): Promise {} private getBridgechainId(walletManager: State.IWalletManager): Utils.BigNumber { - return Utils.BigNumber.make(walletManager.getIndex(MarketplaceIndex.Bridgechains).values().length).plus(1); + return Utils.BigNumber.make(walletManager.getIndex(MagistrateIndex.Bridgechains).values().length).plus(1); } } diff --git a/packages/core-marketplace/src/handlers/bridgechain-resignation.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts similarity index 86% rename from packages/core-marketplace/src/handlers/bridgechain-resignation.ts rename to packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts index 6fcfaa1b2d..417b8222b5 100644 --- a/packages/core-marketplace/src/handlers/bridgechain-resignation.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts @@ -1,4 +1,6 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { @@ -7,9 +9,8 @@ import { BusinessIsResignedError, WalletIsNotBusinessError, } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; -import { IBridgechainResignationAsset, IBridgechainWalletAttributes, IBusinessWalletAttributes } from "../interfaces"; -import { BridgechainResignationTransaction } from "../transactions"; +import { MagistrateApplicationEvents } from "../events"; +import { IBridgechainWalletAttributes, IBusinessWalletAttributes } from "../interfaces"; import { BridgechainRegistrationTransactionHandler } from "./bridgechain-registration"; export class BridgechainResignationTransactionHandler extends Handlers.TransactionHandler { @@ -65,7 +66,8 @@ export class BridgechainResignationTransactionHandler extends Handlers.Transacti throw new BusinessIsResignedError(); } - const bridgechainResignation: IBridgechainResignationAsset = transaction.data.asset.bridgechainResignation; + const bridgechainResignation: MagistrateInterfaces.IBridgechainResignationAsset = + transaction.data.asset.bridgechainResignation; const bridgechainAttributes: IBridgechainWalletAttributes = businessAttributes.bridgechains[bridgechainResignation.bridgechainId]; if (!bridgechainAttributes) { @@ -80,7 +82,7 @@ export class BridgechainResignationTransactionHandler extends Handlers.Transacti } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BridgechainResigned, transaction.data); + emitter.emit(MagistrateApplicationEvents.BridgechainResigned, transaction.data); } public async canEnterTransactionPool( @@ -111,7 +113,8 @@ export class BridgechainResignationTransactionHandler extends Handlers.Transacti "business", ); - const bridgechainResignation: IBridgechainResignationAsset = transaction.data.asset.bridgechainResignation; + const bridgechainResignation: MagistrateInterfaces.IBridgechainResignationAsset = + transaction.data.asset.bridgechainResignation; businessAttributes.bridgechains[bridgechainResignation.bridgechainId].resigned = true; } @@ -126,7 +129,8 @@ export class BridgechainResignationTransactionHandler extends Handlers.Transacti "business", ); - const bridgechainResignation: IBridgechainResignationAsset = transaction.data.asset.bridgechainResignation; + const bridgechainResignation: MagistrateInterfaces.IBridgechainResignationAsset = + transaction.data.asset.bridgechainResignation; businessAttributes.bridgechains[bridgechainResignation.bridgechainId].resigned = false; } diff --git a/packages/core-marketplace/src/handlers/bridgechain-update.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts similarity index 88% rename from packages/core-marketplace/src/handlers/bridgechain-update.ts rename to packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts index 9a95216b25..9a40b542d9 100644 --- a/packages/core-marketplace/src/handlers/bridgechain-update.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts @@ -1,22 +1,17 @@ import { app } from "@arkecosystem/core-container"; import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; +import { BridgechainUpdateTransaction, Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; import { BridgechainIsNotRegisteredError, BridgechainIsResignedError, BusinessIsNotRegisteredError, BusinessIsResignedError, } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; -import { - IBridgechainRegistrationAsset, - IBridgechainUpdateAsset, - IBridgechainWalletAttributes, - IBusinessWalletAttributes, -} from "../interfaces"; -import { BridgechainUpdateTransaction } from "../transactions"; +import { MagistrateApplicationEvents } from "../events"; +import { IBridgechainWalletAttributes, IBusinessWalletAttributes } from "../interfaces"; import { BridgechainRegistrationTransactionHandler } from "./bridgechain-registration"; export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHandler { @@ -70,7 +65,8 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan const businessAttributes: IBusinessWalletAttributes = wallet.getAttribute( "business", ); - const bridgechainUpdate: IBridgechainUpdateAsset = transaction.data.asset.bridgechainUpdate; + const bridgechainUpdate: MagistrateInterfaces.IBridgechainUpdateAsset = + transaction.data.asset.bridgechainUpdate; const bridgechainAttributes: IBridgechainWalletAttributes = businessAttributes.bridgechains[bridgechainUpdate.bridgechainId.toFixed()]; @@ -86,7 +82,7 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BridgechainUpdate, transaction.data); + emitter.emit(MagistrateApplicationEvents.BridgechainUpdate, transaction.data); } public async canEnterTransactionPool( @@ -107,7 +103,8 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan const businessAttributes: IBusinessWalletAttributes = wallet.getAttribute( "business", ); - const bridgechainUpdate: IBridgechainUpdateAsset = transaction.data.asset.bridgechainUpdate; + const bridgechainUpdate: MagistrateInterfaces.IBridgechainUpdateAsset = + transaction.data.asset.bridgechainUpdate; const bridgechainAttributes: IBridgechainWalletAttributes = businessAttributes.bridgechains[bridgechainUpdate.bridgechainId.toFixed()]; @@ -131,8 +128,8 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan "database", ).transactionsRepository; const updateTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MarketplaceTransactionType.BridgechainUpdate, - MarketplaceTransactionGroup, + MagistrateTransactionType.BridgechainUpdate, + MagistrateTransactionGroup, ); if (updateTransactions.length > 1) { @@ -147,7 +144,7 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan const bridgechainId: string = transaction.data.asset.bridgechainUpdate.bridgechainId.toFixed(); const registrationIndex: number = Object.keys(businessAttributes.bridgechains).indexOf(bridgechainId); - const bridgechainRegistration: IBridgechainRegistrationAsset = (await app + const bridgechainRegistration: MagistrateInterfaces.IBridgechainRegistrationAsset = (await app .resolvePlugin("database") .transactionsRepository.search({ parameters: [ @@ -158,7 +155,7 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan }, { field: "type", - value: MarketplaceTransactionType.BridgechainRegistration, + value: MagistrateTransactionType.BridgechainRegistration, operator: Database.SearchOperator.OP_EQ, }, ], diff --git a/packages/core-marketplace/src/handlers/business-registration.ts b/packages/core-magistrate-transactions/src/handlers/business-registration.ts similarity index 90% rename from packages/core-marketplace/src/handlers/business-registration.ts rename to packages/core-magistrate-transactions/src/handlers/business-registration.ts index cfbd88cfb2..e4cda43114 100644 --- a/packages/core-marketplace/src/handlers/business-registration.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-registration.ts @@ -1,11 +1,11 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions, Utils } from "@arkecosystem/crypto"; import { BusinessAlreadyRegisteredError } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; +import { MagistrateApplicationEvents } from "../events"; import { IBusinessWalletAttributes } from "../interfaces"; -import { BusinessRegistrationTransaction } from "../transactions"; -import { MarketplaceIndex } from "../wallet-manager"; +import { MagistrateIndex } from "../wallet-manager"; export class BusinessRegistrationTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { @@ -60,7 +60,7 @@ export class BusinessRegistrationTransactionHandler extends Handlers.Transaction } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BusinessRegistered, transaction.data); + emitter.emit(MagistrateApplicationEvents.BusinessRegistered, transaction.data); } public async canEnterTransactionPool( @@ -105,7 +105,7 @@ export class BusinessRegistrationTransactionHandler extends Handlers.Transaction const sender: State.IWallet = walletManager.findByPublicKey(transaction.data.senderPublicKey); sender.forgetAttribute("business"); - walletManager.forgetByIndex(MarketplaceIndex.Businesses, sender.publicKey); + walletManager.forgetByIndex(MagistrateIndex.Businesses, sender.publicKey); } public async applyToRecipient( @@ -121,6 +121,6 @@ export class BusinessRegistrationTransactionHandler extends Handlers.Transaction ): Promise {} private getBusinessId(walletManager: State.IWalletManager): Utils.BigNumber { - return Utils.BigNumber.make(walletManager.getIndex(MarketplaceIndex.Businesses).values().length).plus(1); + return Utils.BigNumber.make(walletManager.getIndex(MagistrateIndex.Businesses).values().length).plus(1); } } diff --git a/packages/core-marketplace/src/handlers/business-resignation.ts b/packages/core-magistrate-transactions/src/handlers/business-resignation.ts similarity index 95% rename from packages/core-marketplace/src/handlers/business-resignation.ts rename to packages/core-magistrate-transactions/src/handlers/business-resignation.ts index 717e434b99..f18dc2b4fb 100644 --- a/packages/core-marketplace/src/handlers/business-resignation.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-resignation.ts @@ -1,10 +1,10 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { BusinessIsNotRegisteredError, BusinessIsResignedError } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; +import { MagistrateApplicationEvents } from "../events"; import { IBusinessWalletAttributes } from "../interfaces"; -import { BusinessResignationTransaction } from "../transactions"; import { BusinessRegistrationTransactionHandler } from "./business-registration"; export class BusinessResignationTransactionHandler extends Handlers.TransactionHandler { @@ -53,7 +53,7 @@ export class BusinessResignationTransactionHandler extends Handlers.TransactionH } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BusinessResigned, transaction.data); + emitter.emit(MagistrateApplicationEvents.BusinessResigned, transaction.data); } public async canEnterTransactionPool( diff --git a/packages/core-marketplace/src/handlers/business-update.ts b/packages/core-magistrate-transactions/src/handlers/business-update.ts similarity index 72% rename from packages/core-marketplace/src/handlers/business-update.ts rename to packages/core-magistrate-transactions/src/handlers/business-update.ts index f03d5ad5b1..a588edfaf5 100644 --- a/packages/core-marketplace/src/handlers/business-update.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-update.ts @@ -1,12 +1,13 @@ import { app } from "@arkecosystem/core-container"; import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; +import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; +import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; -import { MarketplaceTransactionGroup, MarketplaceTransactionType } from "../enums"; import { BusinessIsNotRegisteredError, BusinessIsResignedError } from "../errors"; -import { MarketplaceAplicationEvents } from "../events"; -import { IBusinessRegistrationAsset, IBusinessUpdateAsset, IBusinessWalletAttributes } from "../interfaces"; -import { BusinessUpdateTransaction } from "../transactions"; +import { MagistrateApplicationEvents } from "../events"; +import { IBusinessWalletAttributes } from "../interfaces"; import { BusinessRegistrationTransactionHandler } from "./business-registration"; export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandler { @@ -34,10 +35,11 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle for (const transaction of transactions) { const wallet: State.IWallet = walletManager.findByPublicKey(transaction.senderPublicKey); - const businessWalletAsset: IBusinessRegistrationAsset = wallet.getAttribute( - "business", - ).businessAsset; - const businessUpdate: IBusinessUpdateAsset = transaction.asset.businessUpdate as IBusinessUpdateAsset; + const businessWalletAsset: MagistrateInterfaces.IBusinessRegistrationAsset = wallet.getAttribute< + IBusinessWalletAttributes + >("business").businessAsset; + const businessUpdate: MagistrateInterfaces.IBusinessUpdateAsset = transaction.asset + .businessUpdate as MagistrateInterfaces.IBusinessUpdateAsset; wallet.setAttribute("business.businessAsset", { ...businessWalletAsset, @@ -63,7 +65,7 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle } public emitEvents(transaction: Interfaces.ITransaction, emitter: EventEmitter.EventEmitter): void { - emitter.emit(MarketplaceAplicationEvents.BusinessUpdate, transaction.data); + emitter.emit(MagistrateApplicationEvents.BusinessUpdate, transaction.data); } public async canEnterTransactionPool( @@ -81,10 +83,10 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle await super.applyToSender(transaction, walletManager); const sender: State.IWallet = walletManager.findByPublicKey(transaction.data.senderPublicKey); - const businessWalletAsset: IBusinessRegistrationAsset = sender.getAttribute( - "business", - ).businessAsset; - const businessUpdate: IBusinessUpdateAsset = transaction.data.asset.businessUpdate; + const businessWalletAsset: MagistrateInterfaces.IBusinessRegistrationAsset = sender.getAttribute< + IBusinessWalletAttributes + >("business").businessAsset; + const businessUpdate: MagistrateInterfaces.IBusinessUpdateAsset = transaction.data.asset.businessUpdate; sender.setAttribute("business.businessAsset", { ...businessWalletAsset, @@ -98,20 +100,21 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle ): Promise { await super.revertForSender(transaction, walletManager); const sender: State.IWallet = walletManager.findByPublicKey(transaction.data.senderPublicKey); - let businessWalletAsset: IBusinessRegistrationAsset = sender.getAttribute("business") - .businessAsset; + let businessWalletAsset: MagistrateInterfaces.IBusinessRegistrationAsset = sender.getAttribute< + IBusinessWalletAttributes + >("business").businessAsset; const transactionsRepository: Database.ITransactionsRepository = app.resolvePlugin( "database", ).transactionsRepository; const updateTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MarketplaceTransactionType.BusinessUpdate, - MarketplaceTransactionGroup, + MagistrateTransactionType.BusinessUpdate, + MagistrateTransactionGroup, ); if (updateTransactions.length > 0) { const updateTransaction: Database.IBootstrapTransaction = updateTransactions.pop(); - const previousUpdate: IBusinessUpdateAsset = updateTransaction.asset.businessUpdate; + const previousUpdate: MagistrateInterfaces.IBusinessUpdateAsset = updateTransaction.asset.businessUpdate; businessWalletAsset = { ...businessWalletAsset, @@ -119,12 +122,13 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle }; } else { const registerTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MarketplaceTransactionType.BusinessRegistration, - MarketplaceTransactionGroup, + MagistrateTransactionType.BusinessRegistration, + MagistrateTransactionGroup, ); const registerTransaction: Database.IBootstrapTransaction = registerTransactions.pop(); - const previousRegistration: IBusinessRegistrationAsset = registerTransaction.asset.businessRegistration; + const previousRegistration: MagistrateInterfaces.IBusinessRegistrationAsset = + registerTransaction.asset.businessRegistration; businessWalletAsset = { ...businessWalletAsset, ...previousRegistration, @@ -138,11 +142,11 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle transaction: Interfaces.ITransaction, walletManager: State.IWalletManager, // tslint:disable-next-line: no-empty - ): Promise { } + ): Promise {} public async revertForRecipient( transaction: Interfaces.ITransaction, walletManager: State.IWalletManager, // tslint:disable-next-line:no-empty - ): Promise { } + ): Promise {} } diff --git a/packages/core-marketplace/src/transactions/index.ts b/packages/core-magistrate-transactions/src/handlers/index.ts similarity index 100% rename from packages/core-marketplace/src/transactions/index.ts rename to packages/core-magistrate-transactions/src/handlers/index.ts diff --git a/packages/core-magistrate-transactions/src/index.ts b/packages/core-magistrate-transactions/src/index.ts new file mode 100644 index 0000000000..9ea479bd87 --- /dev/null +++ b/packages/core-magistrate-transactions/src/index.ts @@ -0,0 +1,3 @@ +import * as Handlers from "./handlers"; +export { Handlers }; +export * from "./plugin"; diff --git a/packages/core-magistrate-transactions/src/interfaces.ts b/packages/core-magistrate-transactions/src/interfaces.ts new file mode 100644 index 0000000000..0173667b15 --- /dev/null +++ b/packages/core-magistrate-transactions/src/interfaces.ts @@ -0,0 +1,15 @@ +import { Interfaces } from "@arkecosystem/core-magistrate-crypto"; +import { Utils } from "@arkecosystem/crypto"; + +export interface IBusinessWalletAttributes { + businessAsset: Interfaces.IBusinessRegistrationAsset; + businessId: Utils.BigNumber; + resigned?: boolean; + bridgechains?: Record; +} + +export interface IBridgechainWalletAttributes { + bridgechainAsset: Interfaces.IBridgechainRegistrationAsset; + bridgechainId: Utils.BigNumber; + resigned?: boolean; +} diff --git a/packages/core-marketplace/src/plugin.ts b/packages/core-magistrate-transactions/src/plugin.ts similarity index 81% rename from packages/core-marketplace/src/plugin.ts rename to packages/core-magistrate-transactions/src/plugin.ts index 0c280202d0..87545c7911 100644 --- a/packages/core-marketplace/src/plugin.ts +++ b/packages/core-magistrate-transactions/src/plugin.ts @@ -10,22 +10,23 @@ import { BusinessResignationTransactionHandler, BusinessUpdateTransactionHandler, } from "./handlers"; -import { bridgechainIndexer, businessIndexer, MarketplaceIndex } from "./wallet-manager"; +import { bridgechainIndexer, businessIndexer, MagistrateIndex } from "./wallet-manager"; export const plugin: Container.IPluginDescriptor = { pkg: require("../package.json"), defaults, - alias: "core-marketplace", + required: true, + alias: "core-magistrate-transactions", async register(container: Container.IContainer, options) { const logger = container.resolvePlugin("logger"); - logger.info("Setting up core-marketplace."); + logger.info("Setting up core-magistrate-transactions."); container .resolvePlugin("event-emitter") .once(ApplicationEvents.StateStarting, (database: Database.IDatabaseService) => { const walletManager = database.walletManager; - walletManager.registerIndex(MarketplaceIndex.Businesses, businessIndexer); - walletManager.registerIndex(MarketplaceIndex.Bridgechains, bridgechainIndexer); + walletManager.registerIndex(MagistrateIndex.Businesses, businessIndexer); + walletManager.registerIndex(MagistrateIndex.Bridgechains, bridgechainIndexer); }); Handlers.Registry.registerTransactionHandler(BusinessRegistrationTransactionHandler); diff --git a/packages/core-marketplace/src/wallet-manager.ts b/packages/core-magistrate-transactions/src/wallet-manager.ts similarity index 97% rename from packages/core-marketplace/src/wallet-manager.ts rename to packages/core-magistrate-transactions/src/wallet-manager.ts index f17adf9a05..4217da322d 100644 --- a/packages/core-marketplace/src/wallet-manager.ts +++ b/packages/core-magistrate-transactions/src/wallet-manager.ts @@ -2,7 +2,7 @@ import { State } from "@arkecosystem/core-interfaces"; import { Wallets } from "@arkecosystem/core-state"; import { IBridgechainWalletAttributes, IBusinessWalletAttributes } from "./interfaces"; -export enum MarketplaceIndex { +export enum MagistrateIndex { Businesses = "businesses", Bridgechains = "bridgechains", } diff --git a/packages/core-magistrate-transactions/tsconfig.json b/packages/core-magistrate-transactions/tsconfig.json new file mode 100644 index 0000000000..0b089c5fa8 --- /dev/null +++ b/packages/core-magistrate-transactions/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src/**/**.ts"] +} diff --git a/packages/core-marketplace/src/index.ts b/packages/core-marketplace/src/index.ts deleted file mode 100644 index 8b4aa1f1f8..0000000000 --- a/packages/core-marketplace/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./plugin"; - -import * as Builders from "./builders"; -import * as Interfaces from "./interfaces"; -export { Interfaces, Builders }; diff --git a/packages/core-transaction-pool/src/connection.ts b/packages/core-transaction-pool/src/connection.ts index b7eb009c99..89e5f7d52d 100644 --- a/packages/core-transaction-pool/src/connection.ts +++ b/packages/core-transaction-pool/src/connection.ts @@ -354,11 +354,13 @@ export class Connection implements TransactionPool.IConnection { ): Promise { await this.purgeExpired(); - let data: Interfaces.ITransaction[] = []; + const data: Interfaces.ITransaction[] = []; let transactionBytes: number = 0; - const tempWalletManager: Wallets.TempWalletManager = new Wallets.TempWalletManager(this.databaseService.walletManager); + const tempWalletManager: Wallets.TempWalletManager = new Wallets.TempWalletManager( + this.databaseService.walletManager, + ); let i = 0; // Copy the returned array because validateTransactions() in the loop body we may remove entries. @@ -472,7 +474,7 @@ export class Connection implements TransactionPool.IConnection { */ private async validateTransactions( transactions: Interfaces.ITransaction[], - walletManager?: Wallets.TempWalletManager + walletManager?: Wallets.TempWalletManager, ): Promise { const validTransactions: Interfaces.ITransaction[] = []; const forgedIds: string[] = await this.removeForgedTransactions(transactions); diff --git a/packages/core/bin/config/devnet/plugins.js b/packages/core/bin/config/devnet/plugins.js index ede1438282..893987636a 100644 --- a/packages/core/bin/config/devnet/plugins.js +++ b/packages/core/bin/config/devnet/plugins.js @@ -2,7 +2,7 @@ module.exports = { "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, - "@arkecosystem/core-marketplace":{}, + "@arkecosystem/core-magistrate-transactions": {}, "@arkecosystem/core-database-postgres": { connection: { host: process.env.CORE_DB_HOST || "localhost", diff --git a/packages/core/bin/config/mainnet/plugins.js b/packages/core/bin/config/mainnet/plugins.js index 6847d249f7..001d7b13f8 100644 --- a/packages/core/bin/config/mainnet/plugins.js +++ b/packages/core/bin/config/mainnet/plugins.js @@ -2,7 +2,7 @@ module.exports = { "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, - "@arkecosystem/core-marketplace":{}, + "@arkecosystem/core-magistrate-transactions": {}, "@arkecosystem/core-database-postgres": { connection: { host: process.env.CORE_DB_HOST || "localhost", diff --git a/packages/core/bin/config/testnet/plugins.js b/packages/core/bin/config/testnet/plugins.js index ff5ba6e30f..ec0c862416 100644 --- a/packages/core/bin/config/testnet/plugins.js +++ b/packages/core/bin/config/testnet/plugins.js @@ -2,7 +2,7 @@ module.exports = { "@arkecosystem/core-event-emitter": {}, "@arkecosystem/core-logger-pino": {}, "@arkecosystem/core-state": {}, - "@arkecosystem/core-marketplace":{}, + "@arkecosystem/core-magistrate-transactions": {}, "@arkecosystem/core-database-postgres": { connection: { host: process.env.CORE_DB_HOST || "localhost", From b6bc4b48b81479f80c602f15df9500128b629519 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Sat, 28 Sep 2019 04:03:54 +0200 Subject: [PATCH 02/20] feat(core): allow CLI command configurations (#2972) --- .../core-container/__stubs__/config/app.js | 39 +++++++++++++++++++ __tests__/utils/config/testnet/app.js | 39 +++++++++++++++++++ __tests__/utils/config/unitnet/app.js | 39 +++++++++++++++++++ packages/core-api/src/handlers/index.ts | 2 +- packages/core/bin/config/devnet/app.js | 39 +++++++++++++++++++ packages/core/bin/config/mainnet/app.js | 39 +++++++++++++++++++ packages/core/bin/config/testnet/app.js | 39 +++++++++++++++++++ packages/core/package.json | 3 ++ packages/core/src/commands/core/run.ts | 23 +++++++---- packages/core/src/commands/forger/run.ts | 30 ++++++++------ packages/core/src/commands/relay/run.ts | 22 +++++++---- packages/core/src/helpers/replay.ts | 30 ++++++++------ packages/core/src/helpers/snapshot.ts | 24 +++++++----- packages/core/src/utils.ts | 19 ++++++++- 14 files changed, 336 insertions(+), 51 deletions(-) create mode 100644 __tests__/unit/core-container/__stubs__/config/app.js create mode 100644 __tests__/utils/config/testnet/app.js create mode 100644 __tests__/utils/config/unitnet/app.js create mode 100644 packages/core/bin/config/devnet/app.js create mode 100644 packages/core/bin/config/mainnet/app.js create mode 100644 packages/core/bin/config/testnet/app.js diff --git a/__tests__/unit/core-container/__stubs__/config/app.js b/__tests__/unit/core-container/__stubs__/config/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/__tests__/unit/core-container/__stubs__/config/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/__tests__/utils/config/testnet/app.js b/__tests__/utils/config/testnet/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/__tests__/utils/config/testnet/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/__tests__/utils/config/unitnet/app.js b/__tests__/utils/config/unitnet/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/__tests__/utils/config/unitnet/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/packages/core-api/src/handlers/index.ts b/packages/core-api/src/handlers/index.ts index c777dc274d..a15596cd04 100644 --- a/packages/core-api/src/handlers/index.ts +++ b/packages/core-api/src/handlers/index.ts @@ -22,7 +22,7 @@ export = { } // TODO: hook into core-api instead in V3 - if (app.has("core-marketplace")) { + if (app.has("core-magistrate-transactions")) { Businesses.register(server); Bridgechains.register(server); } diff --git a/packages/core/bin/config/devnet/app.js b/packages/core/bin/config/devnet/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/packages/core/bin/config/devnet/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/packages/core/bin/config/mainnet/app.js b/packages/core/bin/config/mainnet/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/packages/core/bin/config/mainnet/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/packages/core/bin/config/testnet/app.js b/packages/core/bin/config/testnet/app.js new file mode 100644 index 0000000000..e14163f34a --- /dev/null +++ b/packages/core/bin/config/testnet/app.js @@ -0,0 +1,39 @@ +module.exports = { + cli: { + core: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + relay: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + forger: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + chain: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + snapshot: { + run: { + plugins: { + include: ["@arkecosystem/core-magistrate-transactions"], + }, + }, + }, + }, +} \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 1a533c28bb..57d54f6aa9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -76,6 +76,8 @@ "cli-table3": "^0.5.1", "cli-ux": "^5.3.1", "dayjs": "^1.8.15", + "deepmerge": "^4.0.0", + "dottie": "^2.0.1", "env-paths": "^2.2.0", "envfile": "^3.0.0", "execa": "^2.0.3", @@ -96,6 +98,7 @@ "@types/bip39": "^2.4.2", "@types/bytebuffer": "^5.0.40", "@types/cli-progress": "^1.8.1", + "@types/dottie": "^2.0.3", "@types/execa": "^0.9.0", "@types/fast-levenshtein": "^0.0.1", "@types/fs-extra": "^8.0.0", diff --git a/packages/core/src/commands/core/run.ts b/packages/core/src/commands/core/run.ts index be58a86058..991501c387 100644 --- a/packages/core/src/commands/core/run.ts +++ b/packages/core/src/commands/core/run.ts @@ -1,6 +1,8 @@ import { app } from "@arkecosystem/core-container"; import { flags } from "@oclif/command"; +import deepmerge from "deepmerge"; import { CommandFlags } from "../../types"; +import { getCliConfig } from "../../utils"; import { BaseCommand } from "../command"; export class RunCommand extends BaseCommand { @@ -43,14 +45,19 @@ $ ark core:run --launchMode=seed public async run(): Promise { const { flags } = await this.parseWithNetwork(RunCommand); - await this.buildApplication(app, flags, { - options: { - "@arkecosystem/core-p2p": this.buildPeerOptions(flags), - "@arkecosystem/core-blockchain": { - networkStart: flags.networkStart, + await this.buildApplication( + app, + flags, + deepmerge(getCliConfig(flags), { + exclude: [], + options: { + "@arkecosystem/core-p2p": this.buildPeerOptions(flags), + "@arkecosystem/core-blockchain": { + networkStart: flags.networkStart, + }, + "@arkecosystem/core-forger": await this.buildBIP38(flags), }, - "@arkecosystem/core-forger": await this.buildBIP38(flags), - }, - }); + }), + ); } } diff --git a/packages/core/src/commands/forger/run.ts b/packages/core/src/commands/forger/run.ts index 976c5a37a6..26e16367fe 100644 --- a/packages/core/src/commands/forger/run.ts +++ b/packages/core/src/commands/forger/run.ts @@ -1,6 +1,8 @@ import { app } from "@arkecosystem/core-container"; import { flags } from "@oclif/command"; +import deepmerge from "deepmerge"; import { CommandFlags } from "../../types"; +import { getCliConfig } from "../../utils"; import { BaseCommand } from "../command"; export class RunCommand extends BaseCommand { @@ -26,17 +28,21 @@ $ ark forger:run --bip38="..." --password="..." public async run(): Promise { const { flags } = await this.parseWithNetwork(RunCommand); - await this.buildApplication(app, flags, { - include: [ - "@arkecosystem/core-event-emitter", - "@arkecosystem/core-config", - "@arkecosystem/core-logger", - "@arkecosystem/core-logger-pino", - "@arkecosystem/core-forger", - ], - options: { - "@arkecosystem/core-forger": await this.buildBIP38(flags), - }, - }); + await this.buildApplication( + app, + flags, + deepmerge(getCliConfig(flags), { + include: [ + "@arkecosystem/core-event-emitter", + "@arkecosystem/core-config", + "@arkecosystem/core-logger", + "@arkecosystem/core-logger-pino", + "@arkecosystem/core-forger", + ], + options: { + "@arkecosystem/core-forger": await this.buildBIP38(flags), + }, + }), + ); } } diff --git a/packages/core/src/commands/relay/run.ts b/packages/core/src/commands/relay/run.ts index d65984c8d5..3c951f35a2 100644 --- a/packages/core/src/commands/relay/run.ts +++ b/packages/core/src/commands/relay/run.ts @@ -1,6 +1,8 @@ import { app } from "@arkecosystem/core-container"; import { flags } from "@oclif/command"; +import deepmerge from "deepmerge"; import { CommandFlags } from "../../types"; +import { getCliConfig } from "../../utils"; import { BaseCommand } from "../command"; export class RunCommand extends BaseCommand { @@ -42,14 +44,18 @@ $ ark relay:run --launchMode=seed public async run(): Promise { const { flags } = await this.parseWithNetwork(RunCommand); - await super.buildApplication(app, flags, { - exclude: ["@arkecosystem/core-forger"], - options: { - "@arkecosystem/core-p2p": this.buildPeerOptions(flags), - "@arkecosystem/core-blockchain": { - networkStart: flags.networkStart, + await super.buildApplication( + app, + flags, + deepmerge(getCliConfig(flags), { + exclude: ["@arkecosystem/core-forger"], + options: { + "@arkecosystem/core-p2p": this.buildPeerOptions(flags), + "@arkecosystem/core-blockchain": { + networkStart: flags.networkStart, + }, }, - }, - }); + }), + ); } } diff --git a/packages/core/src/helpers/replay.ts b/packages/core/src/helpers/replay.ts index a122544258..1ee8ec4a73 100644 --- a/packages/core/src/helpers/replay.ts +++ b/packages/core/src/helpers/replay.ts @@ -1,22 +1,28 @@ import { app } from "@arkecosystem/core-container"; import { Container } from "@arkecosystem/core-interfaces"; +import deepmerge from "deepmerge"; +import { getCliConfig } from "../utils"; // tslint:disable-next-line:no-var-requires const { version } = require("../../package.json"); export const setUpLite = async (options): Promise => { - await app.setUp(version, options, { - options: { - "@arkecosystem/core-blockchain": { replay: true }, - }, - include: [ - "@arkecosystem/core-event-emitter", - "@arkecosystem/core-logger-pino", - "@arkecosystem/core-state", - "@arkecosystem/core-database-postgres", - "@arkecosystem/core-blockchain", - ], - }); + await app.setUp( + version, + options, + deepmerge(getCliConfig(options), { + options: { + "@arkecosystem/core-blockchain": { replay: true }, + }, + include: [ + "@arkecosystem/core-event-emitter", + "@arkecosystem/core-logger-pino", + "@arkecosystem/core-state", + "@arkecosystem/core-database-postgres", + "@arkecosystem/core-blockchain", + ], + }), + ); return app; }; diff --git a/packages/core/src/helpers/snapshot.ts b/packages/core/src/helpers/snapshot.ts index ca0a996350..4416beae9f 100644 --- a/packages/core/src/helpers/snapshot.ts +++ b/packages/core/src/helpers/snapshot.ts @@ -1,22 +1,28 @@ import { app } from "@arkecosystem/core-container"; import { Container } from "@arkecosystem/core-interfaces"; +import deepmerge from "deepmerge"; import { lstatSync, readdirSync } from "fs"; import prompts from "prompts"; import { CommandFlags } from "../types"; +import { getCliConfig } from "../utils"; // tslint:disable-next-line:no-var-requires const { version } = require("../../package.json"); 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", - "@arkecosystem/core-snapshots", - ], - }); + await app.setUp( + version, + options, + deepmerge(getCliConfig(options), { + include: [ + "@arkecosystem/core-event-emitter", + "@arkecosystem/core-logger-pino", + "@arkecosystem/core-state", + "@arkecosystem/core-database-postgres", + "@arkecosystem/core-snapshots", + ], + }), + ); return app; }; diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index e690341190..0676a9a730 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -1,7 +1,9 @@ import Table from "cli-table3"; +import dottie from "dottie"; import envfile from "envfile"; import { writeFileSync } from "fs-extra"; import { existsSync } from "fs-extra"; +import { resolve } from "path"; import { EnvironmentVars } from "./types"; export const renderTable = (head: string[], callback: any): void => { @@ -17,7 +19,7 @@ export const renderTable = (head: string[], callback: any): void => { export const updateEnvironmentVariables = (envFile: string, variables: EnvironmentVars): void => { if (!existsSync(envFile)) { - this.error(`No environment file found at ${envFile}`); + throw new Error(`No environment file found at ${envFile}`); } const env: Record = envfile.parseFileSync(envFile); @@ -28,3 +30,18 @@ export const updateEnvironmentVariables = (envFile: string, variables: Environme writeFileSync(envFile, envfile.stringifySync(env)); }; + +export const getCliConfig = (options: Record, defaultValue = {}): Record => { + const configPath: string = `${process.env.CORE_PATH_CONFIG}/app.js`; + if (!existsSync(configPath)) { + return defaultValue; + } + + const key: string = `cli.${options.suffix}.run.plugins`; + const configuration = require(resolve(configPath)); + if (!dottie.exists(configuration, key)) { + return defaultValue; + } + + return dottie.get(configuration, key); +}; From 16591dd16ef1b9f70d3857237e42a506606b0174 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Sat, 28 Sep 2019 04:40:37 +0200 Subject: [PATCH 03/20] fix(core-api): missing orderBy (#2974) --- .../core-api/handlers/locks.test.ts | 33 +++++++- .../core-api/handlers/wallets.test.ts | 75 +++++++++++++++++++ .../src/handlers/locks/transformer.ts | 5 +- .../core-api/src/handlers/wallets/methods.ts | 1 + .../core-api/src/handlers/wallets/schema.ts | 11 +++ .../src/handlers/wallets/transformer.ts | 3 + .../src/repositories/utils/sort-entries.ts | 2 +- .../wallets-business-repository.ts | 10 +-- 8 files changed, 132 insertions(+), 8 deletions(-) diff --git a/__tests__/integration/core-api/handlers/locks.test.ts b/__tests__/integration/core-api/handlers/locks.test.ts index f1a01e97cb..3152e02445 100644 --- a/__tests__/integration/core-api/handlers/locks.test.ts +++ b/__tests__/integration/core-api/handlers/locks.test.ts @@ -19,6 +19,9 @@ describe("API 2.0 - Locks", () => { walletManager.findByAddress(Identities.Address.fromPassphrase("1")), walletManager.findByAddress(Identities.Address.fromPassphrase("2")), walletManager.findByAddress(Identities.Address.fromPassphrase("3")), + walletManager.findByAddress(Identities.Address.fromPassphrase("4")), + walletManager.findByAddress(Identities.Address.fromPassphrase("5")), + walletManager.findByAddress(Identities.Address.fromPassphrase("6")), ]; lockIds = []; @@ -33,7 +36,7 @@ describe("API 2.0 - Locks", () => { lockIds.push(transaction.id); locks[transaction.id] = { - amount: Utils.BigNumber.make(10), + amount: Utils.BigNumber.make(10 * (j + 1)), recipientId: wallet.address, secretHash: transaction.id, expiration: { @@ -80,6 +83,34 @@ describe("API 2.0 - Locks", () => { expect(response.data.data).not.toBeEmpty(); expect(response.data.data.every(lock => lock.expirationType === 2)).toBeTrue(); }); + + describe("orderBy", () => { + it("should be ordered by amount:desc", async () => { + const response = await utils.request("GET", "locks", { orderBy: "amount:desc", expirationType: 2 }); + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + + for (let i = 0; i < response.data.data.length - 1; i++) { + const lockA = response.data.data[i]; + const lockB = response.data.data[i + 1]; + + expect(Utils.BigNumber.make(lockA.amount).isGreaterThanOrEqualTo(lockB.amount)).toBeTrue(); + } + }); + + it("should be ordered by amount:ascs", async () => { + const response = await utils.request("GET", "locks", { orderBy: "amount:asc", expirationType: 2 }); + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + + for (let i = 0; i < response.data.data.length - 1; i++) { + const lockA = response.data.data[i]; + const lockB = response.data.data[i + 1]; + + expect(Utils.BigNumber.make(lockA.amount).isLessThanOrEqualTo(lockB.amount)).toBeTrue(); + } + }); + }); }); describe("GET /locks/:id", () => { diff --git a/__tests__/integration/core-api/handlers/wallets.test.ts b/__tests__/integration/core-api/handlers/wallets.test.ts index 70e033b1e8..cd61851670 100644 --- a/__tests__/integration/core-api/handlers/wallets.test.ts +++ b/__tests__/integration/core-api/handlers/wallets.test.ts @@ -1,5 +1,9 @@ import "../../../utils"; +import { app } from "@arkecosystem/core-container"; +import { Database, State } from "@arkecosystem/core-interfaces"; +import { Identities, Utils } from "@arkecosystem/crypto"; +import { genesisBlock } from "../../../utils/fixtures/testnet/block-model"; import { setUp, tearDown } from "../__support__/setup"; import { utils } from "../utils"; @@ -127,6 +131,77 @@ describe("API 2.0 - Wallets", () => { }); }); + describe("GET /wallets/:id/locks", () => { + let walletManager: State.IWalletManager; + let wallets; + let lockIds; + + beforeAll(() => { + walletManager = app.resolvePlugin("database").walletManager; + + wallets = [ + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("1")), + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("2")), + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("3")), + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("4")), + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("5")), + walletManager.findByPublicKey(Identities.PublicKey.fromPassphrase("6")), + ]; + + lockIds = []; + + for (let i = 0; i < wallets.length; i++) { + const wallet = wallets[i]; + const transactions = genesisBlock.transactions.slice(i * 10, i * 10 + i + 1); + + const locks = {}; + for (let j = 0; j < transactions.length; j++) { + const transaction = transactions[j]; + lockIds.push(transaction.id); + + locks[transaction.id] = { + amount: Utils.BigNumber.make(10 * (j + 1)), + recipientId: wallet.address, + secretHash: transaction.id, + expiration: { + type: j % 2 === 0 ? 1 : 2, + value: 100 * (j + 1), + }, + }; + } + + wallet.setAttribute("htlc.locks", locks); + } + + walletManager.index(wallets); + }); + + it("should GET all locks for the given wallet by id", async () => { + const response = await utils.request("GET", `wallets/${wallets[0].address}/locks`); + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + expect(response.data.data).toHaveLength(1); + utils.expectLock(response.data.data[0]); + }); + + it("should fail to GET locks for the given wallet if it doesn't exist", async () => { + utils.expectError(await utils.request("GET", "wallets/fake-address/locks"), 404); + }); + + it("should GET all locks for the given wallet in the given order", async () => { + const response = await utils.request("GET", `wallets/${wallets[5].address}/locks`, { + orderBy: "amount:desc", + }); + + for (let i = 0; i < response.data.data.length - 1; i++) { + const lockA = response.data.data[i]; + const lockB = response.data.data[i + 1]; + + expect(Utils.BigNumber.make(lockA.amount).isGreaterThanOrEqualTo(lockB.amount)).toBeTrue(); + } + }); + }); + describe("POST /wallets/search", () => { it("should POST a search for wallets with the exact specified address", async () => { const response = await utils.request("POST", "wallets/search", { diff --git a/packages/core-api/src/handlers/locks/transformer.ts b/packages/core-api/src/handlers/locks/transformer.ts index e9a7c107a1..8fc59897a6 100644 --- a/packages/core-api/src/handlers/locks/transformer.ts +++ b/packages/core-api/src/handlers/locks/transformer.ts @@ -1,5 +1,8 @@ import { Interfaces } from "@arkecosystem/crypto"; export const transformLock = (lock: Interfaces.IHtlcLock) => { - return lock; + return { + ...lock, + amount: lock.amount.toFixed(), + }; }; diff --git a/packages/core-api/src/handlers/wallets/methods.ts b/packages/core-api/src/handlers/wallets/methods.ts index 88489fe86d..62facc5662 100644 --- a/packages/core-api/src/handlers/wallets/methods.ts +++ b/packages/core-api/src/handlers/wallets/methods.ts @@ -127,6 +127,7 @@ const locks = async request => { const rows = databaseService.wallets.search(Database.SearchScope.Locks, { ...request.params, + ...request.query, ...paginate(request), senderPublicKey: wallet.publicKey, }); diff --git a/packages/core-api/src/handlers/wallets/schema.ts b/packages/core-api/src/handlers/wallets/schema.ts index 14bf80cb8c..460408736b 100644 --- a/packages/core-api/src/handlers/wallets/schema.ts +++ b/packages/core-api/src/handlers/wallets/schema.ts @@ -185,6 +185,9 @@ export const locks: object = { }, query: { ...pagination, + ...{ + orderBy: Joi.string(), + }, }, }; @@ -227,5 +230,13 @@ export const search: object = { .integer() .min(0), }), + lockedBalance: Joi.object().keys({ + from: Joi.number() + .integer() + .min(0), + to: Joi.number() + .integer() + .min(0), + }), }, }; diff --git a/packages/core-api/src/handlers/wallets/transformer.ts b/packages/core-api/src/handlers/wallets/transformer.ts index f8b3500b8d..d6ad44e8df 100644 --- a/packages/core-api/src/handlers/wallets/transformer.ts +++ b/packages/core-api/src/handlers/wallets/transformer.ts @@ -12,6 +12,9 @@ export const transformWallet = (wallet: State.IWallet) => { nonce: wallet.nonce.toFixed(), secondPublicKey: wallet.getAttribute("secondPublicKey"), balance: Utils.BigNumber.make(wallet.balance).toFixed(), + lockedBalance: wallet.hasAttribute("htlc.lockedBalance") + ? wallet.getAttribute("htlc.lockedBalance").toFixed() + : undefined, isDelegate: !!username, isResigned: !!wallet.getAttribute("delegate.resigned"), vote: wallet.getAttribute("vote"), diff --git a/packages/core-database/src/repositories/utils/sort-entries.ts b/packages/core-database/src/repositories/utils/sort-entries.ts index c55ccc3cff..d8a9497ec4 100644 --- a/packages/core-database/src/repositories/utils/sort-entries.ts +++ b/packages/core-database/src/repositories/utils/sort-entries.ts @@ -11,7 +11,7 @@ export const sortEntries = >( ): T[] => { const [iteratee, order] = params.orderBy ? params.orderBy : defaultOrder; - if (["balance", "voteBalance"].includes(iteratee)) { + if (["balance", "voteBalance", "lockedBalance", "amount"].includes(iteratee)) { return Object.values(entries).sort((a: T, b: T) => { const iterateeA: Utils.BigNumber = getProperty(a, iteratee) || Utils.BigNumber.ZERO; const iterateeB: Utils.BigNumber = getProperty(b, iteratee) || Utils.BigNumber.ZERO; diff --git a/packages/core-database/src/repositories/wallets-business-repository.ts b/packages/core-database/src/repositories/wallets-business-repository.ts index b2752593bb..ba1f078424 100644 --- a/packages/core-database/src/repositories/wallets-business-repository.ts +++ b/packages/core-database/src/repositories/wallets-business-repository.ts @@ -1,6 +1,6 @@ import { Database, State } from "@arkecosystem/core-interfaces"; import { delegateCalculator, hasSomeProperty } from "@arkecosystem/core-utils"; -import { Interfaces } from "@arkecosystem/crypto"; +import { Interfaces, Utils } from "@arkecosystem/crypto"; import { searchEntries } from "./utils/search-entries"; interface ISearchContext { @@ -12,7 +12,7 @@ interface ISearchContext { interface IUnwrappedHtlcLock { lockId: string; senderPublicKey: string; - amount: string; + amount: Utils.BigNumber; recipientId: string; secretHash: string; expirationType: number; @@ -20,7 +20,7 @@ interface IUnwrappedHtlcLock { } export class WalletsBusinessRepository implements Database.IWalletsBusinessRepository { - public constructor(private readonly databaseServiceProvider: () => Database.IDatabaseService) {} + public constructor(private readonly databaseServiceProvider: () => Database.IDatabaseService) { } public search(scope: Database.SearchScope, params: Database.IParameters = {}): Database.IRowsPaginated { let searchContext: ISearchContext; @@ -90,7 +90,7 @@ export class WalletsBusinessRepository implements Database.IWalletsBusinessRepos private searchWallets(params: Database.IParameters): ISearchContext { const query: Record = { exact: ["address", "publicKey", "secondPublicKey", "username", "vote"], - between: ["balance", "voteBalance"], + between: ["balance", "voteBalance", "lockedBalance"], }; if (params.addresses) { @@ -194,7 +194,7 @@ export class WalletsBusinessRepository implements Database.IWalletsBusinessRepos const lock: Interfaces.IHtlcLock = locks[lockId]; return { lockId, - amount: lock.amount.toFixed(), + amount: lock.amount, secretHash: lock.secretHash, senderPublicKey: wallet.publicKey, recipientId: lock.recipientId, From 3827138163a2005377d94d1cd5dd79419a2bb802 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:24:28 +0300 Subject: [PATCH 04/20] fix(deps): update dependency winston-daily-rotate-file to v4 (#2992) Co-authored-by: Renovate Bot --- packages/core-logger-winston/package.json | 2 +- yarn.lock | 40 +++++------------------ 2 files changed, 10 insertions(+), 32 deletions(-) diff --git a/packages/core-logger-winston/package.json b/packages/core-logger-winston/package.json index 457d148581..2610f96974 100644 --- a/packages/core-logger-winston/package.json +++ b/packages/core-logger-winston/package.json @@ -26,7 +26,7 @@ "colors": "^1.3.3", "dayjs": "^1.8.15", "winston": "^3.2.1", - "winston-daily-rotate-file": "^3.10.0", + "winston-daily-rotate-file": "^4.0.0", "winston-transport": "^4.3.0" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 6da7acbee3..18024a3a6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4945,10 +4945,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cycle@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -5807,9 +5803,10 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-stream-rotator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz#09f67b86d6ea589d20b7852c51c59de55d916d6d" +file-stream-rotator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/file-stream-rotator/-/file-stream-rotator-0.5.5.tgz#61701413100ec866e302094f794304df535dbacb" + integrity sha512-XzvE1ogpxUbARtZPZLICaDRAeWxoQLFMKS3ZwADoCQmurKEwuDD2jEfDVPm/R1HeKYsRYEl9PzVIezjQ3VTTPQ== dependencies: moment "^2.11.2" @@ -8108,16 +8105,6 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -logform@^1.6.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-1.10.0.tgz#c9d5598714c92b546e23f4e78147c40f1e02012e" - dependencies: - colors "^1.2.1" - fast-safe-stringify "^2.0.4" - fecha "^2.3.3" - ms "^2.1.1" - triple-beam "^1.2.0" - logform@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/logform/-/logform-2.1.2.tgz#957155ebeb67a13164069825ce67ddb5bb2dd360" @@ -12208,23 +12195,14 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -winston-compat@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/winston-compat/-/winston-compat-0.1.4.tgz#599b4ce807ffe728713ecc25ede3f6b89425b739" - dependencies: - cycle "~1.0.3" - logform "^1.6.0" - triple-beam "^1.2.0" - -winston-daily-rotate-file@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz#c49047d227f82a1f191c8298772aaeb7b67d5906" +winston-daily-rotate-file@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/winston-daily-rotate-file/-/winston-daily-rotate-file-4.1.0.tgz#bddd2e932d60cde96a4a3c437fa39acdc909b475" + integrity sha512-Y3wcdrgNwC75Lc2BiFDZUyfxNjyhqVzEou8uOyZMUkDJ23/UN+rq8arpJDaXwX512GIM7g6NpTDPac29fsCvcQ== dependencies: - file-stream-rotator "^0.4.1" + file-stream-rotator "^0.5.5" object-hash "^1.3.0" - semver "^6.2.0" triple-beam "^1.3.0" - winston-compat "^0.1.4" winston-transport "^4.2.0" winston-transport@^4.2.0, winston-transport@^4.3.0: From 109a750651df7ae3db9c016f0e1d64a538ab2ae4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:26:22 +0300 Subject: [PATCH 05/20] fix(deps): update dependency cli-progress to v3 (#2990) Co-authored-by: Renovate Bot --- packages/core/package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 57d54f6aa9..fb1e86fe0a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -72,7 +72,7 @@ "bytebuffer": "^5.0.1", "chalk": "^2.4.2", "clear": "^0.1.0", - "cli-progress": "^2.1.1", + "cli-progress": "^3.0.0", "cli-table3": "^0.5.1", "cli-ux": "^5.3.1", "dayjs": "^1.8.15", diff --git a/yarn.lock b/yarn.lock index 18024a3a6d..4704d9c553 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4303,9 +4303,10 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-progress@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-2.1.1.tgz#45ee1b143487c19043a3262131ccb4676f87f032" +cli-progress@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.1.0.tgz#908fafcbdb41dc3c272b8accdc51677a113782af" + integrity sha512-kyJpr4D/TJpxJbXvlv564Aaapsz02b/INF3Wh0F2+o+baeTzw5ylhUR6FyQh7M/nFEubD1QYkydVPBOYkYQfKA== dependencies: colors "^1.1.2" string-width "^2.1.1" From 48cdc2eaca7846f4f5743d3aba5083801fe21534 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:26:29 +0300 Subject: [PATCH 06/20] chore(deps): update dependency del-cli to v3 (#2986) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 147 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 143 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 3a4cf77f6e..4317d00b9c 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "codecov": "^3.5.0", "create-hash": "^1.2.0", "cross-env": "^5.2.0", - "del-cli": "^2.0.0", + "del-cli": "^3.0.0", "depcheck": "^0.8.3", "husky": "^3.0.0", "jest": "^24.8.0", diff --git a/yarn.lock b/yarn.lock index 4704d9c553..1bdf33575b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2007,10 +2007,31 @@ dependencies: methods "^1.1.2" +"@nodelib/fs.scandir@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" + integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== + dependencies: + "@nodelib/fs.stat" "2.0.2" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" + integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" +"@nodelib/fs.walk@^1.2.1": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" + integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== + dependencies: + "@nodelib/fs.scandir" "2.1.2" + fastq "^1.6.0" + "@oclif/color@^0.0.0": version "0.0.0" resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.0.0.tgz#54939bbd16d1387511bf1a48ccda1a417248e6a9" @@ -3473,6 +3494,11 @@ array-union@^1.0.1, array-union@^1.0.2: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.2.tgz#5fcc373920775723cfd64d65c64bef53bf9eba6d" @@ -5133,11 +5159,12 @@ degenerator@^1.0.4: escodegen "1.x.x" esprima "3.x.x" -del-cli@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-2.0.0.tgz#e9a778398863c26796d85409b9891f98b0122cd1" +del-cli@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-3.0.0.tgz#327a15d4c18d6b7e5c849a53ef0d17901bc28197" + integrity sha512-J4HDC2mpcN5aopya4VdkyiFXZaqAoo7ua9VpKbciX3DDUSbtJbPMc3ivggJsAAgS6EqonmbenIiMhBGtJPW9FA== dependencies: - del "^4.1.1" + del "^5.1.0" meow "^5.0.0" del@^4.1.1: @@ -5152,6 +5179,20 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + delay@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/delay/-/delay-4.3.0.tgz#efeebfb8f545579cb396b3a722443ec96d14c50e" @@ -5256,6 +5297,13 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dlv@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" @@ -5749,6 +5797,18 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" + integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== + dependencies: + "@nodelib/fs.stat" "^2.0.1" + "@nodelib/fs.walk" "^1.2.1" + glob-parent "^5.0.0" + is-glob "^4.0.1" + merge2 "^1.2.3" + micromatch "^4.0.2" + fast-json-parse@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" @@ -5777,6 +5837,13 @@ fast.js@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/fast.js/-/fast.js-0.1.1.tgz#7c024d55ae144882fbcee44b79005fe2dcabd9fe" +fastq@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" + integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + dependencies: + reusify "^1.0.0" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -6183,6 +6250,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -6212,6 +6286,20 @@ globalyzer@^0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" +globby@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -6291,6 +6379,11 @@ graceful-fs@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" +graceful-fs@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + graphlib@^2.1.1, graphlib@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc" @@ -6589,6 +6682,11 @@ ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -6872,7 +6970,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" dependencies: @@ -6922,6 +7020,11 @@ is-path-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c" +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + is-path-in-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" @@ -6940,6 +7043,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" + integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -9174,6 +9282,13 @@ p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" @@ -9416,6 +9531,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -10344,12 +10464,24 @@ retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" +reusify@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -10449,6 +10581,11 @@ run-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" From 785187f99e8b6ce74fa32299b193d66f933e92f0 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Sat, 28 Sep 2019 12:26:51 +0200 Subject: [PATCH 07/20] feat(core-api): find htlc unlock transactions (#2976) --- .../core-api/handlers/locks.test.ts | 23 +++++++++++++++++++ packages/core-api/src/defaults.ts | 1 + .../core-api/src/handlers/locks/controller.ts | 11 +++++++++ .../core-api/src/handlers/locks/methods.ts | 17 ++++++++++++++ .../core-api/src/handlers/locks/routes.ts | 9 ++++++++ .../core-api/src/handlers/locks/schema.ts | 20 ++++++++++++++++ .../src/queries/index.ts | 1 + .../transactions/find-by-htlc-locks.sql | 12 ++++++++++ .../src/repositories/transactions.ts | 4 ++++ .../transactions-business-repository.ts | 4 ++++ .../transactions-business-repository.ts | 2 ++ .../transactions-repository.ts | 2 ++ packages/core-snapshots/src/db/index.ts | 2 +- 13 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 packages/core-database-postgres/src/queries/transactions/find-by-htlc-locks.sql diff --git a/__tests__/integration/core-api/handlers/locks.test.ts b/__tests__/integration/core-api/handlers/locks.test.ts index 3152e02445..b9b167fa48 100644 --- a/__tests__/integration/core-api/handlers/locks.test.ts +++ b/__tests__/integration/core-api/handlers/locks.test.ts @@ -1,7 +1,9 @@ import "../../../utils"; import { app } from "@arkecosystem/core-container"; +import { Database } from '@arkecosystem/core-interfaces'; import { Identities, Utils } from "@arkecosystem/crypto"; +import { TransactionFactory } from '../../../helpers'; import { genesisBlock } from "../../../utils/fixtures/testnet/block-model"; import { setUp, tearDown } from "../__support__/setup"; import { utils } from "../utils"; @@ -153,4 +155,25 @@ describe("API 2.0 - Locks", () => { // TODO: more coverage }); + + describe("POST /locks/unlocked", () => { + it("should find matching transactions for the given lock ids", async () => { + const refundTransaction = TransactionFactory.htlcRefund({ + lockTransactionId: lockIds[0], + }).build()[0]; + + const databaseService = app.resolvePlugin("database"); + + jest.spyOn(databaseService.transactionsBusinessRepository, "findByHtlcLocks").mockResolvedValueOnce([refundTransaction as any]) + + const response = await utils.request("POST", "locks/unlocked", { + ids: [lockIds[0]], + }); + + expect(response).toBeSuccessfulResponse(); + expect(response.data.data).toBeArray(); + expect(response.data.data).toHaveLength(1); + expect(refundTransaction.id).toEqual(response.data.data[0].id); + }); + }); }); diff --git a/packages/core-api/src/defaults.ts b/packages/core-api/src/defaults.ts index f24f04ccc2..72c879b03f 100644 --- a/packages/core-api/src/defaults.ts +++ b/packages/core-api/src/defaults.ts @@ -53,6 +53,7 @@ export const defaults = { "/api/delegates/search", "/api/locks", "/api/locks/search", + "/api/locks/unlocked", "/api/peers", "/api/transactions", "/api/transactions/search", diff --git a/packages/core-api/src/handlers/locks/controller.ts b/packages/core-api/src/handlers/locks/controller.ts index 2532ec5bb2..1e81a69872 100644 --- a/packages/core-api/src/handlers/locks/controller.ts +++ b/packages/core-api/src/handlers/locks/controller.ts @@ -35,4 +35,15 @@ export class LocksController extends Controller { return Boom.badImplementation(error); } } + + public async unlocked(request: Hapi.Request, h: Hapi.ResponseToolkit) { + try { + // @ts-ignore + const data = await request.server.methods.v2.locks.unlocked(request); + + return super.respondWithCache(data, h); + } catch (error) { + return Boom.badImplementation(error); + } + } } diff --git a/packages/core-api/src/handlers/locks/methods.ts b/packages/core-api/src/handlers/locks/methods.ts index f4886b6880..001016b951 100644 --- a/packages/core-api/src/handlers/locks/methods.ts +++ b/packages/core-api/src/handlers/locks/methods.ts @@ -37,6 +37,18 @@ const search = async request => { return toPagination(locks, "lock"); }; +const unlocked = async request => { + const transactions = await databaseService.transactionsBusinessRepository.findByHtlcLocks(request.payload.ids); + + return toPagination( + { + count: transactions.length, + rows: transactions, + }, + "transaction", + ); +}; + export const registerMethods = server => { ServerCache.make(server) .method("v2.locks.index", index, 8, request => ({ @@ -48,5 +60,10 @@ export const registerMethods = server => { ...request.payload, ...request.query, ...paginate(request), + })) + .method("v2.locks.unlocked", unlocked, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), })); }; diff --git a/packages/core-api/src/handlers/locks/routes.ts b/packages/core-api/src/handlers/locks/routes.ts index ae3d26dd0c..2d9195950b 100644 --- a/packages/core-api/src/handlers/locks/routes.ts +++ b/packages/core-api/src/handlers/locks/routes.ts @@ -32,4 +32,13 @@ export const registerRoutes = (server: Hapi.Server): void => { validate: Schema.search, }, }); + + server.route({ + method: "POST", + path: "/locks/unlocked", + handler: controller.unlocked, + options: { + validate: Schema.unlocked, + }, + }); }; diff --git a/packages/core-api/src/handlers/locks/schema.ts b/packages/core-api/src/handlers/locks/schema.ts index e2180a6600..cb1438a01f 100644 --- a/packages/core-api/src/handlers/locks/schema.ts +++ b/packages/core-api/src/handlers/locks/schema.ts @@ -76,3 +76,23 @@ export const search: object = { }), }, }; + +export const unlocked: object = { + query: { + ...pagination, + ...{ + orderBy: Joi.string(), + }, + }, + payload: { + ids: Joi.array() + .unique() + .min(1) + .max(25) + .items( + Joi.string() + .hex() + .length(64), + ), + }, +}; diff --git a/packages/core-database-postgres/src/queries/index.ts b/packages/core-database-postgres/src/queries/index.ts index 7df8d19bcd..c019faf051 100644 --- a/packages/core-database-postgres/src/queries/index.ts +++ b/packages/core-database-postgres/src/queries/index.ts @@ -44,5 +44,6 @@ export const queries = { findById: loadQueryFile(__dirname, "./transactions/find-by-id.sql"), deleteByBlock: loadQueryFile(__dirname, "./transactions/delete-by-block.sql"), feeStatistics: loadQueryFile(__dirname, "./transactions/fee-statistics.sql"), + findByHtlcLocks: loadQueryFile(__dirname, "./transactions/find-by-htlc-locks.sql"), }, }; diff --git a/packages/core-database-postgres/src/queries/transactions/find-by-htlc-locks.sql b/packages/core-database-postgres/src/queries/transactions/find-by-htlc-locks.sql new file mode 100644 index 0000000000..d8ba036590 --- /dev/null +++ b/packages/core-database-postgres/src/queries/transactions/find-by-htlc-locks.sql @@ -0,0 +1,12 @@ +SELECT * +FROM transactions +WHERE + type IN (9, 10) +AND + type_group = 1 +AND +( + asset->'refund'->'lockTransactionId' ?| array[${ids}] +OR + asset->'claim'->'lockTransactionId' ?| array[${ids}] +) diff --git a/packages/core-database-postgres/src/repositories/transactions.ts b/packages/core-database-postgres/src/repositories/transactions.ts index c136fe699b..a40479dfcd 100644 --- a/packages/core-database-postgres/src/repositories/transactions.ts +++ b/packages/core-database-postgres/src/repositories/transactions.ts @@ -181,6 +181,10 @@ export class TransactionsRepository extends Repository implements Database.ITran return this.db.manyOrNone(queries.transactions.forged, { ids }); } + public async findByHtlcLocks(lockIds: string[]): Promise { + return this.db.manyOrNone(queries.transactions.findByHtlcLocks, { ids: lockIds }); + } + public async statistics(): Promise<{ count: number; totalFee: Utils.BigNumber; diff --git a/packages/core-database/src/repositories/transactions-business-repository.ts b/packages/core-database/src/repositories/transactions-business-repository.ts index 956aba026c..2b8f374c41 100644 --- a/packages/core-database/src/repositories/transactions-business-repository.ts +++ b/packages/core-database/src/repositories/transactions-business-repository.ts @@ -99,6 +99,10 @@ export class TransactionsBusinessRepository implements Database.ITransactionsBus return this.databaseServiceProvider().connection.transactionsRepository.getSentTransactions(); } + public async findByHtlcLocks(lockIds: string[]): Promise { + return this.databaseServiceProvider().connection.transactionsRepository.findByHtlcLocks(lockIds); + } + private getPublicKeyFromAddress(senderId: string): string { const { walletManager }: Database.IDatabaseService = this.databaseServiceProvider(); diff --git a/packages/core-interfaces/src/core-database/business-repository/transactions-business-repository.ts b/packages/core-interfaces/src/core-database/business-repository/transactions-business-repository.ts index 0cd598cd58..52ebeed5b7 100644 --- a/packages/core-interfaces/src/core-database/business-repository/transactions-business-repository.ts +++ b/packages/core-interfaces/src/core-database/business-repository/transactions-business-repository.ts @@ -29,6 +29,8 @@ export interface ITransactionsBusinessRepository { getSentTransactions(): Promise; + findByHtlcLocks(lockIds: string[]): Promise; + getFeeStatistics( days: number, ): Promise< diff --git a/packages/core-interfaces/src/core-database/database-repository/transactions-repository.ts b/packages/core-interfaces/src/core-database/database-repository/transactions-repository.ts index 28795b0089..228d91c91e 100644 --- a/packages/core-interfaces/src/core-database/database-repository/transactions-repository.ts +++ b/packages/core-interfaces/src/core-database/database-repository/transactions-repository.ts @@ -53,6 +53,8 @@ export interface ITransactionsRepository extends IRepository { forged(ids: string[]): Promise; + findByHtlcLocks(lockIds: string[]): Promise; + statistics(): Promise<{ count: number; totalFee: Utils.BigNumber; diff --git a/packages/core-snapshots/src/db/index.ts b/packages/core-snapshots/src/db/index.ts index 3e031383b9..f98e5dc42d 100644 --- a/packages/core-snapshots/src/db/index.ts +++ b/packages/core-snapshots/src/db/index.ts @@ -127,7 +127,7 @@ export class Database { end: endBlock.timestamp, }), rounds: rawQuery(this.pgp, queries.rounds.roundRange, { - startRound: startRound, + startRound, endRound: roundInfoEnd.round, }), }; From 1a046d424e78b11e3c682e11aa964a95d08d847c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:26:58 +0300 Subject: [PATCH 08/20] fix(deps): update dependency node-forge to ^0.9.0 (#2983) Co-authored-by: Renovate Bot --- packages/crypto/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/crypto/package.json b/packages/crypto/package.json index e49d19ed91..fbfc9ef04a 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -44,7 +44,7 @@ "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", "lodash.sumby": "^4.6.0", - "node-forge": "^0.8.5", + "node-forge": "^0.9.0", "otplib": "^11.0.1", "pluralize": "^8.0.0", "tiny-glob": "^0.2.6", From 9699a14c5363059dd909004a0ea21d85c1d812cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:27:05 +0300 Subject: [PATCH 09/20] chore(deps): update dependency @types/newrelic to v5 (#2984) Co-authored-by: Renovate Bot --- packages/core-new-relic/package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core-new-relic/package.json b/packages/core-new-relic/package.json index 668753db49..818f468dac 100644 --- a/packages/core-new-relic/package.json +++ b/packages/core-new-relic/package.json @@ -22,7 +22,7 @@ "newrelic": "^5.10.0" }, "devDependencies": { - "@types/newrelic": "^4.11.0" + "@types/newrelic": "^5.0.0" }, "engines": { "node": ">=10.x <11.0.0" diff --git a/yarn.lock b/yarn.lock index 1bdf33575b..22b395e1d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2921,9 +2921,10 @@ dependencies: "@types/node" "*" -"@types/newrelic@^4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@types/newrelic/-/newrelic-4.11.0.tgz#d023597a44bf5be5b68b52543cdc5f521f8f4da8" +"@types/newrelic@^5.0.0": + version "5.11.0" + resolved "https://registry.yarnpkg.com/@types/newrelic/-/newrelic-5.11.0.tgz#1cbc6afb2bf56c5fead8cb91549ba03696340d72" + integrity sha512-amiR95ClFvGC9gOT4TOu1MxgZEVc0OdLqfig4hRyS7OalRO336n9OIRorrNKfLOWP/qn63qOionweeKw8UyB5A== "@types/nock@^10.0.3": version "10.0.3" From 7aaa14343edcd88712283abc35364e40594988bd Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 30 Sep 2019 15:24:57 +0200 Subject: [PATCH 10/20] fix(core-snapshots): export/import transactions' type_group (#2996) --- packages/core-snapshots/src/db/index.ts | 1 + .../src/db/queries/transactions/timestamp-range.sql | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/core-snapshots/src/db/index.ts b/packages/core-snapshots/src/db/index.ts index f98e5dc42d..ad3eec24db 100644 --- a/packages/core-snapshots/src/db/index.ts +++ b/packages/core-snapshots/src/db/index.ts @@ -184,6 +184,7 @@ export class Database { "sender_public_key", "recipient_id", "type", + "type_group", "vendor_field_hex", "amount", "fee", diff --git a/packages/core-snapshots/src/db/queries/transactions/timestamp-range.sql b/packages/core-snapshots/src/db/queries/transactions/timestamp-range.sql index fe74813547..078c5c0182 100644 --- a/packages/core-snapshots/src/db/queries/transactions/timestamp-range.sql +++ b/packages/core-snapshots/src/db/queries/transactions/timestamp-range.sql @@ -7,6 +7,7 @@ SELECT sender_public_key, recipient_id, type, + type_group, vendor_field_hex, amount, fee, From 2323c4d12018680f104953d0733aebaab2d916a8 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Mon, 30 Sep 2019 21:21:42 +0200 Subject: [PATCH 11/20] feat: multiSignWif (#2979) --- .../__shared__/transaction-builder.ts | 15 ++++ .../builders/transactions/transaction.ts | 72 ++++++++++--------- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/__tests__/unit/crypto/transactions/builders/transactions/__shared__/transaction-builder.ts b/__tests__/unit/crypto/transactions/builders/transactions/__shared__/transaction-builder.ts index 1c0053e388..da0fc98a8b 100644 --- a/__tests__/unit/crypto/transactions/builders/transactions/__shared__/transaction-builder.ts +++ b/__tests__/unit/crypto/transactions/builders/transactions/__shared__/transaction-builder.ts @@ -197,5 +197,20 @@ export const transactionBuilder = >(provider: () expect(spySecondSign).toHaveBeenCalledWith((builder as any).getSigningObject(), identitySecond.keys); }); }); + + describe("multiSignWithWif", () => { + it("signs this transaction with the keys of a multisig wif", () => { + const spyKeys = jest.spyOn(Keys, "fromWIF").mockReturnValueOnce(identitySecond.keys); + const spyMultiSign = jest.spyOn(Signer, "multiSign").mockImplementationOnce(jest.fn()); + + const builder = provider(); + builder.senderPublicKey(identity.publicKey).network(23).multiSignWithWif(0, identitySecond.bip39, undefined); + + expect(spyKeys).toHaveBeenCalledWith(identitySecond.bip39, { + wif: 186, + }); + expect(spyMultiSign).toHaveBeenCalledWith((builder as any).getSigningObject(), identitySecond.keys, 0); + }); + }); }); }; diff --git a/packages/crypto/src/transactions/builders/transactions/transaction.ts b/packages/crypto/src/transactions/builders/transactions/transaction.ts index d28dfeca32..1094079a65 100644 --- a/packages/crypto/src/transactions/builders/transactions/transaction.ts +++ b/packages/crypto/src/transactions/builders/transactions/transaction.ts @@ -91,15 +91,7 @@ export abstract class TransactionBuilder Date: Mon, 30 Sep 2019 23:37:56 +0200 Subject: [PATCH 12/20] refactor: core-magistrate-crypto export namespaces (#2980) --- .../builders/bridgechain-registration.test.ts | 17 +++++++----- .../builders/bridgechain-resignation.test.ts | 8 +++--- .../builders/bridgechain-update.test.ts | 8 +++--- .../builders/business-registration.test.ts | 17 +++++++----- .../builders/business-resignation.test.ts | 8 +++--- .../builders/business-update.test.ts | 8 +++--- .../handlers/business-registration.test.ts | 6 +++-- .../core-magistrate/handlers/handlers.test.ts | 26 ++++++++++++++----- .../bridgechain-resignation.test.ts | 6 ++--- .../transactions/bridgechain-update.test.ts | 4 +-- .../business-registration.test.ts | 6 ++--- .../transactions/business-resgination.test.ts | 4 +-- .../transactions/business-update.test.ts | 6 ++--- .../src/handlers/bridgechains/transformer.ts | 1 - .../src/handlers/businesses/transformer.ts | 1 - packages/core-magistrate-crypto/src/index.ts | 6 ++--- .../src/handlers/bridgechain-registration.ts | 4 +-- .../src/handlers/bridgechain-resignation.ts | 4 +-- .../src/handlers/bridgechain-update.ts | 15 ++++++----- .../src/handlers/business-registration.ts | 4 +-- .../src/handlers/business-resignation.ts | 4 +-- .../src/handlers/business-update.ts | 13 +++++----- 22 files changed, 104 insertions(+), 72 deletions(-) diff --git a/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts index 357cd72671..fde13b2c3e 100644 --- a/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-registration.test.ts @@ -1,9 +1,11 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Enums, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Errors, Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { MagistrateTransactionType } from "../../../../packages/core-magistrate-crypto/src/enums"; -import { BridgechainRegistrationTransaction } from "../../../../packages/core-magistrate-crypto/src/transactions"; import { bridgechainRegistrationAsset1, bridgechainRegistrationAsset2, @@ -14,7 +16,7 @@ let builder: MagistrateBuilders.BridgechainRegistrationBuilder; describe("Bridgechain registration builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BridgechainRegistrationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BridgechainRegistrationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BridgechainRegistrationBuilder(); @@ -38,9 +40,12 @@ describe("Bridgechain registration builder", () => { describe("should test properties", () => { it("should have its specific properties", () => { - expect(builder).toHaveProperty("data.type", MagistrateTransactionType.BridgechainRegistration); + expect(builder).toHaveProperty("data.type", Enums.MagistrateTransactionType.BridgechainRegistration); expect(builder).toHaveProperty("data.amount", Utils.BigNumber.ZERO); - expect(builder).toHaveProperty("data.fee", BridgechainRegistrationTransaction.staticFee()); + expect(builder).toHaveProperty( + "data.fee", + MagistrateTransactions.BridgechainRegistrationTransaction.staticFee(), + ); expect(builder).toHaveProperty("data.recipientId", undefined); expect(builder).toHaveProperty("data.senderPublicKey", undefined); expect(builder).toHaveProperty("data.asset", { bridgechainRegistration: {} }); diff --git a/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts index 8230ea82d6..91838bdfcb 100644 --- a/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-resignation.test.ts @@ -1,14 +1,16 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; let builder: MagistrateBuilders.BridgechainResignationBuilder; describe("Bridgechain resignation builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BridgechainResignationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BridgechainResignationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BridgechainResignationBuilder(); diff --git a/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts b/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts index 80f74f0e25..566f2906ea 100644 --- a/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts +++ b/__tests__/unit/core-magistrate/builders/bridgechain-update.test.ts @@ -1,7 +1,9 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BridgechainUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; let builder: MagistrateBuilders.BridgechainUpdateBuilder; @@ -9,7 +11,7 @@ let builder: MagistrateBuilders.BridgechainUpdateBuilder; describe("Bridgechain update builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BridgechainUpdateTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BridgechainUpdateTransaction); beforeEach(() => { builder = new MagistrateBuilders.BridgechainUpdateBuilder(); diff --git a/__tests__/unit/core-magistrate/builders/business-registration.test.ts b/__tests__/unit/core-magistrate/builders/business-registration.test.ts index 4faf686141..bd239a73ca 100644 --- a/__tests__/unit/core-magistrate/builders/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-registration.test.ts @@ -1,15 +1,17 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Enums, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; let builder: MagistrateBuilders.BusinessRegistrationBuilder; describe("Business registration builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessRegistrationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessRegistrationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessRegistrationBuilder(); @@ -58,9 +60,12 @@ describe("Business registration builder", () => { describe("should test properties", () => { it("should have its specific properties", () => { - expect(builder).toHaveProperty("data.type", MagistrateTransactionType.BusinessRegistration); + expect(builder).toHaveProperty("data.type", Enums.MagistrateTransactionType.BusinessRegistration); expect(builder).toHaveProperty("data.amount", Utils.BigNumber.ZERO); - expect(builder).toHaveProperty("data.fee", BusinessRegistrationTransaction.staticFee()); + expect(builder).toHaveProperty( + "data.fee", + MagistrateTransactions.BusinessRegistrationTransaction.staticFee(), + ); expect(builder).toHaveProperty("data.recipientId", undefined); expect(builder).toHaveProperty("data.senderPublicKey", undefined); expect(builder).toHaveProperty("data.asset", { businessRegistration: {} }); diff --git a/__tests__/unit/core-magistrate/builders/business-resignation.test.ts b/__tests__/unit/core-magistrate/builders/business-resignation.test.ts index aa4bee0d44..b2c686ad10 100644 --- a/__tests__/unit/core-magistrate/builders/business-resignation.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-resignation.test.ts @@ -1,14 +1,16 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; let builder: MagistrateBuilders.BusinessResignationBuilder; describe("Business resignation builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessResignationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessResignationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessResignationBuilder(); diff --git a/__tests__/unit/core-magistrate/builders/business-update.test.ts b/__tests__/unit/core-magistrate/builders/business-update.test.ts index 011af20549..8f3fcf3d5c 100644 --- a/__tests__/unit/core-magistrate/builders/business-update.test.ts +++ b/__tests__/unit/core-magistrate/builders/business-update.test.ts @@ -1,14 +1,16 @@ import "jest-extended"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; let builder: MagistrateBuilders.BusinessUpdateBuilder; describe("Business update builder", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessUpdateTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessUpdateTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessUpdateBuilder(); diff --git a/__tests__/unit/core-magistrate/handlers/business-registration.test.ts b/__tests__/unit/core-magistrate/handlers/business-registration.test.ts index 9baf945f20..6e5fe4e25c 100644 --- a/__tests__/unit/core-magistrate/handlers/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/handlers/business-registration.test.ts @@ -1,8 +1,10 @@ import "jest-extended"; import { State } from "@arkecosystem/core-interfaces"; -import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; +import { + Builders as MagistrateBuilders, + Interfaces as MagistrateInterfaces, +} from "@arkecosystem/core-magistrate-crypto"; import { businessIndexer, MagistrateIndex } from "@arkecosystem/core-magistrate-transactions/src/wallet-manager"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; diff --git a/__tests__/unit/core-magistrate/handlers/handlers.test.ts b/__tests__/unit/core-magistrate/handlers/handlers.test.ts index 5c4335ae4a..0f5d03246b 100644 --- a/__tests__/unit/core-magistrate/handlers/handlers.test.ts +++ b/__tests__/unit/core-magistrate/handlers/handlers.test.ts @@ -1,6 +1,6 @@ import "jest-extended"; -import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; +import { Enums } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Managers } from "@arkecosystem/crypto"; import { @@ -24,12 +24,24 @@ describe("Registry test", () => { Handlers.Registry.registerTransactionHandler(BridgechainUpdateTransactionHandler); expect(() => { - Handlers.Registry.get(MagistrateTransactionType.BusinessRegistration, MagistrateTransactionGroup); - Handlers.Registry.get(MagistrateTransactionType.BusinessResignation, MagistrateTransactionGroup); - Handlers.Registry.get(MagistrateTransactionType.BridgechainRegistration, MagistrateTransactionGroup); - Handlers.Registry.get(MagistrateTransactionType.BridgechainResignation, MagistrateTransactionGroup); - Handlers.Registry.get(MagistrateTransactionType.BusinessUpdate, MagistrateTransactionGroup); - Handlers.Registry.get(MagistrateTransactionType.BridgechainUpdate, MagistrateTransactionGroup); + Handlers.Registry.get( + Enums.MagistrateTransactionType.BusinessRegistration, + Enums.MagistrateTransactionGroup, + ); + Handlers.Registry.get( + Enums.MagistrateTransactionType.BusinessResignation, + Enums.MagistrateTransactionGroup, + ); + Handlers.Registry.get( + Enums.MagistrateTransactionType.BridgechainRegistration, + Enums.MagistrateTransactionGroup, + ); + Handlers.Registry.get( + Enums.MagistrateTransactionType.BridgechainResignation, + Enums.MagistrateTransactionGroup, + ); + Handlers.Registry.get(Enums.MagistrateTransactionType.BusinessUpdate, Enums.MagistrateTransactionGroup); + Handlers.Registry.get(Enums.MagistrateTransactionType.BridgechainUpdate, Enums.MagistrateTransactionGroup); }).not.toThrowError(); }); }); diff --git a/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts b/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts index 3d17864ab3..2fe356cc63 100644 --- a/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts +++ b/__tests__/unit/core-magistrate/transactions/bridgechain-resignation.test.ts @@ -1,7 +1,7 @@ import "jest-extended"; import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; import { checkCommonFields } from "../helper"; @@ -9,7 +9,7 @@ let builder: MagistrateBuilders.BridgechainResignationBuilder; describe("Bridgechain registration transaction", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BridgechainResignationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BridgechainResignationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BridgechainResignationBuilder(); @@ -36,7 +36,7 @@ describe("Bridgechain registration transaction", () => { let transactionSchema; beforeAll(() => { - transactionSchema = BridgechainResignationTransaction.getSchema(); + transactionSchema = MagistrateTransactions.BridgechainResignationTransaction.getSchema(); }); it("should not throw any error", () => { diff --git a/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts b/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts index 392ec093bf..88297a12bb 100644 --- a/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts +++ b/__tests__/unit/core-magistrate/transactions/bridgechain-update.test.ts @@ -1,7 +1,7 @@ import "jest-extended"; import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BridgechainUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Utils } from "@arkecosystem/crypto"; import { checkCommonFields } from "../helper"; @@ -10,7 +10,7 @@ let builder: MagistrateBuilders.BridgechainUpdateBuilder; describe("Bridgechain update ser/deser", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BridgechainUpdateTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BridgechainUpdateTransaction); beforeEach(() => { builder = new MagistrateBuilders.BridgechainUpdateBuilder(); diff --git a/__tests__/unit/core-magistrate/transactions/business-registration.test.ts b/__tests__/unit/core-magistrate/transactions/business-registration.test.ts index cfd945a397..be174898b0 100644 --- a/__tests__/unit/core-magistrate/transactions/business-registration.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-registration.test.ts @@ -1,7 +1,7 @@ import "jest-extended"; import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; import { businessRegistrationAsset1, @@ -15,7 +15,7 @@ let builder: MagistrateBuilders.BusinessRegistrationBuilder; describe("Business registration transaction", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessRegistrationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessRegistrationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessRegistrationBuilder(); @@ -92,7 +92,7 @@ describe("Business registration transaction", () => { let transactionSchema; beforeAll(() => { - transactionSchema = BusinessRegistrationTransaction.getSchema(); + transactionSchema = MagistrateTransactions.BusinessRegistrationTransaction.getSchema(); }); it("should not throw any error ", () => { diff --git a/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts b/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts index 2455281a1f..5853ba5f6d 100644 --- a/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-resgination.test.ts @@ -1,7 +1,7 @@ import "jest-extended"; import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions } from "@arkecosystem/crypto"; import { checkCommonFields } from "../helper"; @@ -9,7 +9,7 @@ let builder: MagistrateBuilders.BusinessResignationBuilder; describe("Business resignation ser/deser", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessResignationTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessResignationTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessResignationBuilder(); diff --git a/__tests__/unit/core-magistrate/transactions/business-update.test.ts b/__tests__/unit/core-magistrate/transactions/business-update.test.ts index e222c6425c..c99c500928 100644 --- a/__tests__/unit/core-magistrate/transactions/business-update.test.ts +++ b/__tests__/unit/core-magistrate/transactions/business-update.test.ts @@ -1,7 +1,7 @@ import "jest-extended"; import { Builders as MagistrateBuilders } from "@arkecosystem/core-magistrate-crypto"; -import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Managers, Transactions, Validation as Ajv } from "@arkecosystem/crypto"; import { businessUpdateAsset1, businessUpdateAsset2, businessUpdateAsset3, checkCommonFields } from "../helper"; @@ -9,7 +9,7 @@ let builder: MagistrateBuilders.BusinessUpdateBuilder; describe("Business update transaction", () => { Managers.configManager.setFromPreset("testnet"); - Transactions.TransactionRegistry.registerTransactionType(BusinessUpdateTransaction); + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransactions.BusinessUpdateTransaction); beforeEach(() => { builder = new MagistrateBuilders.BusinessUpdateBuilder(); @@ -58,7 +58,7 @@ describe("Business update transaction", () => { let transactionSchema; beforeAll(() => { - transactionSchema = BusinessUpdateTransaction.getSchema(); + transactionSchema = MagistrateTransactions.BusinessUpdateTransaction.getSchema(); }); it("should not throw any error ", () => { diff --git a/packages/core-api/src/handlers/bridgechains/transformer.ts b/packages/core-api/src/handlers/bridgechains/transformer.ts index 0f49a12f3f..1c8b1caa82 100644 --- a/packages/core-api/src/handlers/bridgechains/transformer.ts +++ b/packages/core-api/src/handlers/bridgechains/transformer.ts @@ -1,4 +1,3 @@ -// TODO: move interfaces from core-marketplace into core-interfaces export const transformBridgechain = (bridgechain: any) => { return bridgechain; }; diff --git a/packages/core-api/src/handlers/businesses/transformer.ts b/packages/core-api/src/handlers/businesses/transformer.ts index 5447c79749..9f4fe3f51d 100644 --- a/packages/core-api/src/handlers/businesses/transformer.ts +++ b/packages/core-api/src/handlers/businesses/transformer.ts @@ -1,4 +1,3 @@ -// TODO: move interfaces from core-marketplace into core-interfaces export const transformBusiness = (business: any) => { return business; }; diff --git a/packages/core-magistrate-crypto/src/index.ts b/packages/core-magistrate-crypto/src/index.ts index b1f9dfcfec..215959e368 100644 --- a/packages/core-magistrate-crypto/src/index.ts +++ b/packages/core-magistrate-crypto/src/index.ts @@ -1,6 +1,6 @@ import * as Builders from "./builders"; +import * as Enums from "./enums"; import * as Interfaces from "./interfaces"; +import * as Transactions from "./transactions"; -export { MagistrateTransactionGroup, MagistrateTransactionStaticFees, MagistrateTransactionType } from "./enums"; -export { Builders, Interfaces }; -export * from "./transactions"; +export { Builders, Enums, Interfaces, Transactions }; diff --git a/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts index 4db165ac82..6572dd64d6 100644 --- a/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-registration.ts @@ -1,5 +1,5 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { BridgechainRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions, Utils } from "@arkecosystem/crypto"; import { BusinessIsResignedError, WalletIsNotBusinessError } from "../errors"; @@ -10,7 +10,7 @@ import { BusinessRegistrationTransactionHandler } from "./business-registration" export class BridgechainRegistrationTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BridgechainRegistrationTransaction; + return MagistrateTransactions.BridgechainRegistrationTransaction; } public dependencies(): ReadonlyArray { diff --git a/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts index 417b8222b5..5ba7912af2 100644 --- a/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-resignation.ts @@ -1,5 +1,5 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { BridgechainResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; @@ -15,7 +15,7 @@ import { BridgechainRegistrationTransactionHandler } from "./bridgechain-registr export class BridgechainResignationTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BridgechainResignationTransaction; + return MagistrateTransactions.BridgechainResignationTransaction; } public dependencies(): ReadonlyArray { diff --git a/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts b/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts index 9a40b542d9..c1bf81f618 100644 --- a/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts +++ b/packages/core-magistrate-transactions/src/handlers/bridgechain-update.ts @@ -1,7 +1,10 @@ import { app } from "@arkecosystem/core-container"; import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; -import { BridgechainUpdateTransaction, Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; +import { + Enums, + Interfaces as MagistrateInterfaces, + Transactions as MagistrateTransactions, +} from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { @@ -16,7 +19,7 @@ import { BridgechainRegistrationTransactionHandler } from "./bridgechain-registr export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BridgechainUpdateTransaction; + return MagistrateTransactions.BridgechainUpdateTransaction; } public dependencies(): ReadonlyArray { @@ -128,8 +131,8 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan "database", ).transactionsRepository; const updateTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MagistrateTransactionType.BridgechainUpdate, - MagistrateTransactionGroup, + Enums.MagistrateTransactionType.BridgechainUpdate, + Enums.MagistrateTransactionGroup, ); if (updateTransactions.length > 1) { @@ -155,7 +158,7 @@ export class BridgechainUpdateTransactionHandler extends Handlers.TransactionHan }, { field: "type", - value: MagistrateTransactionType.BridgechainRegistration, + value: Enums.MagistrateTransactionType.BridgechainRegistration, operator: Database.SearchOperator.OP_EQ, }, ], diff --git a/packages/core-magistrate-transactions/src/handlers/business-registration.ts b/packages/core-magistrate-transactions/src/handlers/business-registration.ts index e4cda43114..f2262e1a39 100644 --- a/packages/core-magistrate-transactions/src/handlers/business-registration.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-registration.ts @@ -1,5 +1,5 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { BusinessRegistrationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions, Utils } from "@arkecosystem/crypto"; import { BusinessAlreadyRegisteredError } from "../errors"; @@ -9,7 +9,7 @@ import { MagistrateIndex } from "../wallet-manager"; export class BusinessRegistrationTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BusinessRegistrationTransaction; + return MagistrateTransactions.BusinessRegistrationTransaction; } public dependencies(): ReadonlyArray { diff --git a/packages/core-magistrate-transactions/src/handlers/business-resignation.ts b/packages/core-magistrate-transactions/src/handlers/business-resignation.ts index f18dc2b4fb..02fc763989 100644 --- a/packages/core-magistrate-transactions/src/handlers/business-resignation.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-resignation.ts @@ -1,5 +1,5 @@ import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { BusinessResignationTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { BusinessIsNotRegisteredError, BusinessIsResignedError } from "../errors"; @@ -9,7 +9,7 @@ import { BusinessRegistrationTransactionHandler } from "./business-registration" export class BusinessResignationTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BusinessResignationTransaction; + return MagistrateTransactions.BusinessResignationTransaction; } public dependencies(): ReadonlyArray { diff --git a/packages/core-magistrate-transactions/src/handlers/business-update.ts b/packages/core-magistrate-transactions/src/handlers/business-update.ts index a588edfaf5..0cae86ba1b 100644 --- a/packages/core-magistrate-transactions/src/handlers/business-update.ts +++ b/packages/core-magistrate-transactions/src/handlers/business-update.ts @@ -1,8 +1,7 @@ import { app } from "@arkecosystem/core-container"; import { Database, EventEmitter, State, TransactionPool } from "@arkecosystem/core-interfaces"; -import { BusinessUpdateTransaction } from "@arkecosystem/core-magistrate-crypto"; +import { Enums, Transactions as MagistrateTransactions } from "@arkecosystem/core-magistrate-crypto"; import { Interfaces as MagistrateInterfaces } from "@arkecosystem/core-magistrate-crypto"; -import { MagistrateTransactionGroup, MagistrateTransactionType } from "@arkecosystem/core-magistrate-crypto"; import { Handlers } from "@arkecosystem/core-transactions"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { BusinessIsNotRegisteredError, BusinessIsResignedError } from "../errors"; @@ -12,7 +11,7 @@ import { BusinessRegistrationTransactionHandler } from "./business-registration" export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandler { public getConstructor(): Transactions.TransactionConstructor { - return BusinessUpdateTransaction; + return MagistrateTransactions.BusinessUpdateTransaction; } public dependencies(): ReadonlyArray { @@ -108,8 +107,8 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle "database", ).transactionsRepository; const updateTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MagistrateTransactionType.BusinessUpdate, - MagistrateTransactionGroup, + Enums.MagistrateTransactionType.BusinessUpdate, + Enums.MagistrateTransactionGroup, ); if (updateTransactions.length > 0) { @@ -122,8 +121,8 @@ export class BusinessUpdateTransactionHandler extends Handlers.TransactionHandle }; } else { const registerTransactions: Database.IBootstrapTransaction[] = await transactionsRepository.getAssetsByType( - MagistrateTransactionType.BusinessRegistration, - MagistrateTransactionGroup, + Enums.MagistrateTransactionType.BusinessRegistration, + Enums.MagistrateTransactionGroup, ); const registerTransaction: Database.IBootstrapTransaction = registerTransactions.pop(); From 11ba0ee962032226bcd859fa3edb3b8546404a4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2019 23:48:41 +0200 Subject: [PATCH 13/20] chore(deps): update dependency rimraf to v3 (#2987) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4317d00b9c..d18a6c6355 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "npm-check-updates": "^3.1.20", "prettier": "^1.18.2", "prompts": "^2.1.0", - "rimraf": "^2.6.3", + "rimraf": "^3.0.0", "snyk": "^1.193.1", "ts-jest": "^24.0.2", "tslint": "^5.18.0", From 5abc0552f96f47c510f959a84f0e31fa03d46dc7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2019 23:49:22 +0200 Subject: [PATCH 14/20] chore(deps): update dependency cross-env to v6 (#2985) --- package.json | 2 +- yarn.lock | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d18a6c6355..9861316a54 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "babel-loader": "^8.0.6", "codecov": "^3.5.0", "create-hash": "^1.2.0", - "cross-env": "^5.2.0", + "cross-env": "^6.0.0", "del-cli": "^3.0.0", "depcheck": "^0.8.3", "husky": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 22b395e1d4..91a9878ce0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4922,12 +4922,12 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" +cross-env@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.0.tgz#3c8e71440ea20aa6faaf5aec541235efc565dac6" + integrity sha512-G/B6gtkjgthT8AP/xN1wdj5Xe18fVyk58JepK8GxpUbqcz3hyWxegocMbvnZK+KoTslwd0ACZ3woi/DVUdVjyQ== dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" + cross-spawn "^7.0.0" cross-spawn@^5.0.1: version "5.1.0" @@ -4947,6 +4947,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.0.tgz#21ef9470443262f33dba80b2705a91db959b2e03" + integrity sha512-6U/8SMK2FBNnB21oQ4+6Nsodxanw1gTkntYA2zBdkFYFu3ZDx65P2ONEXGSvob/QS6REjVHQ9zxzdOafwFdstw== + dependencies: + path-key "^3.1.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@4.x.x: version "4.1.3" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-4.1.3.tgz#2461d3390ea0b82c643a6ba79f0ed491b0934c25" @@ -7144,7 +7153,7 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is-windows@^1.0.0, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -9506,9 +9515,10 @@ path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" -path-key@^3.0.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" + integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" From b6379a52f6784048199a2a3bccc01f4f9a227e52 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Tue, 1 Oct 2019 04:40:45 +0200 Subject: [PATCH 15/20] refactor(core): use default heap size regardless of available memory (#2998) --- packages/core/src/shared/start.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/core/src/shared/start.ts b/packages/core/src/shared/start.ts index 3d543fb001..f0ad00a48f 100644 --- a/packages/core/src/shared/start.ts +++ b/packages/core/src/shared/start.ts @@ -1,6 +1,5 @@ import cli from "cli-ux"; -import { freemem, totalmem } from "os"; import { BaseCommand } from "../commands/command"; import { processManager } from "../process-manager"; import { CommandFlags, ProcessOptions } from "../types"; @@ -38,10 +37,6 @@ export abstract class AbstractStartCommand extends BaseCommand { flagsProcess.name = processName; - const totalMemGb: number = totalmem() / Math.pow(1024, 3); - const freeMemGb: number = freemem() / Math.pow(1024, 3); - const potato: boolean = totalMemGb < 2 || freeMemGb < 1.5; - processManager.start( { ...options, @@ -50,7 +45,6 @@ export abstract class AbstractStartCommand extends BaseCommand { NODE_ENV: "production", CORE_ENV: flags.env, }, - node_args: potato ? { max_old_space_size: 500 } : undefined, }, }, flagsProcess, From 49d918a439b2f9d41008e08bb4ca17440f8ace9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2019 05:40:54 +0300 Subject: [PATCH 16/20] chore(deps): update dependency typesync to ^0.6.0 (#2981) --- package.json | 2 +- yarn.lock | 82 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 9861316a54..822815757f 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "tslint": "^5.18.0", "tslint-config-prettier": "^1.18.0", "typescript": "^3.5.3", - "typesync": "^0.5.1", + "typesync": "^0.6.0", "uuid": "^3.3.2" }, "workspaces": [ diff --git a/yarn.lock b/yarn.lock index 91a9878ce0..1e313d201e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3604,13 +3604,6 @@ atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" -awilix@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/awilix/-/awilix-3.0.9.tgz#3bd5cdf1d95b02888a8dc937fdb4d31e790b6380" - dependencies: - camel-case "^3.0.0" - glob "^7.1.2" - awilix@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/awilix/-/awilix-4.2.2.tgz#8d5ac4aeedd3ac94dd6cff6ff9cc4b45f0c8d0e3" @@ -3626,12 +3619,13 @@ aws4@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" -axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" + follow-redirects "1.5.10" + is-buffer "^2.0.2" b64@4.x.x: version "4.1.2" @@ -5034,7 +5028,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@3.1.0: +debug@3.1.0, debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -5046,7 +5040,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: +debug@^3.1.0, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" dependencies: @@ -5259,6 +5253,11 @@ detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -5978,11 +5977,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.3.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: - debug "^3.2.6" + debug "=3.1.0" for-in@^0.1.3: version "0.1.8" @@ -6282,6 +6282,18 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -6888,6 +6900,11 @@ is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" +is-buffer@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" @@ -9157,9 +9174,10 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" -ora@^3.0.0: +ora@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== dependencies: chalk "^2.4.2" cli-cursor "^2.1.0" @@ -10748,6 +10766,11 @@ semver@^6.1.2, semver@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -11972,17 +11995,18 @@ typescript@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" -typesync@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/typesync/-/typesync-0.5.1.tgz#e28d4e98479ed777e4de081428663eb526fc1bc7" +typesync@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/typesync/-/typesync-0.6.1.tgz#faedb7c6fe58f932d414dbc360d87855f2002552" + integrity sha512-s0gz49waO75HHDe0dCrvkT2EMWj6GKXSQnliSytoxH7JY+JYTow5d+CeCmypO95EOTrLvQAVnwxx2t/VdiDGTw== dependencies: - awilix "^3.0.9" - axios "^0.18.0" - chalk "^2.4.1" - detect-indent "^5.0.0" - glob "^7.1.3" - ora "^3.0.0" - semver "^5.6.0" + awilix "^4.2.2" + axios "^0.19.0" + chalk "^2.4.2" + detect-indent "^6.0.0" + glob "^7.1.4" + ora "^3.4.0" + semver "^6.3.0" uglify-js@^3.1.4: version "3.5.6" From 6b7e3133fbfe2e373818d3a8e409d36a245ca8e0 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Tue, 1 Oct 2019 04:41:07 +0200 Subject: [PATCH 17/20] refactor: remove asset migration heuristic (#2999) --- .../src/postgres-connection.ts | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/packages/core-database-postgres/src/postgres-connection.ts b/packages/core-database-postgres/src/postgres-connection.ts index 3a88be0f85..e1b11c01f9 100644 --- a/packages/core-database-postgres/src/postgres-connection.ts +++ b/packages/core-database-postgres/src/postgres-connection.ts @@ -206,23 +206,10 @@ export class PostgresConnection implements Database.IConnection { private async migrateTransactionsTableToAssetColumn(name: string, migration: pgPromise.QueryFile): Promise { const row: IMigration = await this.migrationsRepository.findByName(name); - - // Also run migration if the asset column is present, but missing values. E.g. - // after restoring a snapshot without assets even though the database has already been migrated. - let runMigration = !row; - if (!runMigration) { - const { missingAsset } = await this.db.one( - `SELECT EXISTS (SELECT id FROM transactions WHERE (type > 0 OR type_group != 1) AND asset IS NULL) as "missingAsset"`, - ); - if (missingAsset) { - await this.db.none(`DELETE FROM migrations WHERE name = '${name}'`); - runMigration = true; - } - } - - if (!runMigration) { + if (row) { return; } + this.logger.warn(`Migrating transactions table to assets. This may take a while.`); await this.query.none(migration); From d4ee4c05831b8ffe60cf7c9f1610232d1e2b1936 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 1 Oct 2019 09:05:03 +0300 Subject: [PATCH 18/20] ci: update branch patterns to new format --- .github/workflows/benchmark.yml | 3 ++- .github/workflows/functional.yml | 3 ++- .github/workflows/test.yml | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index d697a050c8..91828b4f54 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -3,7 +3,8 @@ name: Benchmark on: push: branches: - - "**" + - "*" + - "*/*" pull_request: types: [ready_for_review, synchronize, opened] # fix: synchronize triggers builds for PR merges with the base branch, currently causes duplicate builds as synchronize is treated the same as push for everything besides merges diff --git a/.github/workflows/functional.yml b/.github/workflows/functional.yml index 5a9c06b457..6f668fe630 100644 --- a/.github/workflows/functional.yml +++ b/.github/workflows/functional.yml @@ -3,7 +3,8 @@ name: Functional on: push: branches: - - "**" + - "*" + - "*/*" pull_request: types: [ready_for_review, synchronize, opened] # fix: synchronize triggers builds for PR merges with the base branch, currently causes duplicate builds as synchronize is treated the same as push for everything besides merges diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0c2701ee95..881e9e6717 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,7 +3,8 @@ name: Test on: push: branches: - - "**" + - "*" + - "*/*" pull_request: types: [ready_for_review, synchronize, opened] # fix: synchronize triggers builds for PR merges with the base branch, currently causes duplicate builds as synchronize is treated the same as push for everything besides merges From 409cedb34a1694d5b958f4e17c8b231a518fbb97 Mon Sep 17 00:00:00 2001 From: supaiku <1311798+supaiku0@users.noreply.github.com> Date: Tue, 1 Oct 2019 08:49:31 +0200 Subject: [PATCH 19/20] feat(crypto): allow passing height to `configManager.isNewMilestone` (#3001) --- __tests__/unit/crypto/managers/config.test.ts | 3 +++ packages/crypto/src/managers/config.ts | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/__tests__/unit/crypto/managers/config.test.ts b/__tests__/unit/crypto/managers/config.test.ts index 8191f966f5..6b7a420dbe 100644 --- a/__tests__/unit/crypto/managers/config.test.ts +++ b/__tests__/unit/crypto/managers/config.test.ts @@ -56,5 +56,8 @@ describe("Configuration", () => { configManager.setHeight(999999); expect(configManager.isNewMilestone()).toBeFalse(); + + configManager.setHeight(1); + expect(configManager.isNewMilestone(999999)).toBeFalse(); }); }); diff --git a/packages/crypto/src/managers/config.ts b/packages/crypto/src/managers/config.ts index 8eafa7d97c..f99e3822f4 100644 --- a/packages/crypto/src/managers/config.ts +++ b/packages/crypto/src/managers/config.ts @@ -57,8 +57,9 @@ export class ConfigManager { return this.height; } - public isNewMilestone(): boolean { - return this.milestones.map(milestone => milestone.height).includes(this.height); + public isNewMilestone(height?: number): boolean { + height = height || this.height; + return this.milestones.some(milestone => milestone.height === height); } public getMilestone(height?: number): { [key: string]: any } { From 14dfc07a2d6d6e4a0faa62641f75f5797796e67e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2019 09:50:09 +0300 Subject: [PATCH 20/20] fix(deps): update dependency @hapi/boom to v8 (#2988) Co-authored-by: Renovate Bot --- packages/core-api/package.json | 2 +- packages/core-elasticsearch/package.json | 2 +- packages/core-http-utils/package.json | 2 +- packages/core-p2p/package.json | 2 +- packages/core-webhooks/package.json | 2 +- yarn.lock | 12 ++++++++++++ 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/core-api/package.json b/packages/core-api/package.json index b180207afa..c88b172e03 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -29,7 +29,7 @@ "@arkecosystem/core-utils": "^2.5.0-next.10", "@arkecosystem/crypto": "^2.5.0-next.10", "@arkecosystem/utils": "^0.3.0", - "@hapi/boom": "^7.4.2", + "@hapi/boom": "^8.0.0", "@hapi/joi": "^15.1.0", "ajv": "^6.10.2", "dayjs": "^1.8.15", diff --git a/packages/core-elasticsearch/package.json b/packages/core-elasticsearch/package.json index dd75baf0bc..821890e1a9 100644 --- a/packages/core-elasticsearch/package.json +++ b/packages/core-elasticsearch/package.json @@ -24,7 +24,7 @@ "@arkecosystem/core-interfaces": "^2.5.0-next.10", "@arkecosystem/crypto": "^2.5.0-next.10", "@elastic/elasticsearch": "^7.2.0", - "@hapi/boom": "^7.4.2", + "@hapi/boom": "^8.0.0", "@hapi/joi": "^15.1.0", "fs-extra": "^8.1.0" }, diff --git a/packages/core-http-utils/package.json b/packages/core-http-utils/package.json index a2694d115e..4d0d599a9a 100644 --- a/packages/core-http-utils/package.json +++ b/packages/core-http-utils/package.json @@ -21,7 +21,7 @@ "@arkecosystem/core-container": "^2.5.0-next.10", "@arkecosystem/core-utils": "^2.5.0-next.10", "@arkecosystem/crypto": "^2.5.0-next.10", - "@hapi/boom": "^7.4.2", + "@hapi/boom": "^8.0.0", "@hapi/good": "^8.2.0", "@hapi/good-console": "^8.1.0", "@hapi/good-squeeze": "^5.2.0", diff --git a/packages/core-p2p/package.json b/packages/core-p2p/package.json index b18e0a3694..e5914bab6a 100644 --- a/packages/core-p2p/package.json +++ b/packages/core-p2p/package.json @@ -30,7 +30,7 @@ "@arkecosystem/core-transaction-pool": "^2.5.0-next.10", "@arkecosystem/core-utils": "^2.5.0-next.10", "@arkecosystem/crypto": "^2.5.0-next.10", - "@hapi/boom": "^7.4.2", + "@hapi/boom": "^8.0.0", "@hapi/sntp": "^3.1.1", "ajv": "^6.10.2", "better-sqlite3": "^5.4.0", diff --git a/packages/core-webhooks/package.json b/packages/core-webhooks/package.json index 1244f722d3..8038a3d8a4 100644 --- a/packages/core-webhooks/package.json +++ b/packages/core-webhooks/package.json @@ -24,7 +24,7 @@ "@arkecosystem/core-http-utils": "^2.5.0-next.10", "@arkecosystem/core-interfaces": "^2.5.0-next.10", "@arkecosystem/core-utils": "^2.5.0-next.10", - "@hapi/boom": "^7.4.2", + "@hapi/boom": "^8.0.0", "@hapi/joi": "^15.1.0", "fs-extra": "^8.1.0", "lowdb": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 1e313d201e..33c7e2826f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -941,6 +941,13 @@ dependencies: "@hapi/hoek" "6.x.x" +"@hapi/boom@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-8.0.1.tgz#13f1f2f2a3abfb0787c79e35e238c8aff6aa1661" + integrity sha512-SnBM2GzEYEA6AGFKXBqNLWXR3uNBui0bkmklYXX1gYtevVhDTy2uakwkSauxvIWMtlANGRhzChYg95If3FWCwA== + dependencies: + "@hapi/hoek" "8.x.x" + "@hapi/bounce@1.x.x": version "1.3.0" resolved "https://registry.yarnpkg.com/@hapi/bounce/-/bounce-1.3.0.tgz#059f194df905ca5a1411d40803a665ee170533e8" @@ -1056,6 +1063,11 @@ version "6.2.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-6.2.1.tgz#d3a66329159af879bfdf0b0cff2229c43c5a3451" +"@hapi/hoek@8.x.x": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.5.tgz#b307d3f1aced22e05bd6a2403c302eaebb577da3" + integrity sha512-rmGFzok1zR3xZKd5m3ihWdqafXFxvPHoQ/78+AG5URKbEbJiwBBfRgzbu+07W5f3+07JRshw6QqGbVmCp8ntig== + "@hapi/hoek@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.0.2.tgz#f63a5ff00e891a4e7aa98f11119f9515c6672032"