From 1cf6702ad8dc8b879d0dacc73c19be405f0a6773 Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Wed, 13 May 2026 13:23:06 +0000 Subject: [PATCH 1/2] feat(crypto-transactions): disable sending from and receiving on MultiSignature wallets (#4865) * Add errors * Check sender * Yarn.lock * Disable multi signature sending/receiving * Rename milestones * Update crypto networks * Update crypto generator * Test transfers * Test multi-payment * Test remaining * Update crypto network * Remove commented line Co-authored-by: ItsANameToo <35610748+ItsANameToo@users.noreply.github.com> --------- Co-authored-by: ItsANameToo <35610748+ItsANameToo@users.noreply.github.com> --- .../handlers/__support__/app.ts | 20 ++++++++ .../handlers/two/htlc-lock.test.ts | 16 ++++++- .../handlers/two/ipfs.test.ts | 12 ++++- .../handlers/two/multi-payment.test.ts | 47 +++++++++++++++++- .../handlers/two/transfer.test.ts | 48 ++++++++++++++++++- .../handlers/two/vote.test.ts | 11 ++++- .../src/app/generators/crypto.ts | 2 + packages/core-transactions/src/errors.ts | 13 +++++ .../src/handlers/one/transfer.ts | 13 +++++ .../src/handlers/transaction.ts | 8 ++++ .../src/handlers/two/multi-payment.ts | 12 ++++- packages/crypto/package.json | 2 +- yarn.lock | 8 ++-- 13 files changed, 198 insertions(+), 14 deletions(-) diff --git a/__tests__/unit/core-transactions/handlers/__support__/app.ts b/__tests__/unit/core-transactions/handlers/__support__/app.ts index f68635d3c0..19982de7b7 100644 --- a/__tests__/unit/core-transactions/handlers/__support__/app.ts +++ b/__tests__/unit/core-transactions/handlers/__support__/app.ts @@ -262,3 +262,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/htlc-lock.test.ts b/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts index 0c579e44eb..038600ee23 100644 --- a/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts +++ b/__tests__/unit/core-transactions/handlers/two/htlc-lock.test.ts @@ -8,7 +8,11 @@ import { Mapper, Mocks } from "@packages/core-test-framework"; 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 { HtlcLockExpiredError, InsufficientBalanceError } from "@packages/core-transactions/src/errors"; +import { + HtlcLockExpiredError, + InsufficientBalanceError, + 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"; @@ -229,12 +233,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/multi-payment.test.ts b/__tests__/unit/core-transactions/handlers/two/multi-payment.test.ts index 729554e48a..12bfff936f 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 } from "@packages/core-transactions/src/errors"; +import { InsufficientBalanceError, DisabledMultiSignatureSending, DisabledMultiSignatureReceiving } 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; @@ -183,6 +197,35 @@ describe("MultiPaymentTransaction", () => { InsufficientBalanceError, ); }); + + 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, + ); + }); + }); describe("apply", () => { diff --git a/__tests__/unit/core-transactions/handlers/two/transfer.test.ts b/__tests__/unit/core-transactions/handlers/two/transfer.test.ts index 816cfab94a..98b4baf920 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,7 @@ describe("TransferTransaction", () => { afterEach(async () => { Managers.configManager.set("network.pubKeyHash", pubKeyHash); + }); describe("bootstrap", () => { @@ -142,12 +149,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 +203,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") 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(); diff --git a/packages/core-test-framework/src/app/generators/crypto.ts b/packages/core-test-framework/src/app/generators/crypto.ts index 0875479ba2..a51477bd63 100644 --- a/packages/core-test-framework/src/app/generators/crypto.ts +++ b/packages/core-test-framework/src/app/generators/crypto.ts @@ -128,6 +128,8 @@ export class CryptoGenerator extends Generator { blockBurnAddress: true, blsPublicKeyRegistrationEnabled: true, multiSignatureRegistrationEnabled: true, + multiSignatureSendingEnabled: true, + multiSignatureReceivingEnabled: true, }, { height: rewardHeight, diff --git a/packages/core-transactions/src/errors.ts b/packages/core-transactions/src/errors.ts index 8014943e23..edd7bea1a4 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.`); diff --git a/packages/core-transactions/src/handlers/one/transfer.ts b/packages/core-transactions/src/handlers/one/transfer.ts index 894aa60943..c6e11ce531 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.multiSignatureReceivingEnabled !== true) { + throw new DisabledMultiSignatureReceiving(); + } + } + return super.throwIfCannotBeApplied(transaction, sender); } diff --git a/packages/core-transactions/src/handlers/transaction.ts b/packages/core-transactions/src/handlers/transaction.ts index e260d2d2b4..2f7adf2f58 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, @@ -78,6 +79,13 @@ export abstract class TransactionHandler { ): Promise { const senderWallet: Contracts.State.Wallet = this.walletRepository.findByAddress(sender.getAddress()); + if (senderWallet.hasMultiSignature()) { + const milestone = Managers.configManager.getMilestone(); + if (milestone.multiSignatureSendingEnabled !== true) { + throw new DisabledMultiSignatureSending(); + } + } + AppUtils.assert.defined(sender.getPublicKey()); if (!this.walletRepository.hasByPublicKey(sender.getPublicKey()!) && senderWallet.getBalance().isZero()) { diff --git a/packages/core-transactions/src/handlers/two/multi-payment.ts b/packages/core-transactions/src/handlers/two/multi-payment.ts index aea0c3f8bc..ff55aba44d 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 } from "../../errors"; +import { InsufficientBalanceError, 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.multiSignatureReceivingEnabled !== true) { + for (const payment of payments) { + const recipient: Contracts.State.Wallet = this.walletRepository.findByAddress(payment.recipientId); + if (recipient.hasMultiSignature()) { + throw new DisabledMultiSignatureReceiving(); + } + } + } + return super.throwIfCannotBeApplied(transaction, wallet); } diff --git a/packages/crypto/package.json b/packages/crypto/package.json index fae4d69abe..9ccd052587 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.1", + "@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 9d978d64ce..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.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@arkecosystem/crypto-networks/-/crypto-networks-1.7.1.tgz#c07cedd9624782c7a4bc2787255fc1a9db1159ed" - integrity sha512-6Woqje8l5Xlviw4am2kKhHU7vHBEDPQULEqMjI9lY9J0kol54mp78Jygkfi/s0DpMNfdYVWSwHtjOueHFQnTLw== +"@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 a0bc16fca5aca97675fd47cb79860540754b441a Mon Sep 17 00:00:00 2001 From: sebastijankuzner Date: Wed, 13 May 2026 13:31:06 +0000 Subject: [PATCH 2/2] deps: update crypto-networks to 1.8.2 --- 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 9ccd052587..2164a146b5 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.8.2", "@arkecosystem/utils": "1.3.1", "ajv": "6.12.6", "ajv-keywords": "3.4.1", diff --git a/yarn.lock b/yarn.lock index 210926e85a..94fa7cd23a 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.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/utils@1.3.1": version "1.3.1"