diff --git a/packages/core/src/CSL/coreToCsl.ts b/packages/core/src/CSL/coreToCsl.ts index 63fd1f375ff..c1ec584a670 100644 --- a/packages/core/src/CSL/coreToCsl.ts +++ b/packages/core/src/CSL/coreToCsl.ts @@ -58,6 +58,7 @@ export const txIn = (core: Cardano.TxIn): TransactionInput => TransactionInput.new(TransactionHash.from_bytes(Buffer.from(core.txId, 'hex')), core.index); export const txOut = (core: Cardano.TxOut): TransactionOutput => + // TODO: add support for base 58 addresses TransactionOutput.new(Address.from_bech32(core.address.toString()), value(core.value)); export const utxo = (core: Cardano.Utxo[]): TransactionUnspentOutput[] => diff --git a/packages/core/src/Cardano/types/Address.ts b/packages/core/src/Cardano/types/Address.ts index d305d2085cb..4e20b6742ea 100644 --- a/packages/core/src/Cardano/types/Address.ts +++ b/packages/core/src/Cardano/types/Address.ts @@ -1,13 +1,20 @@ -import * as util from '../util'; +import * as typesUtil from '../util'; +import { InvalidStringError } from '../..'; +import { util as addressUtil } from '../../Address'; /** * mainnet or testnet address as bech32 string, consisting of * network tag, payment credential and optional stake credential */ -export type Address = util.OpaqueString<'Address'>; +export type Address = typesUtil.OpaqueString<'Address'>; /** - * @param {string} value mainnet or testnet address as bech32 string + * @param {string} value mainnet or testnet address * @throws InvalidStringError */ -export const Address = (value: string): Address => util.typedBech32(value, ['addr', 'addr_test'], [47, 92]); +export const Address = (value: string): Address => { + if (addressUtil.isAddress(value)) { + return value as unknown as Address; + } + throw new InvalidStringError(`Invalid address: ${value}`); +}; diff --git a/packages/core/test/Cardano/types/Address.test.ts b/packages/core/test/Cardano/types/Address.test.ts index 4fb27d7bcb2..1103fc8f217 100644 --- a/packages/core/test/Cardano/types/Address.test.ts +++ b/packages/core/test/Cardano/types/Address.test.ts @@ -1,25 +1,23 @@ import { Cardano } from '../../../src'; -jest.mock('../../../src/Cardano/util/primitives', () => { - const actual = jest.requireActual('../../../src/Cardano/util/primitives'); +// eslint-disable-next-line sonarjs/no-duplicate-string +jest.mock('../../../src/Address/util', () => { + const actual = jest.requireActual('../../../src/Address/util'); return { - typedBech32: jest.fn().mockImplementation((...args) => actual.typedBech32(...args)) + isAddress: jest.fn().mockImplementation((...args) => actual.isAddress(...args)) }; }); +const addressUtilMock = jest.requireMock('../../../src/Address/util'); describe('Cardano/types/Address', () => { - afterEach(() => (Cardano.util.typedBech32 as jest.Mock).mockReset()); - it('Address() accepts a valid mainnet grouped address and is implemented using util.typedBech32', () => { expect(() => Cardano.Address( 'addr1qx52knza2h5x090n4a5r7yraz3pwcamk9ppvuh7e26nfks7pnmhxqavtqy02zezklh27jt9r6z62sav3mugappdc7xnskxy2pn' ) ).not.toThrow(); - expect(Cardano.util.typedBech32).toBeCalledWith( - 'addr1qx52knza2h5x090n4a5r7yraz3pwcamk9ppvuh7e26nfks7pnmhxqavtqy02zezklh27jt9r6z62sav3mugappdc7xnskxy2pn', - ['addr', 'addr_test'], - [47, 92] + expect(addressUtilMock.isAddress).toBeCalledWith( + 'addr1qx52knza2h5x090n4a5r7yraz3pwcamk9ppvuh7e26nfks7pnmhxqavtqy02zezklh27jt9r6z62sav3mugappdc7xnskxy2pn' ); });