From ad790af29616f7975984bfe741b91486e028e0ea Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 10 Aug 2026 12:35:14 +0000 Subject: [PATCH 1/7] Add enable magistrate --- packages/core-magistrate-transactions/src/handlers/entity.ts | 3 ++- .../src/handlers/magistrate-handler.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core-magistrate-transactions/src/handlers/entity.ts b/packages/core-magistrate-transactions/src/handlers/entity.ts index c313c2b17d..66645b2304 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.enabledMagistrate; } 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..dcc92e04a9 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.enabledMagistrate; } public async throwIfCannotBeApplied( From 2ebe5d8696ed03534064335d2c21d8ad0473dead Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 10 Aug 2026 17:18:33 +0000 Subject: [PATCH 2/7] Rename --- packages/core-magistrate-transactions/src/handlers/entity.ts | 2 +- .../src/handlers/magistrate-handler.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-magistrate-transactions/src/handlers/entity.ts b/packages/core-magistrate-transactions/src/handlers/entity.ts index 66645b2304..5746ae4399 100644 --- a/packages/core-magistrate-transactions/src/handlers/entity.ts +++ b/packages/core-magistrate-transactions/src/handlers/entity.ts @@ -41,7 +41,7 @@ export class EntityTransactionHandler extends Handlers.TransactionHandler { public async isActivated(): Promise { const milestone = Managers.configManager.getMilestone(); - return milestone.aip36 === true && milestone.enabledMagistrate; + 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 dcc92e04a9..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 && milestone.enabledMagistrate; + return milestone.aip11 === true && !milestone.aip36 && milestone.magistrateEnabled === true; } public async throwIfCannotBeApplied( From 343b9dd675b6d74cb6ddd0d3b5e90e3bbe5a34b3 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 10 Aug 2026 17:19:08 +0000 Subject: [PATCH 3/7] Add to crypto --- packages/core-test-framework/src/app/generators/crypto.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-test-framework/src/app/generators/crypto.ts b/packages/core-test-framework/src/app/generators/crypto.ts index 348f1e5070..6e7e612e24 100644 --- a/packages/core-test-framework/src/app/generators/crypto.ts +++ b/packages/core-test-framework/src/app/generators/crypto.ts @@ -131,6 +131,7 @@ export class CryptoGenerator extends Generator { multiSignatureRegistrationEnabled: true, multiSignatureSendingEnabled: true, multiSignatureReceivingEnabled: true, + magistrateEnabled: true, }, { height: rewardHeight, @@ -242,7 +243,7 @@ export class CryptoGenerator extends Generator { private createGenesisBlock(keys: Interfaces.IKeyPair, transactions, timestamp: number) { transactions = transactions.sort((a, b) => { - if (a.type === b.type) { + if (a.type === b.type) { return a.amount - b.amount; } From be7122bfe9419dd145fbba0573e797357f583ce4 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Mon, 10 Aug 2026 17:34:19 +0000 Subject: [PATCH 4/7] Add tests --- .../core-magistrate-transactions/handlers/entity.test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) 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", () => { From d2d10d8d8be2cfe4fbe16adc9e19b4a179a0539a Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Mon, 17 Aug 2026 16:57:30 +0900 Subject: [PATCH 5/7] update `@arkecosystem/crypto-networks` to 1.9.0 --- packages/crypto/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 84bdf3e2af..772afc3ed2 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.1", + "@arkecosystem/crypto-networks": "1.9.0", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index 210926e85a..de34c34734 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.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.8.1.tgz#e44ef1b57209f839cbb8b04a04f45c2d0574c6c4" - integrity sha512-3BJrPXFj2pJudJMDg3jAbxowMQkikoxCsp/dQgLvrIfDFjjiQbv3KNLUGV+m+BpixuRo+/s4711JkJ4CZP7PXg== +"@arkecosystem/crypto-networks@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.9.0.tgz#2289b6b72ac8bedf036380008983c76de25f3a64" + integrity sha512-EwmACJAlgaJMNggp55voo8zz8ph2Ki8578/soTdy6mGkQx67nqSkXMj+WAGrSzOdUmuXgc36Cza6BwnYq63mAQ== "@arkecosystem/utils@1.3.1": version "1.3.1" From fc672ccb71ac10c7f8e4d73e70568c7aa95081cf Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Tue, 18 Aug 2026 10:10:27 +0900 Subject: [PATCH 6/7] fix tests --- .../transaction-forging/__support__/index.ts | 8 +++++++ .../core-api/handlers/transactions.test.ts | 21 ++----------------- .../src/app/generators/crypto.ts | 2 +- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/__tests__/functional/transaction-forging/__support__/index.ts b/__tests__/functional/transaction-forging/__support__/index.ts index af2b785b4c..e2a06438c9 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(); @@ -65,6 +66,13 @@ 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/packages/core-test-framework/src/app/generators/crypto.ts b/packages/core-test-framework/src/app/generators/crypto.ts index 6e7e612e24..fda95a3193 100644 --- a/packages/core-test-framework/src/app/generators/crypto.ts +++ b/packages/core-test-framework/src/app/generators/crypto.ts @@ -243,7 +243,7 @@ export class CryptoGenerator extends Generator { private createGenesisBlock(keys: Interfaces.IKeyPair, transactions, timestamp: number) { transactions = transactions.sort((a, b) => { - if (a.type === b.type) { + if (a.type === b.type) { return a.amount - b.amount; } From c7efd675ca3f230631c31ea0a00b55bdd5609acb Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:47:16 +0900 Subject: [PATCH 7/7] update `@arkecosystem/crypto-networks` to 2.0.0 --- packages/crypto/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 772afc3ed2..bdaf688e0b 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.9.0", + "@arkecosystem/crypto-networks": "2.0.0", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index de34c34734..0d6a20d388 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,10 +25,10 @@ fast-memoize "^2.5.1" wif "^2.0.6" -"@arkecosystem/crypto-networks@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.9.0.tgz#2289b6b72ac8bedf036380008983c76de25f3a64" - integrity sha512-EwmACJAlgaJMNggp55voo8zz8ph2Ki8578/soTdy6mGkQx67nqSkXMj+WAGrSzOdUmuXgc36Cza6BwnYq63mAQ== +"@arkecosystem/crypto-networks@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-2.0.0.tgz#e878dc337b45f1020e6c9e58f0456ffbfa89d78f" + integrity sha512-YxQJbSrCLrgWDHbCoj2m/Baj5Qn5XLYhuvtEeAb8lVIHFxJTso5AXaaDoO2DDc/HSIQrTAhi5627zPoGq54BQQ== "@arkecosystem/utils@1.3.1": version "1.3.1"