From 1c9cd91124896da1042cfba6f0d0c11c4e6827ac Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 08:52:16 +0000 Subject: [PATCH 01/12] Add errors --- packages/core-transactions/src/errors.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/core-transactions/src/errors.ts b/packages/core-transactions/src/errors.ts index b916b6bc02..f45dfb67d8 100644 --- a/packages/core-transactions/src/errors.ts +++ b/packages/core-transactions/src/errors.ts @@ -95,6 +95,19 @@ export class UnsupportedMultiSignatureTransactionError extends TransactionError } } +export class DisabledMultiSignatureSending extends TransactionError { + public constructor() { + super(`Failed to apply transaction, because sending from multi signature wallets is disabled.`); + } +} + +export class DisabledMultiSignatureReceiving extends TransactionError { + public constructor() { + super(`Failed to apply transaction, because receiving on multi signature wallets is disabled.`); + } +} + + export class InvalidSecondSignatureError extends TransactionError { public constructor() { super(`Failed to apply transaction, because the second signature could not be verified.`); From 7c100385aab3acca9a0a47191578c7b146997344 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 08:52:22 +0000 Subject: [PATCH 02/12] Check sender --- packages/core-transactions/src/handlers/transaction.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/core-transactions/src/handlers/transaction.ts b/packages/core-transactions/src/handlers/transaction.ts index 2c29d64a8f..abff88ec2f 100644 --- a/packages/core-transactions/src/handlers/transaction.ts +++ b/packages/core-transactions/src/handlers/transaction.ts @@ -5,6 +5,7 @@ import assert from "assert"; import { ColdWalletError, + DisabledMultiSignatureSending, InsufficientBalanceError, InvalidMultiSignaturesError, InvalidSecondSignatureError, @@ -86,6 +87,13 @@ export abstract class TransactionHandler { const senderWallet: Contracts.State.Wallet = this.walletRepository.findByAddress(sender.getAddress()); + if (senderWallet.hasMultiSignature()) { + const milestone = Managers.configManager.getMilestone(); + if (milestone.enableMultiSignatureSending !== true) { + throw new DisabledMultiSignatureSending(); + } + } + AppUtils.assert.defined(sender.getPublicKey()); if (!this.walletRepository.hasByPublicKey(sender.getPublicKey()!) && senderWallet.getBalance().isZero()) { From 77c3f402922f235d1ba576338aa41552e37a8496 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 09:00:22 +0000 Subject: [PATCH 03/12] Yarn.lock --- yarn.lock | 244 +----------------------------------------------------- 1 file changed, 4 insertions(+), 240 deletions(-) diff --git a/yarn.lock b/yarn.lock index 775c7a56f9..ea0c566127 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,141 +15,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@arkecosystem/core-cli@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-cli/-/core-cli-3.9.1.tgz#f4d05d8767840680b9c92d977ef96b1dc9faed61" - integrity sha512-7L0hGDb+5cp9BhHWdeK3lVXAzl8kIgzNGne3YyDCIRhrUD9gDOChpcTFYSiJ2/o34XrR+Jbpv5vR0a2cNgYsMw== - dependencies: - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - "@arkecosystem/utils" "1.3.1" - boxen "4.2.0" - cli-table3 "0.6.0" - dayjs "1.11.10" - env-paths "2.2.0" - envfile "5.2.0" - execa "3.4.0" - fast-levenshtein "2.0.6" - fs-extra "8.1.0" - glob "7.1.7" - got "11.8.5" - inversify "5.1.1" - joi "17.12.1" - kleur "4.1.5" - latest-version "5.1.0" - listr "0.14.3" - nodejs-tail "1.1.1" - ora "4.1.1" - prompts "2.4.0" - read-last-lines "1.8.0" - reflect-metadata "0.2.1" - semver "7.5.4" - tar "6.2.0" - type-fest "0.21.3" - yargs-parser "21.1.1" - -"@arkecosystem/core-database@3.9.1", "@arkecosystem/core-database@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-database/-/core-database-3.9.1.tgz#9e667a152c1622f1d48337fc4322cefbf9693c1a" - integrity sha512-A9QncbOlouvYelUfvc1ns42xFH5EKnbwcM9dblKtR9q7nALtbiThzwdtvEUwKZT+B2dMO09P45y5ic0NOa78Tw== - dependencies: - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - "@arkecosystem/utils" "1.3.1" - dayjs "1.11.10" - joi "17.12.1" - pg "8.11.3" - reflect-metadata "0.2.1" - typeorm "0.2.25" - -"@arkecosystem/core-kernel@3.9.1", "@arkecosystem/core-kernel@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-kernel/-/core-kernel-3.9.1.tgz#0798380e7eb21a93a5cfd40e1ab4cc21ed9b693e" - integrity sha512-q3kvS8FMstb9uVfMIIUOpDehhPo4OAz/2DUBJxwHjdYJ6ntxaWrlA5qU8ZTg0ZTbMJ1OcpfmFyGwl73dFJqzlA== - dependencies: - "@arkecosystem/crypto" "3.9.1" - "@arkecosystem/utils" "1.3.1" - "@pm2/io" "5.0.2" - chalk "4.1.2" - cron "1.8.2" - dayjs "1.11.10" - deepmerge "4.3.1" - env-paths "2.2.0" - fs-extra "8.1.0" - functional-red-black-tree "1.0.1" - glob "7.1.7" - import-fresh "3.3.0" - inversify "5.1.1" - ipaddr.js "2.1.0" - joi "17.12.1" - log-process-errors "5.1.2" - nanomatch "1.2.13" - nsfw "2.2.4" - reflect-metadata "0.2.1" - semver "7.5.4" - type-fest "0.21.3" - -"@arkecosystem/core-p2p@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-p2p/-/core-p2p-3.9.1.tgz#2c039445e9b45fafbae5a640a44b37412d5c5d94" - integrity sha512-KzJRBYPLuE7lZZhm/uzvs1wOZhGjBkSfH7AkR2dy4uZilqHdWYdG/7ALoQwbMyeuIuthwLtkLziZJTuKBJawxA== - dependencies: - "@arkecosystem/core-database" "3.9.1" - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/core-state" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - "@hapi/boom" "9.0.0" - "@hapi/bounce" "2.0.0" - "@hapi/hapi" "20.1.5" - "@hapi/hoek" "9.2.0" - "@hapi/sntp" "4.0.0" - "@hapi/teamwork" "5.1.0" - dayjs "1.11.10" - delay "4.4.1" - ip "2.0.1" - ipaddr.js "2.1.0" - joi "17.12.1" - pluralize "8.0.0" - pretty-ms "7.0.1" - protobufjs "7.2.6" - rate-limiter-flexible "4.0.1" - semver "7.5.4" - ws "7.5.10" - -"@arkecosystem/core-state@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-state/-/core-state-3.9.1.tgz#46d2e6c4b62c0ff8823f968273fc364822d4b87e" - integrity sha512-YzYjnv6CMJFs3m40IgFfLuPeXloP+evI7OKC7ovu6zaGgnxjst1h7o3eNlxMKLGbX0IHIcOsG7w7dx7lXcyrbg== - dependencies: - "@arkecosystem/core-database" "3.9.1" - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/core-transactions" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - immutable "5.0.0-beta.5" - joi "17.12.1" - -"@arkecosystem/core-transaction-pool@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-transaction-pool/-/core-transaction-pool-3.9.1.tgz#e165b3cd649d04b0a63880325ef3c0488cb9cc26" - integrity sha512-0DMnQQ3HlDvR+vAmA1d9SyRHYSurBBq7Y3i+Wb1Xi5hug9RoQRYi45U7QKeP+6PVZPmVx4ayBc1dOgbuc0Bc9A== - dependencies: - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/core-transactions" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - better-sqlite3 "9.3.0" - fs-extra "8.1.0" - joi "17.12.1" - -"@arkecosystem/core-transactions@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/core-transactions/-/core-transactions-3.9.1.tgz#a16f0487ad4c147d35266a299c9ae7b0dd693132" - integrity sha512-GhbjJKsu6athx+etm7Y6Smj3u7TPypETcHI5HIVB5AbXbKfbPr+CrvfpjwcgK5V5G94qgfxd4+2Mpsn/eoXdXA== - dependencies: - "@arkecosystem/core-database" "3.9.1" - "@arkecosystem/core-kernel" "3.9.1" - "@arkecosystem/crypto" "3.9.1" - joi "17.12.1" - "@arkecosystem/crypto-identities@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-identities/-/crypto-identities-1.2.0.tgz#9301a8c322663dac7759a6759ec8c7a59d73f27e" @@ -160,41 +25,11 @@ fast-memoize "^2.5.1" wif "^2.0.6" -"@arkecosystem/crypto-networks@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.2.2.tgz#5efb52c161af5a05ee805e2327d58673024b4b5a" - integrity sha512-2iVeiYNnqtV9oZxWt/q9LFb/7zEMN2u/3pwTwIvBonrqtJwazorCBP+zbBwxeXivwnM4SxrCQweoTlujjvA+8w== - "@arkecosystem/crypto-networks@1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.7.0.tgz#ddfbc9c3ca7b50356042abd36d966720a44d566a" integrity sha512-GvaLl/8V9U7DFN56CF6BC2xalWx9Nm4SRopqWR8ehwuZViqF7sJd6KoyrkZ/7NJcR6OIHIdoid3x0cuzCQYXNg== -"@arkecosystem/crypto@3.9.1", "@arkecosystem/crypto@^3.6.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto/-/crypto-3.9.1.tgz#43f6c3dd76835531f84d31ff00ad1dcb76b58aa1" - integrity sha512-a6hExqDJARszWW5b03E+fv7D8lGveI/wDXK6ghiE1Ykh87o4QVM1+p2q7Z92ER3PXo40BDE2bytzYWupLj07tQ== - dependencies: - "@arkecosystem/crypto-identities" "1.2.0" - "@arkecosystem/crypto-networks" "1.2.2" - "@arkecosystem/utils" "1.3.1" - ajv "6.12.6" - ajv-keywords "3.4.1" - bcrypto "5.5.2" - bip32 "2.0.6" - bip39 "3.0.4" - browserify-aes "1.2.0" - bstring "0.3.9" - buffer-xor "2.0.2" - builtin-modules "3.3.0" - bytebuffer "5.0.1" - dayjs "1.11.10" - deepmerge "4.3.1" - fast-memoize "2.5.2" - ipaddr.js "2.1.0" - lodash.get "4.4.2" - lodash.set "4.3.2" - "@arkecosystem/utils@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@arkecosystem/utils/-/utils-1.3.1.tgz#2995bc92132c2d75a6f142ee9990a08adc1ab05c" @@ -1637,7 +1472,7 @@ dependencies: "@hapi/hoek" "9.x.x" -"@hapi/boom@9.1.4", "@hapi/boom@9.x.x", "@hapi/boom@^9.1.0", "@hapi/boom@^9.1.4": +"@hapi/boom@9.1.4", "@hapi/boom@9.x.x", "@hapi/boom@^9.1.0": version "9.1.4" resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.4.tgz#1f9dad367c6a7da9f8def24b4a986fc5a7bd9db6" integrity sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw== @@ -1726,30 +1561,6 @@ "@hapi/topo" "^5.0.0" "@hapi/validate" "^1.1.1" -"@hapi/hapi@^20.1.5": - version "20.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-20.3.0.tgz#1d620005afeebcb2c8170352286a4664b0107c15" - integrity sha512-zvPSRvaQyF3S6Nev9aiAzko2/hIFZmNSJNcs07qdVaVAvj8dGJSV4fVUuQSnufYJAGiSau+U5LxMLhx79se5WA== - dependencies: - "@hapi/accept" "^5.0.1" - "@hapi/ammo" "^5.0.1" - "@hapi/boom" "^9.1.0" - "@hapi/bounce" "^2.0.0" - "@hapi/call" "^8.0.0" - "@hapi/catbox" "^11.1.1" - "@hapi/catbox-memory" "^5.0.0" - "@hapi/heavy" "^7.0.1" - "@hapi/hoek" "^9.0.4" - "@hapi/mimos" "^6.0.0" - "@hapi/podium" "^4.1.1" - "@hapi/shot" "^5.0.5" - "@hapi/somever" "^3.0.0" - "@hapi/statehood" "^7.0.3" - "@hapi/subtext" "^7.1.0" - "@hapi/teamwork" "^5.1.0" - "@hapi/topo" "^5.0.0" - "@hapi/validate" "^1.1.1" - "@hapi/heavy@^7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-7.0.1.tgz#73315ae33b6e7682a0906b7a11e8ca70e3045874" @@ -1855,7 +1666,7 @@ "@hapi/iron" "6.x.x" "@hapi/validate" "1.x.x" -"@hapi/subtext@^7.0.3", "@hapi/subtext@^7.1.0": +"@hapi/subtext@^7.0.3": version "7.1.0" resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-7.1.0.tgz#b4d1ea2aeab1923ac130a24e75921e38fab5b15b" integrity sha512-n94cU6hlvsNRIpXaROzBNEJGwxC+HA69q769pChzej84On8vsU14guHDub7Pphr/pqn5b93zV3IkMPDU5AUiXA== @@ -2948,14 +2759,14 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== -"@sideway/address@^4.1.0", "@sideway/address@^4.1.5": +"@sideway/address@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.0", "@sideway/formula@^3.0.1": +"@sideway/formula@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== @@ -4414,14 +4225,6 @@ benchmark@^2.1.4: lodash "^4.17.4" platform "^1.3.3" -better-sqlite3@7.6.2: - version "7.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.6.2.tgz#47cd8cad5b9573cace535f950ac321166bc31384" - integrity sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg== - dependencies: - bindings "^1.5.0" - prebuild-install "^7.1.0" - better-sqlite3@9.3.0: version "9.3.0" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-9.3.0.tgz#2a8aaad65fa0210a4df5e8a0bcbc9156f6138d56" @@ -5821,11 +5624,6 @@ delay@4.4.1: resolved "https://registry.yarnpkg.com/delay/-/delay-4.4.1.tgz#6e02d02946a1b6ab98b39262ced965acba2ac4d1" integrity sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ== -delay@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8987,17 +8785,6 @@ joi@17.12.1: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -joi@17.4.2: - version "17.4.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" - integrity sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" - "@sideway/formula" "^3.0.0" - "@sideway/pinpoint" "^2.0.0" - joycon@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" @@ -10277,11 +10064,6 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -napi-build-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" - integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -11485,24 +11267,6 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -prebuild-install@^7.1.0: - version "7.1.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" - integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^2.0.0" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - prebuild-install@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" From 98e29886f200e2517eccb7fa265e830fe69acfd2 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 09:15:17 +0000 Subject: [PATCH 04/12] Disable multi signature sending/receiving --- .../core-transactions/src/handlers/one/transfer.ts | 13 +++++++++++++ .../src/handlers/two/multi-payment.ts | 12 +++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/core-transactions/src/handlers/one/transfer.ts b/packages/core-transactions/src/handlers/one/transfer.ts index 894aa60943..db4edfcaf3 100644 --- a/packages/core-transactions/src/handlers/one/transfer.ts +++ b/packages/core-transactions/src/handlers/one/transfer.ts @@ -3,6 +3,9 @@ import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; import { isRecipientOnActiveNetwork } from "../../utils"; import { TransactionHandler, TransactionHandlerConstructor } from "../transaction"; +import { + DisabledMultiSignatureReceiving, +} from "../../errors"; // todo: revisit the implementation, container usage and arguments after core-database rework // todo: replace unnecessary function arguments with dependency injection to avoid passing around references @@ -30,6 +33,16 @@ export class TransferTransactionHandler extends TransactionHandler { transaction: Interfaces.ITransaction, sender: Contracts.State.Wallet, ): Promise { + Utils.assert.defined(transaction.data.recipientId); + const recipient: Contracts.State.Wallet = this.walletRepository.findByAddress(transaction.data.recipientId); + + if (recipient.hasMultiSignature()) { + const milestone = Managers.configManager.getMilestone(); + if (milestone.enableMultiSignatureReceiving !== true) { + throw new DisabledMultiSignatureReceiving(); + } + } + return super.throwIfCannotBeApplied(transaction, sender); } diff --git a/packages/core-transactions/src/handlers/two/multi-payment.ts b/packages/core-transactions/src/handlers/two/multi-payment.ts index e8b9517068..911072afbd 100644 --- a/packages/core-transactions/src/handlers/two/multi-payment.ts +++ b/packages/core-transactions/src/handlers/two/multi-payment.ts @@ -1,7 +1,7 @@ import { Container, Contracts, Utils as AppUtils } from "@arkecosystem/core-kernel"; import { Interfaces, Managers, Transactions, Utils } from "@arkecosystem/crypto"; -import { InsufficientBalanceError, SentToBurnWalletError } from "../../errors"; +import { InsufficientBalanceError, SentToBurnWalletError, DisabledMultiSignatureReceiving } from "../../errors"; import { TransactionHandler, TransactionHandlerConstructor } from "../transaction"; @Container.injectable() @@ -58,6 +58,16 @@ export class MultiPaymentTransactionHandler extends TransactionHandler { throw new InsufficientBalanceError(); } + const milestone = Managers.configManager.getMilestone(); + if (milestone.enableMultiSignatureReceiving !== true) { + for (const payment of payments) { + const recipient: Contracts.State.Wallet = this.walletRepository.findByAddress(payment.recipientId); + if (recipient.hasMultiSignature()) { + throw new DisabledMultiSignatureReceiving(); + } + } + } + const burnAddress = Managers.configManager.get("network.burnAddress"); AppUtils.assert.defined(burnAddress); From 22b82ebaa8e6bbe8ab6a1c9b20b9e5e62994eee0 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 09:34:48 +0000 Subject: [PATCH 05/12] Rename milestones --- packages/core-transactions/src/handlers/one/transfer.ts | 2 +- packages/core-transactions/src/handlers/transaction.ts | 2 +- packages/core-transactions/src/handlers/two/multi-payment.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core-transactions/src/handlers/one/transfer.ts b/packages/core-transactions/src/handlers/one/transfer.ts index db4edfcaf3..c6e11ce531 100644 --- a/packages/core-transactions/src/handlers/one/transfer.ts +++ b/packages/core-transactions/src/handlers/one/transfer.ts @@ -38,7 +38,7 @@ export class TransferTransactionHandler extends TransactionHandler { if (recipient.hasMultiSignature()) { const milestone = Managers.configManager.getMilestone(); - if (milestone.enableMultiSignatureReceiving !== true) { + if (milestone.multiSignatureReceivingEnabled !== true) { throw new DisabledMultiSignatureReceiving(); } } diff --git a/packages/core-transactions/src/handlers/transaction.ts b/packages/core-transactions/src/handlers/transaction.ts index abff88ec2f..c4143f4223 100644 --- a/packages/core-transactions/src/handlers/transaction.ts +++ b/packages/core-transactions/src/handlers/transaction.ts @@ -89,7 +89,7 @@ export abstract class TransactionHandler { if (senderWallet.hasMultiSignature()) { const milestone = Managers.configManager.getMilestone(); - if (milestone.enableMultiSignatureSending !== true) { + if (milestone.multiSignatureSendingEnabled !== true) { throw new DisabledMultiSignatureSending(); } } diff --git a/packages/core-transactions/src/handlers/two/multi-payment.ts b/packages/core-transactions/src/handlers/two/multi-payment.ts index 911072afbd..ad4ec8a565 100644 --- a/packages/core-transactions/src/handlers/two/multi-payment.ts +++ b/packages/core-transactions/src/handlers/two/multi-payment.ts @@ -59,7 +59,7 @@ export class MultiPaymentTransactionHandler extends TransactionHandler { } const milestone = Managers.configManager.getMilestone(); - if (milestone.enableMultiSignatureReceiving !== true) { + if (milestone.multiSignatureReceivingEnabled !== true) { for (const payment of payments) { const recipient: Contracts.State.Wallet = this.walletRepository.findByAddress(payment.recipientId); if (recipient.hasMultiSignature()) { From a7cbdaa851b81fb3a49e2025c9b66ffa9565dc52 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 14:21:07 +0000 Subject: [PATCH 06/12] Update crypto networks --- 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 7247b35bdf..b6c869f35d 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.7.0", + "@arkecosystem/crypto-networks": "1.8.0", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index ea0c566127..2bcfacbd83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,10 +25,10 @@ fast-memoize "^2.5.1" wif "^2.0.6" -"@arkecosystem/crypto-networks@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.7.0.tgz#ddfbc9c3ca7b50356042abd36d966720a44d566a" - integrity sha512-GvaLl/8V9U7DFN56CF6BC2xalWx9Nm4SRopqWR8ehwuZViqF7sJd6KoyrkZ/7NJcR6OIHIdoid3x0cuzCQYXNg== +"@arkecosystem/crypto-networks@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.8.0.tgz#ecdd6fc70a8585976f06794021114797a0a7a61f" + integrity sha512-8olDegkpkOzZd5hSgvS7bXZpaSb9M1//sXj5nDx/Kfjg6u4n+EBpqXE+pIKOpNeE8knj3xj9pgHPotBa/iKogg== "@arkecosystem/utils@1.3.1": version "1.3.1" From 4a4f9b35594dc3901bf0c545cbf5df165650b238 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 14:22:24 +0000 Subject: [PATCH 07/12] Update crypto generator --- packages/core-test-framework/src/app/generators/crypto.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core-test-framework/src/app/generators/crypto.ts b/packages/core-test-framework/src/app/generators/crypto.ts index 544bb85808..348f1e5070 100644 --- a/packages/core-test-framework/src/app/generators/crypto.ts +++ b/packages/core-test-framework/src/app/generators/crypto.ts @@ -129,6 +129,8 @@ export class CryptoGenerator extends Generator { blockBurnAddress: true, blsPublicKeyRegistrationEnabled: true, multiSignatureRegistrationEnabled: true, + multiSignatureSendingEnabled: true, + multiSignatureReceivingEnabled: true, }, { height: rewardHeight, From 339cb9e76c5daecade5b0abd5c3a5a3cbb086ed0 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 15:34:22 +0000 Subject: [PATCH 08/12] Test transfers --- .../handlers/__support__/app.ts | 20 ++++++++ .../handlers/two/transfer.test.ts | 49 ++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/__tests__/unit/core-transactions/handlers/__support__/app.ts b/__tests__/unit/core-transactions/handlers/__support__/app.ts index 6c32dee4b6..8e89886d28 100644 --- a/__tests__/unit/core-transactions/handlers/__support__/app.ts +++ b/__tests__/unit/core-transactions/handlers/__support__/app.ts @@ -270,3 +270,23 @@ export const buildMultiSignatureWallet = (): Wallets.Wallet => { return wallet; }; + +export const buildMultiSignatureRecipientWallet = (): Wallets.Wallet => { + const multiSignatureAsset: IMultiSignatureAsset = { + publicKeys: [ + Identities.PublicKey.fromPassphrase(passphrases[1]), + Identities.PublicKey.fromPassphrase(passphrases[2]), + Identities.PublicKey.fromPassphrase(passphrases[3]), + ], + min: 2, + }; + + const wallet = new Wallets.Wallet( + Identities.Address.fromMultiSignatureAsset(multiSignatureAsset), + new Services.Attributes.AttributeMap(getWalletAttributeSet()), + ); + wallet.setPublicKey(Identities.PublicKey.fromMultiSignatureAsset(multiSignatureAsset)); + wallet.setAttribute("multiSignature", multiSignatureAsset); + + return wallet; +}; diff --git a/__tests__/unit/core-transactions/handlers/two/transfer.test.ts b/__tests__/unit/core-transactions/handlers/two/transfer.test.ts index 816cfab94a..5fa49f79e5 100644 --- a/__tests__/unit/core-transactions/handlers/two/transfer.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/transfer.test.ts @@ -12,6 +12,8 @@ import { ColdWalletError, InsufficientBalanceError, SenderWalletMismatchError, + DisabledMultiSignatureReceiving, + DisabledMultiSignatureSending, } from "@packages/core-transactions/src/errors"; import { TransactionHandler } from "@packages/core-transactions/src/handlers"; import { TransactionHandlerRegistry } from "@packages/core-transactions/src/handlers/handler-registry"; @@ -24,6 +26,7 @@ import { buildMultiSignatureWallet, buildRecipientWallet, buildSecondSignatureWallet, + buildMultiSignatureRecipientWallet, buildSenderWallet, initApp, } from "../__support__/app"; @@ -32,6 +35,7 @@ let app: Application; let senderWallet: Wallets.Wallet; let secondSignatureWallet: Wallets.Wallet; let multiSignatureWallet: Wallets.Wallet; +let multiSignatureRecipientWallet: Wallets.Wallet; let recipientWallet: Wallets.Wallet; let walletRepository: Contracts.State.WalletRepository; let factoryBuilder: FactoryBuilder; @@ -59,11 +63,13 @@ beforeEach(() => { senderWallet = buildSenderWallet(factoryBuilder); secondSignatureWallet = buildSecondSignatureWallet(factoryBuilder); multiSignatureWallet = buildMultiSignatureWallet(); + multiSignatureRecipientWallet = buildMultiSignatureRecipientWallet(); recipientWallet = buildRecipientWallet(factoryBuilder); walletRepository.index(senderWallet); walletRepository.index(secondSignatureWallet); walletRepository.index(multiSignatureWallet); + walletRepository.index(multiSignatureRecipientWallet); walletRepository.index(recipientWallet); }); @@ -116,6 +122,8 @@ describe("TransferTransaction", () => { afterEach(async () => { Managers.configManager.set("network.pubKeyHash", pubKeyHash); + // Managers.configManager.getMilestone().multiSignatureReceivingEnabled = true; + }); describe("bootstrap", () => { @@ -142,12 +150,23 @@ describe("TransferTransaction", () => { ).toResolve(); }); - it("should not throw - multi sign", async () => { + it("should not throw - multi sign if and multiSignatureSendingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = true; await expect( handler.throwIfCannotBeApplied(multiSignatureTransferTransaction, multiSignatureWallet), ).toResolve(); }); + + it("should throw - multi sign if and multiSignatureSendingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = false; + await expect( + handler.throwIfCannotBeApplied(multiSignatureTransferTransaction, multiSignatureWallet), + ).rejects.toThrow( + DisabledMultiSignatureSending, + ); + }); + it("should throw", async () => { transferTransaction.data.senderPublicKey = "a".repeat(66); await expect(handler.throwIfCannotBeApplied(transferTransaction, senderWallet)).rejects.toThrow( @@ -185,6 +204,34 @@ describe("TransferTransaction", () => { ); }); + it("should pass if recipient is multi signature wallet and multiSignatureReceivingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureReceivingEnabled = true; + + transferTransaction = BuilderFactory.transfer() + .recipientId(multiSignatureRecipientWallet.getAddress()) + .amount("10000000") + .sign(passphrases[0]) + .nonce("1") + .build(); + + await expect(handler.throwIfCannotBeApplied(transferTransaction, senderWallet)).toResolve(); + }); + + it("should throw if recipient is multi signature wallet and multiSignatureReceivingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureReceivingEnabled = false; + + transferTransaction = BuilderFactory.transfer() + .recipientId(multiSignatureRecipientWallet.getAddress()) + .amount("10000000") + .sign(passphrases[0]) + .nonce("1") + .build(); + + await expect(handler.throwIfCannotBeApplied(transferTransaction, senderWallet)).rejects.toThrow( + DisabledMultiSignatureReceiving, + ); + }); + it("should not throw if recipient is cold wallet", async () => { const coldWallet: Wallets.Wallet = factoryBuilder .get("Wallet") From f77d633912e2d28e79fc42dae652b0e8b08b8f5b Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 15:45:15 +0000 Subject: [PATCH 09/12] Test multi-payment --- .../handlers/two/multi-payment.test.ts | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/__tests__/unit/core-transactions/handlers/two/multi-payment.test.ts b/__tests__/unit/core-transactions/handlers/two/multi-payment.test.ts index d63f3bf058..58ec32a52a 100644 --- a/__tests__/unit/core-transactions/handlers/two/multi-payment.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/multi-payment.test.ts @@ -7,7 +7,7 @@ import { StateStore } from "@packages/core-state/src/stores/state"; import { Generators } from "@packages/core-test-framework/src"; import { Factories, FactoryBuilder } from "@packages/core-test-framework/src/factories"; import passphrases from "@packages/core-test-framework/src/internal/passphrases.json"; -import { InsufficientBalanceError, SentToBurnWalletError } from "@packages/core-transactions/src/errors"; +import { InsufficientBalanceError, DisabledMultiSignatureSending, DisabledMultiSignatureReceiving, SentToBurnWalletError } from "@packages/core-transactions/src/errors"; import { TransactionHandler } from "@packages/core-transactions/src/handlers"; import { TransactionHandlerRegistry } from "@packages/core-transactions/src/handlers/handler-registry"; import { Crypto, Enums, Interfaces, Managers, Transactions, Utils } from "@packages/crypto"; @@ -18,6 +18,7 @@ import { buildMultiSignatureWallet, buildRecipientWallet, buildSecondSignatureWallet, + buildMultiSignatureRecipientWallet, buildSenderWallet, initApp, } from "../__support__/app"; @@ -26,6 +27,7 @@ let app: Application; let senderWallet: Wallets.Wallet; let secondSignatureWallet: Wallets.Wallet; let multiSignatureWallet: Wallets.Wallet; +let multiSignatureRecipientWallet: Wallets.Wallet; let recipientWallet: Wallets.Wallet; let walletRepository: Contracts.State.WalletRepository; let factoryBuilder: FactoryBuilder; @@ -59,11 +61,13 @@ beforeEach(() => { senderWallet = buildSenderWallet(factoryBuilder); secondSignatureWallet = buildSecondSignatureWallet(factoryBuilder); multiSignatureWallet = buildMultiSignatureWallet(); + multiSignatureRecipientWallet = buildMultiSignatureRecipientWallet(); recipientWallet = buildRecipientWallet(factoryBuilder); walletRepository.index(senderWallet); walletRepository.index(secondSignatureWallet); walletRepository.index(multiSignatureWallet); + walletRepository.index(multiSignatureRecipientWallet); walletRepository.index(recipientWallet); }); @@ -156,12 +160,22 @@ describe("MultiPaymentTransaction", () => { ).toResolve(); }); - it("should not throw - multi sign", async () => { + it("should not throw - multi sign if and multiSignatureSendingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = true; await expect( handler.throwIfCannotBeApplied(multiSignatureMultiPaymentTransaction, multiSignatureWallet), ).toResolve(); }); + it("should throw - multi sign if and multiSignatureSendingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = false; + await expect( + handler.throwIfCannotBeApplied(multiSignatureMultiPaymentTransaction, multiSignatureWallet), + ).rejects.toThrow( + DisabledMultiSignatureSending, + ); + }); + it("should throw if asset is undefined", async () => { multiPaymentTransaction.data.asset = undefined; @@ -200,6 +214,34 @@ describe("MultiPaymentTransaction", () => { ); }); + it("should not throw if recipient is multisignature wallet and multiSignatureReceivingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureReceivingEnabled = true; + const multiPaymentTransaction = BuilderFactory.multiPayment() + .addPayment("ARYJmeYHSUTgbxaiqsgoPwf6M3CYukqdKN", "10") + .addPayment("AFyjB5jULQiYNsp37wwipCm9c7V1xEzTJD", "20") + .addPayment(multiSignatureRecipientWallet.getAddress(), "20") + .nonce("1") + .sign(passphrases[0]) + .build(); + + await expect(handler.throwIfCannotBeApplied(multiPaymentTransaction, senderWallet)).toResolve(); + }); + + it("should throw if recipient is multisignature wallet and multiSignatureReceivingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureReceivingEnabled = false; + const multiPaymentTransaction = BuilderFactory.multiPayment() + .addPayment("ARYJmeYHSUTgbxaiqsgoPwf6M3CYukqdKN", "10") + .addPayment("AFyjB5jULQiYNsp37wwipCm9c7V1xEzTJD", "20") + .addPayment(multiSignatureRecipientWallet.getAddress(), "20") + .nonce("1") + .sign(passphrases[0]) + .build(); + + await expect(handler.throwIfCannotBeApplied(multiPaymentTransaction, senderWallet)).rejects.toThrow( + DisabledMultiSignatureReceiving, + ); + }); + it.each([false, undefined])( "should not throw if recipient is burn wallet and blockBurnAddress is not set", async (blockBurnAddress) => { From 8bce403befcf9b2c1247a7f3e63060a66d609596 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 15:57:13 +0000 Subject: [PATCH 10/12] Test remaining --- .../core-transactions/handlers/two/htlc-lock.test.ts | 11 ++++++++++- .../unit/core-transactions/handlers/two/ipfs.test.ts | 12 ++++++++++-- .../unit/core-transactions/handlers/two/vote.test.ts | 11 ++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts b/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts index e51422efd8..cbcc26340d 100644 --- a/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts @@ -12,6 +12,7 @@ import { HtlcLockExpiredError, InsufficientBalanceError, SentToBurnWalletError, + DisabledMultiSignatureSending, } from "@packages/core-transactions/src/errors"; import { TransactionHandler } from "@packages/core-transactions/src/handlers"; import { TransactionHandlerRegistry } from "@packages/core-transactions/src/handlers/handler-registry"; @@ -233,12 +234,20 @@ describe("Htlc lock", () => { ).toResolve(); }); - it("should not throw - multi sign", async () => { + it("should not throw - multi sign if and multiSignatureSendingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = true; await expect( handler.throwIfCannotBeApplied(multiSignatureHtlcLockTransaction, multiSignatureWallet), ).toResolve(); }); + it("should throw - multi sign if and multiSignatureSendingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = false; + await expect( + handler.throwIfCannotBeApplied(multiSignatureHtlcLockTransaction, multiSignatureWallet), + ).rejects.toThrow(DisabledMultiSignatureSending); + }); + it("should throw if asset is undefined", async () => { htlcLockTransaction.data.asset = undefined; diff --git a/__tests__/unit/core-transactions/handlers/two/ipfs.test.ts b/__tests__/unit/core-transactions/handlers/two/ipfs.test.ts index dc9897a331..4a22eb07fe 100644 --- a/__tests__/unit/core-transactions/handlers/two/ipfs.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/ipfs.test.ts @@ -9,7 +9,7 @@ import { Factories, FactoryBuilder } from "@packages/core-test-framework/src/fac import passphrases from "@packages/core-test-framework/src/internal/passphrases.json"; import { Mempool } from "@packages/core-transaction-pool"; import { MempoolIndexes } from "@packages/core-transactions/src/enums"; -import { InsufficientBalanceError, IpfsHashAlreadyExists } from "@packages/core-transactions/src/errors"; +import { InsufficientBalanceError, IpfsHashAlreadyExists, DisabledMultiSignatureSending } from "@packages/core-transactions/src/errors"; import { TransactionHandler } from "@packages/core-transactions/src/handlers"; import { TransactionHandlerRegistry } from "@packages/core-transactions/src/handlers/handler-registry"; import { Crypto, Enums, Interfaces, Managers, Transactions, Utils } from "@packages/crypto"; @@ -309,12 +309,20 @@ describe("Ipfs", () => { ).toResolve(); }); - it("should not throw - multi sign", async () => { + it("should not throw - multi sign if and multiSignatureSendingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = true; await expect( handler.throwIfCannotBeApplied(multiSignatureIpfsTransaction, multiSignatureWallet), ).toResolve(); }); + it("should throw - multi sign if and multiSignatureSendingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = false; + await expect( + handler.throwIfCannotBeApplied(multiSignatureIpfsTransaction, multiSignatureWallet), + ).rejects.toThrow(DisabledMultiSignatureSending); + }); + it("should throw if wallet has insufficient funds", async () => { senderWallet.setBalance(Utils.BigNumber.ZERO); diff --git a/__tests__/unit/core-transactions/handlers/two/vote.test.ts b/__tests__/unit/core-transactions/handlers/two/vote.test.ts index b5eba75397..2072b5c85c 100644 --- a/__tests__/unit/core-transactions/handlers/two/vote.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/vote.test.ts @@ -13,6 +13,7 @@ import { InsufficientBalanceError, NoVoteError, UnvoteMismatchError, + DisabledMultiSignatureSending, VotedForNonDelegateError, } from "@packages/core-transactions/src/errors"; import { TransactionHandler } from "@packages/core-transactions/src/handlers"; @@ -297,12 +298,20 @@ describe("VoteTransaction", () => { ).toResolve(); }); - it("should not throw - multi sign vote", async () => { + it("should not throw - multi sign if and multiSignatureSendingEnabled=true", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = true; await expect( handler.throwIfCannotBeApplied(multiSignatureVoteTransaction, multiSignatureWallet), ).toResolve(); }); + it("should throw - multi sign if and multiSignatureSendingEnabled=false", async () => { + Managers.configManager.getMilestone().multiSignatureSendingEnabled = false; + await expect( + handler.throwIfCannotBeApplied(multiSignatureVoteTransaction, multiSignatureWallet), + ).rejects.toThrow(DisabledMultiSignatureSending); + }); + it("should not throw if the unvote is valid and the wallet has voted", async () => { senderWallet.setAttribute("vote", delegateWallet1.getPublicKey()); await expect(handler.throwIfCannotBeApplied(unvoteTransaction, senderWallet)).toResolve(); From ae3bdc463852880461eb823de4882a254e351c11 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Tue, 12 May 2026 20:12:33 +0000 Subject: [PATCH 11/12] Update crypto network --- 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 b6c869f35d..3dbfded672 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.0", + "@arkecosystem/crypto-networks": "1.8.1", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index 2bcfacbd83..210926e85a 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.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.8.0.tgz#ecdd6fc70a8585976f06794021114797a0a7a61f" - integrity sha512-8olDegkpkOzZd5hSgvS7bXZpaSb9M1//sXj5nDx/Kfjg6u4n+EBpqXE+pIKOpNeE8knj3xj9pgHPotBa/iKogg== +"@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/utils@1.3.1": version "1.3.1" From ac5811e64da05500896d04439274a447a0efbd70 Mon Sep 17 00:00:00 2001 From: "Sebastijan K." <58827427+sebastijankuzner@users.noreply.github.com> Date: Wed, 13 May 2026 11:31:29 +0200 Subject: [PATCH 12/12] Remove commented line Co-authored-by: ItsANameToo <35610748+ItsANameToo@users.noreply.github.com> --- __tests__/unit/core-transactions/handlers/two/transfer.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/__tests__/unit/core-transactions/handlers/two/transfer.test.ts b/__tests__/unit/core-transactions/handlers/two/transfer.test.ts index 5fa49f79e5..98b4baf920 100644 --- a/__tests__/unit/core-transactions/handlers/two/transfer.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/transfer.test.ts @@ -122,7 +122,6 @@ describe("TransferTransaction", () => { afterEach(async () => { Managers.configManager.set("network.pubKeyHash", pubKeyHash); - // Managers.configManager.getMilestone().multiSignatureReceivingEnabled = true; });