diff --git a/__tests__/functional/transaction-forging/__support__/index.ts b/__tests__/functional/transaction-forging/__support__/index.ts index 3892eb540a..48c5c51a70 100644 --- a/__tests__/functional/transaction-forging/__support__/index.ts +++ b/__tests__/functional/transaction-forging/__support__/index.ts @@ -11,6 +11,7 @@ jest.setTimeout(1200000); import { StateBuilder } from "@arkecosystem/core-state/src/state-builder"; import { Sandbox } from "@packages/core-test-framework/src"; +import { snoozeForBlock } from "@packages/core-test-framework/src/utils"; const sandbox: Sandbox = new Sandbox(); @@ -63,6 +64,14 @@ export const setUp = async (): Promise => { Managers.configManager.getMilestone().aip11 = true; Managers.configManager.getMilestone().htlcEnabled = true; + Managers.configManager.getMilestone().blsPublicKeyRegistrationEnabled = true; + Managers.configManager.getMilestone().magistrateEnabled = true; + + // The flag above only covers the config that is live right now. TransactionFactory reloads + // the testnet preset on every transaction it builds, and there `magistrateEnabled` is only + // set from height 2 — so a Magistrate transaction sent at genesis is still rejected with + // "Transaction type 2/x is deactivated". Wait for the first block before any test runs. + await snoozeForBlock(1); }); return sandbox.app; diff --git a/__tests__/integration/core-api/handlers/transactions.test.ts b/__tests__/integration/core-api/handlers/transactions.test.ts index 180c1329d0..6271167750 100644 --- a/__tests__/integration/core-api/handlers/transactions.test.ts +++ b/__tests__/integration/core-api/handlers/transactions.test.ts @@ -474,16 +474,7 @@ describe("API 2.0 - Transactions", () => { HtlcClaim: 9, HtlcRefund: 10, }, - 2: { - // Marketplace stuff - BusinessRegistration: 0, - BusinessResignation: 1, - BusinessUpdate: 2, - BridgechainRegistration: 3, - BridgechainResignation: 4, - BridgechainUpdate: 5, - // Entity: 6, // no "Entity" because aip36 is not enabled - }, + // no typeGroup 2 (Magistrate) because magistrateEnabled is not set on this milestone }); }); }); @@ -637,15 +628,7 @@ describe("API 2.0 - Transactions", () => { transfer: "10000000", vote: "100000000", }, - "2": { - bridgechainRegistration: "5000000000", - bridgechainResignation: "5000000000", - bridgechainUpdate: "5000000000", - businessRegistration: "5000000000", - businessResignation: "5000000000", - businessUpdate: "5000000000", - // entity: "5000000000", // aip36 is disabled - }, + // no typeGroup 2 (Magistrate) because magistrateEnabled is not set on this milestone }); }); }); diff --git a/__tests__/unit/core-magistrate-transactions/handlers/entity.test.ts b/__tests__/unit/core-magistrate-transactions/handlers/entity.test.ts index 16624f5c2a..a828243145 100644 --- a/__tests__/unit/core-magistrate-transactions/handlers/entity.test.ts +++ b/__tests__/unit/core-magistrate-transactions/handlers/entity.test.ts @@ -136,6 +136,15 @@ describe("Entity handler", () => { const result = await entityHandler.isActivated(); expect(result).toBeTrue(); }); + + it("should return false if AIP36 is enabled but magistrate is not enabled", async () => { + Managers.configManager.setHeight(61); + Managers.configManager.getMilestone().magistrateEnabled = false; + + entityHandler = container.resolve(EntityTransactionHandler); + const result = await entityHandler.isActivated(); + expect(result).toBeFalse(); + }); }); describe("dynamicFee", () => { diff --git a/packages/core-magistrate-transactions/src/handlers/entity.ts b/packages/core-magistrate-transactions/src/handlers/entity.ts index c313c2b17d..5746ae4399 100644 --- a/packages/core-magistrate-transactions/src/handlers/entity.ts +++ b/packages/core-magistrate-transactions/src/handlers/entity.ts @@ -40,7 +40,8 @@ export class EntityTransactionHandler extends Handlers.TransactionHandler { } public async isActivated(): Promise { - return Managers.configManager.getMilestone().aip36 === true; + const milestone = Managers.configManager.getMilestone(); + return milestone.aip36 === true && milestone.magistrateEnabled === true; } public dynamicFee(context: Contracts.Shared.DynamicFeeContext): Utils.BigNumber { diff --git a/packages/core-magistrate-transactions/src/handlers/magistrate-handler.ts b/packages/core-magistrate-transactions/src/handlers/magistrate-handler.ts index a5b648ea4c..dbe76e9920 100644 --- a/packages/core-magistrate-transactions/src/handlers/magistrate-handler.ts +++ b/packages/core-magistrate-transactions/src/handlers/magistrate-handler.ts @@ -5,7 +5,7 @@ import { Interfaces as CryptoInterfaces, Managers, Utils } from "@arkecosystem/c export abstract class MagistrateTransactionHandler extends Handlers.TransactionHandler { public async isActivated(): Promise { const milestone = Managers.configManager.getMilestone(); - return milestone.aip11 === true && !milestone.aip36; + return milestone.aip11 === true && !milestone.aip36 && milestone.magistrateEnabled === true; } public async throwIfCannotBeApplied( diff --git a/packages/core-test-framework/src/app/generators/crypto.ts b/packages/core-test-framework/src/app/generators/crypto.ts index a51477bd63..29e72cc8b7 100644 --- a/packages/core-test-framework/src/app/generators/crypto.ts +++ b/packages/core-test-framework/src/app/generators/crypto.ts @@ -130,6 +130,7 @@ export class CryptoGenerator extends Generator { multiSignatureRegistrationEnabled: true, multiSignatureSendingEnabled: true, multiSignatureReceivingEnabled: true, + magistrateEnabled: true, }, { height: rewardHeight, diff --git a/packages/crypto/package.json b/packages/crypto/package.json index ca38440d97..b747391da2 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@arkecosystem/crypto-identities": "1.2.0", - "@arkecosystem/crypto-networks": "1.8.2", + "@arkecosystem/crypto-networks": "2.0.2", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index 94fa7cd23a..54ff7cea99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,10 +25,10 @@ fast-memoize "^2.5.1" wif "^2.0.6" -"@arkecosystem/crypto-networks@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.8.2.tgz#80cf278d1838ff237bd987dc66d511b72471f1f0" - integrity sha512-yrx7m0+0CEX3Rztvj9yS9BYAsZY+of2nFb/e6yZKUhx9o+HoI44bzojcPCwu5vTsExG7ourRfG+6dvu8ylGHXQ== +"@arkecosystem/crypto-networks@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-2.0.2.tgz#9c8d2ca6c5ad778815e4df28817a89d79ee6bf14" + integrity sha512-sjzneWEu/DmzcZpD5LL8pKQrITdH23lgojPlnWyV5LayQUw242uN/taW++6UmP6nUkflIPsLmGndBgnxKTGhNg== "@arkecosystem/utils@1.3.1": version "1.3.1"