diff --git a/packages/crypto/src/errors.ts b/packages/crypto/src/errors.ts index dae91513ba..d5e48a797f 100644 --- a/packages/crypto/src/errors.ts +++ b/packages/crypto/src/errors.ts @@ -106,6 +106,12 @@ export class TransactionAlreadyRegisteredError extends CryptoError { } } +export class TransactionKeyAlreadyRegisteredError extends CryptoError { + constructor(name: string) { + super(`Transaction key ${name} is already registered.`); + } +} + export class CoreTransactionTypeGroupImmutableError extends CryptoError { constructor() { super(`The Core transaction type group is immutable.`); diff --git a/packages/crypto/src/transactions/registry.ts b/packages/crypto/src/transactions/registry.ts index aeba936029..5ce228c8ce 100644 --- a/packages/crypto/src/transactions/registry.ts +++ b/packages/crypto/src/transactions/registry.ts @@ -2,6 +2,7 @@ import { TransactionTypeGroup } from "../enums"; import { CoreTransactionTypeGroupImmutableError, TransactionAlreadyRegisteredError, + TransactionKeyAlreadyRegisteredError, UnkownTransactionError, } from "../errors"; import { validator } from "../validation"; @@ -60,6 +61,10 @@ class TransactionRegistry { throw new TransactionAlreadyRegisteredError(constructor.name); } + if (Array.from(this.transactionTypes.values()).some(({ key }) => key === constructor.key)) { + throw new TransactionKeyAlreadyRegisteredError(constructor.key); + } + this.transactionTypes.set(internalType, constructor); this.updateSchemas(constructor); }