diff --git a/packages/cardano-services-client/CHANGELOG.md b/packages/cardano-services-client/CHANGELOG.md index 899a0339bc5..88e6b2bfb45 100644 --- a/packages/cardano-services-client/CHANGELOG.md +++ b/packages/cardano-services-client/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.26.12](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services-client@0.26.11...@cardano-sdk/cardano-services-client@0.26.12) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/cardano-services-client + +## [0.26.11](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services-client@0.26.10...@cardano-sdk/cardano-services-client@0.26.11) (2025-04-16) + +### Features + +* **cardano-services-client:** add a debug parameter to handle resolution call ([fa93255](https://github.com/input-output-hk/cardano-js-sdk/commit/fa93255b3ce7e4a4a2c0bc243101f7184be2fc22)) + ## [0.26.10](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services-client@0.26.9...@cardano-sdk/cardano-services-client@0.26.10) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/cardano-services-client diff --git a/packages/cardano-services-client/package.json b/packages/cardano-services-client/package.json index 97b05488d62..a15f41cf692 100644 --- a/packages/cardano-services-client/package.json +++ b/packages/cardano-services-client/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/cardano-services-client", - "version": "0.26.10", + "version": "0.26.12", "description": "Cardano Services Client", "engines": { "node": ">=16.20.2" diff --git a/packages/cardano-services-client/src/HandleProvider/handleHttpProvider.ts b/packages/cardano-services-client/src/HandleProvider/handleHttpProvider.ts index fa125d7e27c..d82f8a57b6b 100644 --- a/packages/cardano-services-client/src/HandleProvider/handleHttpProvider.ts +++ b/packages/cardano-services-client/src/HandleProvider/handleHttpProvider.ts @@ -11,6 +11,9 @@ export const handleHttpProvider = (config: CreateHttpProviderConfig({ ...config, apiVersion: config.apiVersion || apiVersion.handle, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + modifyData: (method: string | number | symbol, data: any) => + method === 'resolveHandles' ? { ...data, check_handle: true } : { ...data }, paths: handleProviderPaths, serviceSlug: 'handle' }); diff --git a/packages/cardano-services-client/src/HttpProvider.ts b/packages/cardano-services-client/src/HttpProvider.ts index 76ee5b18e5f..0fe6f8dc1f2 100644 --- a/packages/cardano-services-client/src/HttpProvider.ts +++ b/packages/cardano-services-client/src/HttpProvider.ts @@ -34,6 +34,9 @@ export interface HttpProviderConfig { /** Slug used in the URL path */ serviceSlug: string; + + /** Function to modify the input data before performing the HTTP request. */ + modifyData?: (method: string | number | symbol, data: any) => any; } /** The subset of parameters from HttpProviderConfig that must be set by the client code. */ @@ -55,6 +58,8 @@ const transformRequest: AxiosRequestTransformer = (data) => { return JSON.stringify(toSerializableObject(data)); }; +const defaultModifyData = (_method: string | number | symbol, data: any) => ({ ...data }); + /** * Creates a HTTP client for specified provider type, following some conventions: * - All methods use POST requests @@ -73,9 +78,12 @@ export const createHttpProvider = ({ paths, adapter, logger, + modifyData, serviceSlug -}: HttpProviderConfig): T => - new Proxy({} as T, { +}: HttpProviderConfig): T => { + const internalModifyData = modifyData || defaultModifyData; + + return new Proxy({} as T, { // eslint-disable-next-line sonarjs/cognitive-complexity get(_, prop) { const method = prop as keyof T; @@ -87,7 +95,7 @@ export const createHttpProvider = ({ ...axiosOptions, adapter, baseURL: `${baseUrl.replace(/\/$/, '')}/v${apiVersion}/${serviceSlug}`, - data: { ...args[0] }, + data: internalModifyData(method, args[0]), headers: { ...axiosOptions?.headers, 'Content-Type': 'application/json', @@ -127,3 +135,4 @@ export const createHttpProvider = ({ return prop in paths; } }); +}; diff --git a/packages/cardano-services-client/test/HandleProvider/handleHttpProvider.test.ts b/packages/cardano-services-client/test/HandleProvider/handleHttpProvider.test.ts index 35d85dc8964..ef063b5c5bd 100644 --- a/packages/cardano-services-client/test/HandleProvider/handleHttpProvider.test.ts +++ b/packages/cardano-services-client/test/HandleProvider/handleHttpProvider.test.ts @@ -24,4 +24,15 @@ describe('handleHttpProvider', () => { axiosMock.onPost().replyOnce(200, []); await expect(provider.resolveHandles({ handles: [] })).resolves.toEqual([]); }); + + test('resolve handles has one more parameter', async () => { + const provider = handleHttpProvider(config); + + axiosMock.onPost().reply((cfg) => [200, cfg.data]); + + await expect(provider.resolveHandles({ handles: ['test'] })).resolves.toEqual({ + check_handle: true, + handles: ['test'] + }); + }); }); diff --git a/packages/cardano-services-client/test/HttpProvider.test.ts b/packages/cardano-services-client/test/HttpProvider.test.ts index 12f992895b5..b058dac7aea 100644 --- a/packages/cardano-services-client/test/HttpProvider.test.ts +++ b/packages/cardano-services-client/test/HttpProvider.test.ts @@ -13,9 +13,11 @@ const packageJson = require(path.join(__dirname, '..', 'package.json')); type ComplexArg2 = { map: Map }; type ComplexResponse = Map[]; +type OptionalParameters = { num?: number; str?: string }; interface TestProvider extends Provider { noArgsEmptyReturn(): Promise; complexArgsAndReturn({ arg1, arg2 }: { arg1: bigint; arg2: ComplexArg2 }): Promise; + optionalParameters(args: OptionalParameters): Promise; } const apiVersion = '1.0.0'; @@ -34,7 +36,8 @@ const createStubHttpProviderServer = async (port: number, urlPath: string, handl const stubProviderPaths = { complexArgsAndReturn: '/complex', healthCheck: '/health', - noArgsEmptyReturn: '/simple' + noArgsEmptyReturn: '/simple', + optionalParameters: '/optional' }; describe('createHttpProvider', () => { @@ -43,7 +46,7 @@ describe('createHttpProvider', () => { let closeServer: () => Promise; const createTxSubmitProviderClient = ( - config: Pick, 'axiosOptions' | 'mapError'> = {} + config: Pick, 'axiosOptions' | 'mapError' | 'modifyData'> = {} ) => createHttpProvider({ apiVersion, @@ -113,6 +116,31 @@ describe('createHttpProvider', () => { }); }); + describe('modifyData', () => { + beforeEach( + async () => + (closeServer = await createStubHttpProviderServer(port, stubProviderPaths.optionalParameters, (req, res) => + res.send(req.body) + )) + ); + + it("defaultModifyData doesn't change the input data", async () => { + const provider = createTxSubmitProviderClient(); + const data = { num: 23 }; + + const response = await provider.optionalParameters(data); + expect(response).toEqual(data); + }); + + it('modifyData changes the input data as expected', async () => { + const provider = createTxSubmitProviderClient({ modifyData: (_, data) => ({ ...data, added: true }) }); + const data = { num: 23 }; + + const response = await provider.optionalParameters(data); + expect(response).toEqual({ ...data, added: true }); + }); + }); + describe('errors', () => { describe('connection errors', () => { it('maps ECONNREFUSED and ENOTFOUND to ProviderError{ConnectionFailure}', async () => { diff --git a/packages/cardano-services/CHANGELOG.md b/packages/cardano-services/CHANGELOG.md index 52bf12fc153..d894ebd3469 100644 --- a/packages/cardano-services/CHANGELOG.md +++ b/packages/cardano-services/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.35.14](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services@0.35.13...@cardano-sdk/cardano-services@0.35.14) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/cardano-services + +## [0.35.13](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services@0.35.12...@cardano-sdk/cardano-services@0.35.13) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/cardano-services + ## [0.35.12](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/cardano-services@0.35.11...@cardano-sdk/cardano-services@0.35.12) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/cardano-services diff --git a/packages/cardano-services/package.json b/packages/cardano-services/package.json index 68c9f79f1c8..171af80928b 100644 --- a/packages/cardano-services/package.json +++ b/packages/cardano-services/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/cardano-services", - "version": "0.35.12", + "version": "0.35.14", "description": "Cardano GraphQL Services", "engines": { "node": ">=16.20.2" diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 089f69f5b96..239a1f86626 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.45.8](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/core@0.45.7...@cardano-sdk/core@0.45.8) (2025-04-17) + +### Features + +* **core:** add isBabbageOutput method to TransactionOutput class ([5fbe606](https://github.com/input-output-hk/cardano-js-sdk/commit/5fbe60625367504a9a58c2620759fe9e7b0de1ec)) + ## [0.45.7](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/core@0.45.6...@cardano-sdk/core@0.45.7) (2025-04-14) ### Features diff --git a/packages/core/package.json b/packages/core/package.json index d397094a953..a95139cf035 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/core", - "version": "0.45.7", + "version": "0.45.8", "description": "Core types and libraries for Cardano", "engines": { "node": ">=16.20.2" diff --git a/packages/core/src/Serialization/TransactionBody/TransactionOutput.ts b/packages/core/src/Serialization/TransactionBody/TransactionOutput.ts index 355198de125..5896a6f02d2 100644 --- a/packages/core/src/Serialization/TransactionBody/TransactionOutput.ts +++ b/packages/core/src/Serialization/TransactionBody/TransactionOutput.ts @@ -304,6 +304,16 @@ export class TransactionOutput { this.#scriptRef = script; } + /** + * Checks if the output is formatted as legacy array or babbage map. + * + * @returns true if the output is babbage format, false otherwise. + */ + isBabbageOutput(): boolean { + const reader = new CborReader(this.toCbor()); + return reader.peekState() === CborReaderState.StartMap; + } + /** * Gets the size of the serialized map. * diff --git a/packages/core/test/Serialization/TransactionBody/TransactionOutput.test.ts b/packages/core/test/Serialization/TransactionBody/TransactionOutput.test.ts index f8920f3c563..cc2190c60b6 100644 --- a/packages/core/test/Serialization/TransactionBody/TransactionOutput.test.ts +++ b/packages/core/test/Serialization/TransactionBody/TransactionOutput.test.ts @@ -396,5 +396,14 @@ describe('TransactionOutput', () => { expect(output.toCore()).toEqual(basicOutput); }); }); + + describe('isBabbageOutput', () => { + it('cant distinguish a babbage output from a legacy output', () => { + const babbageOut = TransactionOutput.fromCbor(babbageAllFieldsCbor); + const legacyOutput = TransactionOutput.fromCbor(legacyOutputNoDatumCbor); + expect(babbageOut.isBabbageOutput()).toBe(true); + expect(legacyOutput.isBabbageOutput()).toBe(false); + }); + }); }); }); diff --git a/packages/dapp-connector/CHANGELOG.md b/packages/dapp-connector/CHANGELOG.md index 863ac939943..d78b9e966c1 100644 --- a/packages/dapp-connector/CHANGELOG.md +++ b/packages/dapp-connector/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.13.11](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/dapp-connector@0.13.10...@cardano-sdk/dapp-connector@0.13.11) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/dapp-connector + ## [0.13.10](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/dapp-connector@0.13.9...@cardano-sdk/dapp-connector@0.13.10) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/dapp-connector diff --git a/packages/dapp-connector/package.json b/packages/dapp-connector/package.json index 8fd4786efd0..22d195bbe48 100644 --- a/packages/dapp-connector/package.json +++ b/packages/dapp-connector/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/dapp-connector", - "version": "0.13.10", + "version": "0.13.11", "description": "TypeScript definitions for the dApp Connector standard CIP30", "engines": { "node": ">=16.20.2" diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md index 1eebecf8a53..363f622cf7d 100644 --- a/packages/e2e/CHANGELOG.md +++ b/packages/e2e/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.52.23](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/e2e@0.52.22...@cardano-sdk/e2e@0.52.23) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/e2e + +## [0.52.22](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/e2e@0.52.21...@cardano-sdk/e2e@0.52.22) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/e2e + ## [0.52.21](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/e2e@0.52.20...@cardano-sdk/e2e@0.52.21) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/e2e diff --git a/packages/e2e/package.json b/packages/e2e/package.json index 50d1dc6fa66..1a1999bb944 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/e2e", - "version": "0.52.21", + "version": "0.52.23", "description": "End to end tests for the cardano-js-sdk packages.", "repository": "https://github.com/input-output-hk/cardano-js-sdk", "license": "Apache-2.0", diff --git a/packages/golden-test-generator/CHANGELOG.md b/packages/golden-test-generator/CHANGELOG.md index affda46edce..7288a93b168 100644 --- a/packages/golden-test-generator/CHANGELOG.md +++ b/packages/golden-test-generator/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.36](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/golden-test-generator@0.8.35...@cardano-sdk/golden-test-generator@0.8.36) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/golden-test-generator + +## [0.8.35](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/golden-test-generator@0.8.34...@cardano-sdk/golden-test-generator@0.8.35) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/golden-test-generator + ## [0.8.34](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/golden-test-generator@0.8.33...@cardano-sdk/golden-test-generator@0.8.34) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/golden-test-generator diff --git a/packages/golden-test-generator/package.json b/packages/golden-test-generator/package.json index 1047d00cb03..88552e833ff 100644 --- a/packages/golden-test-generator/package.json +++ b/packages/golden-test-generator/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/golden-test-generator", - "version": "0.8.34", + "version": "0.8.36", "description": "Generate golden test files for a range of Cardano concepts", "engines": { "node": ">=16.20.2" diff --git a/packages/governance/CHANGELOG.md b/packages/governance/CHANGELOG.md index 3b69c3a0397..8be2d2046bd 100644 --- a/packages/governance/CHANGELOG.md +++ b/packages/governance/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.11.10](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/governance@0.11.9...@cardano-sdk/governance@0.11.10) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/governance + ## [0.11.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/governance@0.11.8...@cardano-sdk/governance@0.11.9) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/governance diff --git a/packages/governance/package.json b/packages/governance/package.json index 33d5a116400..5549768a34b 100644 --- a/packages/governance/package.json +++ b/packages/governance/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/governance", - "version": "0.11.9", + "version": "0.11.10", "description": "Governance types and utilities for Cardano", "engines": { "node": ">=16.20.2" diff --git a/packages/hardware-ledger/CHANGELOG.md b/packages/hardware-ledger/CHANGELOG.md index 21b34326111..3a8af143724 100644 --- a/packages/hardware-ledger/CHANGELOG.md +++ b/packages/hardware-ledger/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.15.10](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/hardware-ledger@0.15.9...@cardano-sdk/hardware-ledger@0.15.10) (2025-04-17) + +### Bug Fixes + +* **hardware-ledger:** transaction outputs format are now computed independently ([ed91155](https://github.com/input-output-hk/cardano-js-sdk/commit/ed91155d6bada948d1dccf1e37d1ca6e784d6683)) + ## [0.15.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/hardware-ledger@0.15.8...@cardano-sdk/hardware-ledger@0.15.9) (2025-04-14) ### Bug Fixes diff --git a/packages/hardware-ledger/package.json b/packages/hardware-ledger/package.json index e37148b061d..2b54fc2efab 100644 --- a/packages/hardware-ledger/package.json +++ b/packages/hardware-ledger/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/hardware-ledger", - "version": "0.15.9", + "version": "0.15.10", "description": "Mappings and integration with Ledger hardware", "engines": { "node": ">=16.20.2" diff --git a/packages/hardware-ledger/src/LedgerKeyAgent.ts b/packages/hardware-ledger/src/LedgerKeyAgent.ts index 1afb466d6a1..057df404063 100644 --- a/packages/hardware-ledger/src/LedgerKeyAgent.ts +++ b/packages/hardware-ledger/src/LedgerKeyAgent.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import * as Crypto from '@cardano-sdk/crypto'; +import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano'; import { AlgorithmId, CBORValue, @@ -720,13 +721,21 @@ export class LedgerKeyAgent extends KeyAgentBase { const dRepPublicKey = await this.derivePublicKey(util.DREP_KEY_DERIVATION_PATH); const dRepKeyHashHex = (await Crypto.Ed25519PublicKey.fromHex(dRepPublicKey).hash()).hex(); + const outputsFormat = txBody + .outputs() + .map((out) => (out.isBabbageOutput() ? Ledger.TxOutputFormat.MAP_BABBAGE : Ledger.TxOutputFormat.ARRAY_LEGACY)); + const collateralReturnFormat = txBody.collateralReturn()?.isBabbageOutput() + ? Ledger.TxOutputFormat.MAP_BABBAGE + : Ledger.TxOutputFormat.ARRAY_LEGACY; + const ledgerTxData = await toLedgerTx(body, { accountIndex: this.accountIndex, chainId: this.chainId, + collateralReturnFormat, dRepKeyHashHex, knownAddresses, - txInKeyPathMap, - useBabbageOutputs: txBody.hasBabbageOutput() + outputsFormat, + txInKeyPathMap }); const deviceConnection = await LedgerKeyAgent.checkDeviceConnection( diff --git a/packages/hardware-ledger/src/transformers/collateralOutput.ts b/packages/hardware-ledger/src/transformers/collateralOutput.ts index 55404236b2f..3917df739b4 100644 --- a/packages/hardware-ledger/src/transformers/collateralOutput.ts +++ b/packages/hardware-ledger/src/transformers/collateralOutput.ts @@ -3,4 +3,4 @@ import { LedgerTxTransformerContext } from '../types'; import { toTxOut } from './txOut'; export const mapCollateralTxOut = (collateralTxOut: Cardano.TxOut | undefined, context: LedgerTxTransformerContext) => - collateralTxOut ? toTxOut(collateralTxOut, context) : null; + collateralTxOut ? toTxOut({ index: 0, isCollateral: true, txOut: collateralTxOut }, context) : null; diff --git a/packages/hardware-ledger/src/transformers/txOut.ts b/packages/hardware-ledger/src/transformers/txOut.ts index e8e6509600d..27d9aa6414a 100644 --- a/packages/hardware-ledger/src/transformers/txOut.ts +++ b/packages/hardware-ledger/src/transformers/txOut.ts @@ -56,27 +56,33 @@ const getScriptHex = (output: Serialization.TransactionOutput): HexBlob | null = return scriptRef.toCbor(); }; -export const toTxOut: Transform = (txOut, context) => { +export const toTxOut: Transform< + { txOut: Cardano.TxOut; index: number; isCollateral: boolean }, + Ledger.TxOutput, + LedgerTxTransformerContext +> = (elem, context) => { + const { txOut, index, isCollateral } = elem; const output = Serialization.TransactionOutput.fromCore(txOut); const scriptHex = getScriptHex(output); + const format = isCollateral ? context?.collateralReturnFormat : context?.outputsFormat[index]; + const isBabbageFormat = format === Ledger.TxOutputFormat.MAP_BABBAGE; - return context?.useBabbageOutputs - ? { - amount: txOut.value.coins, - datum: txOut.datumHash ? toDatumHash(txOut.datumHash) : txOut.datum ? toInlineDatum(txOut.datum) : null, - destination: toDestination(txOut, context), - format: Ledger.TxOutputFormat.MAP_BABBAGE, - referenceScriptHex: scriptHex, - tokenBundle: mapTokenMap(txOut.value.assets) - } - : { - amount: txOut.value.coins, - datumHashHex: txOut.datumHash ? txOut.datumHash : null, - destination: toDestination(txOut, context), - format: Ledger.TxOutputFormat.ARRAY_LEGACY, - tokenBundle: mapTokenMap(txOut.value.assets) - }; + return { + amount: txOut.value.coins, + destination: toDestination(txOut, context), + tokenBundle: mapTokenMap(txOut.value.assets), + ...(isBabbageFormat + ? { + datum: txOut.datumHash ? toDatumHash(txOut.datumHash) : txOut.datum ? toInlineDatum(txOut.datum) : null, + format: Ledger.TxOutputFormat.MAP_BABBAGE, + referenceScriptHex: scriptHex + } + : { + datumHashHex: txOut.datumHash ?? null, + format: Ledger.TxOutputFormat.ARRAY_LEGACY + }) + }; }; export const mapTxOuts = (txOuts: Cardano.TxOut[], context: LedgerTxTransformerContext): Ledger.TxOutput[] => - txOuts.map((txOut) => toTxOut(txOut, context)); + txOuts.map((txOut, index) => toTxOut({ index, isCollateral: false, txOut }, context)); diff --git a/packages/hardware-ledger/src/types.ts b/packages/hardware-ledger/src/types.ts index bd784fd5e89..3bd37bec4f9 100644 --- a/packages/hardware-ledger/src/types.ts +++ b/packages/hardware-ledger/src/types.ts @@ -1,6 +1,7 @@ import { Cardano } from '@cardano-sdk/core'; import { HID } from 'node-hid'; import { SignTransactionContext } from '@cardano-sdk/key-management'; +import { TxOutputFormat } from '@cardano-foundation/ledgerjs-hw-app-cardano'; import TransportNodeHid from '@ledgerhq/hw-transport-node-hid-noevents'; import TransportWebUSB from '@ledgerhq/hw-transport-webusb'; @@ -21,6 +22,8 @@ export type LedgerTxTransformerContext = { chainId: Cardano.ChainId; /** Non-hardened account in cip1852 */ accountIndex: number; - /** Whether to use Babbage output format or not. */ - useBabbageOutputs: boolean; + /** The outputs format in the same order as they appear in the transaction. */ + outputsFormat: Array; + /** The collateral return output format. */ + collateralReturnFormat: TxOutputFormat | undefined; } & SignTransactionContext; diff --git a/packages/hardware-ledger/test/testData.ts b/packages/hardware-ledger/test/testData.ts index 394e6d9540c..f9f084e48ce 100644 --- a/packages/hardware-ledger/test/testData.ts +++ b/packages/hardware-ledger/test/testData.ts @@ -1,4 +1,5 @@ import * as Crypto from '@cardano-sdk/crypto'; +import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano'; import { AddressType, KeyRole } from '@cardano-sdk/key-management'; import { Base64Blob, HexBlob } from '@cardano-sdk/util'; import { Cardano, Serialization } from '@cardano-sdk/core'; @@ -342,6 +343,7 @@ export const CONTEXT_WITH_KNOWN_ADDRESSES: LedgerTxTransformerContext = { networkId: Cardano.NetworkId.Testnet, networkMagic: 999 }, + collateralReturnFormat: Ledger.TxOutputFormat.MAP_BABBAGE, dRepKeyHashHex: Crypto.Ed25519KeyHashHex(dRepCredential.hash), knownAddresses: [ { @@ -357,8 +359,8 @@ export const CONTEXT_WITH_KNOWN_ADDRESSES: LedgerTxTransformerContext = { type: AddressType.Internal } ], - txInKeyPathMap: {}, - useBabbageOutputs: true + outputsFormat: [Ledger.TxOutputFormat.ARRAY_LEGACY, Ledger.TxOutputFormat.MAP_BABBAGE], + txInKeyPathMap: {} }; export const CONTEXT_WITHOUT_KNOWN_ADDRESSES: LedgerTxTransformerContext = { @@ -367,9 +369,10 @@ export const CONTEXT_WITHOUT_KNOWN_ADDRESSES: LedgerTxTransformerContext = { networkId: Cardano.NetworkId.Testnet, networkMagic: 999 }, + collateralReturnFormat: Ledger.TxOutputFormat.ARRAY_LEGACY, knownAddresses: [], - txInKeyPathMap: {}, - useBabbageOutputs: true + outputsFormat: [Ledger.TxOutputFormat.ARRAY_LEGACY, Ledger.TxOutputFormat.MAP_BABBAGE], + txInKeyPathMap: {} }; export const votes = [ diff --git a/packages/hardware-ledger/test/transformers/certificates.test.ts b/packages/hardware-ledger/test/transformers/certificates.test.ts index de53e8cfb4e..d3450d6b5ad 100644 --- a/packages/hardware-ledger/test/transformers/certificates.test.ts +++ b/packages/hardware-ledger/test/transformers/certificates.test.ts @@ -73,20 +73,21 @@ export const createTxInKeyPathMapMock = (knownAddresses: GroupedAddress[]): TxIn const mockContext: LedgerTxTransformerContext = { accountIndex: 0, chainId: createChainId(1, 764_824_073), + collateralReturnFormat: Ledger.TxOutputFormat.ARRAY_LEGACY, + dRepKeyHashHex: undefined, handleResolutions: [], - knownAddresses: [ createGroupedAddress(address1, ownRewardAccount, AddressType.External, 0, stakeKeyPath), createGroupedAddress(address2, ownRewardAccount, AddressType.External, 1, stakeKeyPath) ], + outputsFormat: [Ledger.TxOutputFormat.ARRAY_LEGACY, Ledger.TxOutputFormat.MAP_BABBAGE], sender: undefined, txInKeyPathMap: createTxInKeyPathMapMock([ createGroupedAddress(address1, ownRewardAccount, AddressType.External, 0, stakeKeyPath), createGroupedAddress(address2, ownRewardAccount, AddressType.External, 1, stakeKeyPath) - ]), - useBabbageOutputs: true + ]) }; const EXAMPLE_URL = 'https://example.com'; diff --git a/packages/hardware-ledger/test/transformers/tx.test.ts b/packages/hardware-ledger/test/transformers/tx.test.ts index c74f3e7e99c..1d3eb25182d 100644 --- a/packages/hardware-ledger/test/transformers/tx.test.ts +++ b/packages/hardware-ledger/test/transformers/tx.test.ts @@ -15,8 +15,7 @@ describe('tx', () => { txInKeyPathMap: { [TxInId(tx.body.inputs[0])]: paymentKeyPath, [TxInId(tx.body.collaterals![0])]: paymentKeyPath - }, - useBabbageOutputs: false + } }) ).toEqual({ auxiliaryData: { @@ -181,6 +180,7 @@ describe('tx', () => { expect( await toLedgerTx(babbageTxWithoutScript.body, { ...CONTEXT_WITH_KNOWN_ADDRESSES, + outputsFormat: [Ledger.TxOutputFormat.MAP_BABBAGE], txInKeyPathMap: { [TxInId(babbageTxWithoutScript.body.inputs[0])]: paymentKeyPath } @@ -266,12 +266,7 @@ describe('tx', () => { ] }; - expect( - await toLedgerTx(txBodyWithRegistrationCert, { - ...CONTEXT_WITH_KNOWN_ADDRESSES, - useBabbageOutputs: false - }) - ).toEqual({ + expect(await toLedgerTx(txBodyWithRegistrationCert, CONTEXT_WITH_KNOWN_ADDRESSES)).toEqual({ auxiliaryData: { params: { hashHex: '2ceb364d93225b4a0f004a0975a13eb50c3cc6348474b4fe9121f8dc72ca0cfa' diff --git a/packages/hardware-ledger/test/transformers/txOut.test.ts b/packages/hardware-ledger/test/transformers/txOut.test.ts index 97c09dbe46c..cfe9d3d7137 100644 --- a/packages/hardware-ledger/test/transformers/txOut.test.ts +++ b/packages/hardware-ledger/test/transformers/txOut.test.ts @@ -18,7 +18,14 @@ describe('txOut', () => { txOutWithReferenceScriptWithInlineDatum, txOutWithReferenceScriptWithInlineDatum ], - CONTEXT_WITH_KNOWN_ADDRESSES + { + ...CONTEXT_WITH_KNOWN_ADDRESSES, + outputsFormat: [ + Ledger.TxOutputFormat.MAP_BABBAGE, + Ledger.TxOutputFormat.MAP_BABBAGE, + Ledger.TxOutputFormat.MAP_BABBAGE + ] + } ); expect(txOuts.length).toEqual(3); @@ -64,7 +71,7 @@ describe('txOut', () => { describe('toTxOut', () => { it('can map a simple txOut to third party address', async () => { - const out = toTxOut(txOut, { ...CONTEXT_WITH_KNOWN_ADDRESSES, useBabbageOutputs: false }); + const out = toTxOut({ index: 0, isCollateral: false, txOut }, CONTEXT_WITH_KNOWN_ADDRESSES); expect(out).toEqual({ amount: 10n, @@ -114,7 +121,7 @@ describe('txOut', () => { }); it('can map a simple txOut to owned address', async () => { - const out = toTxOut(txOutToOwnedAddress, { ...CONTEXT_WITH_KNOWN_ADDRESSES, useBabbageOutputs: false }); + const out = toTxOut({ index: 0, isCollateral: false, txOut: txOutToOwnedAddress }, CONTEXT_WITH_KNOWN_ADDRESSES); expect(out).toEqual({ amount: 10n, @@ -179,7 +186,10 @@ describe('txOut', () => { }); it('can map a txOut with a reference script - datum hash', async () => { - const out = toTxOut(txOutWithReferenceScript, CONTEXT_WITH_KNOWN_ADDRESSES); + const out = toTxOut( + { index: 1, isCollateral: false, txOut: txOutWithReferenceScript }, + CONTEXT_WITH_KNOWN_ADDRESSES + ); expect(out).toEqual({ amount: 10n, @@ -216,7 +226,10 @@ describe('txOut', () => { }); it('can map a txOut with a reference script - inline datum', async () => { - const out = toTxOut(txOutWithReferenceScriptWithInlineDatum, CONTEXT_WITH_KNOWN_ADDRESSES); + const out = toTxOut( + { index: 1, isCollateral: false, txOut: txOutWithReferenceScriptWithInlineDatum }, + CONTEXT_WITH_KNOWN_ADDRESSES + ); expect(out).toEqual({ amount: 10n, diff --git a/packages/hardware-trezor/CHANGELOG.md b/packages/hardware-trezor/CHANGELOG.md index eb48f54ff87..cae65c37078 100644 --- a/packages/hardware-trezor/CHANGELOG.md +++ b/packages/hardware-trezor/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/hardware-trezor@0.7.8...@cardano-sdk/hardware-trezor@0.7.9) (2025-04-17) + +### Bug Fixes + +* **hardware-trezor:** transaction outputs format are now computed independently ([1723cb0](https://github.com/input-output-hk/cardano-js-sdk/commit/1723cb052db6cc0c603403bdc605f9b6fcc566e8)) + ## [0.7.8](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/hardware-trezor@0.7.7...@cardano-sdk/hardware-trezor@0.7.8) (2025-04-14) ### Bug Fixes diff --git a/packages/hardware-trezor/package.json b/packages/hardware-trezor/package.json index b250d87f82a..e11ee7ea940 100644 --- a/packages/hardware-trezor/package.json +++ b/packages/hardware-trezor/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/hardware-trezor", - "version": "0.7.8", + "version": "0.7.9", "description": "Mappings and integration with Trezor hardware", "engines": { "node": ">=16.20.1" diff --git a/packages/hardware-trezor/src/TrezorKeyAgent.ts b/packages/hardware-trezor/src/TrezorKeyAgent.ts index 9f2ad332edf..07a0edcb061 100644 --- a/packages/hardware-trezor/src/TrezorKeyAgent.ts +++ b/packages/hardware-trezor/src/TrezorKeyAgent.ts @@ -246,13 +246,25 @@ export class TrezorKeyAgent extends KeyAgentBase { const body = txBody.toCore(); const hash = txBody.hash() as unknown as HexBlob; + const outputsFormat = txBody + .outputs() + .map((out) => + out.isBabbageOutput() + ? Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + : Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ); + const collateralReturnFormat = txBody.collateralReturn()?.isBabbageOutput() + ? Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + : Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY; + const trezorTxData = await txToTrezor(body, { accountIndex: this.accountIndex, chainId: this.chainId, + collateralReturnFormat, knownAddresses, + outputsFormat, tagCborSets: txBody.hasTaggedSets(), - txInKeyPathMap, - useBabbageOutputs: txBody.hasBabbageOutput() + txInKeyPathMap }); const signingMode = TrezorKeyAgent.matchSigningMode(trezorTxData); diff --git a/packages/hardware-trezor/src/transformers/tx.ts b/packages/hardware-trezor/src/transformers/tx.ts index 3a78e3b9db3..97555ee8f5b 100644 --- a/packages/hardware-trezor/src/transformers/tx.ts +++ b/packages/hardware-trezor/src/transformers/tx.ts @@ -19,7 +19,7 @@ export const trezorTxTransformer: Transformer< certificates: ({ certificates }, context) => (certificates ? mapCerts(certificates, context!) : undefined), collateralInputs: ({ collaterals }, context) => (collaterals ? mapTxIns(collaterals, context!) : undefined), collateralReturn: ({ collateralReturn }, context) => - collateralReturn ? toTxOut(collateralReturn, context!) : undefined, + collateralReturn ? toTxOut({ index: 0, isCollateral: true, txOut: collateralReturn }, context!) : undefined, fee: ({ fee }) => fee.toString(), inputs: ({ inputs }, context) => mapTxIns(inputs, context!), mint: ({ mint }) => mapTokenMap(mint, true), diff --git a/packages/hardware-trezor/src/transformers/txOut.ts b/packages/hardware-trezor/src/transformers/txOut.ts index 1772d2d6aa2..891c33978f8 100644 --- a/packages/hardware-trezor/src/transformers/txOut.ts +++ b/packages/hardware-trezor/src/transformers/txOut.ts @@ -42,31 +42,27 @@ const getScriptHex = (output: Serialization.TransactionOutput): HexBlob | undefi const getInlineDatum = (datum: Cardano.PlutusData): string => Serialization.PlutusData.fromCore(datum).toCbor(); -export const toTxOut: Transform = (txOut, context) => { - const destination = toDestination(txOut, context); +export const toTxOut: Transform< + { txOut: Cardano.TxOut; index: number; isCollateral: boolean }, + Trezor.CardanoOutput, + TrezorTxTransformerContext +> = (elem, context) => { + const { txOut, index, isCollateral } = elem; const output = Serialization.TransactionOutput.fromCore(txOut); const scriptHex = getScriptHex(output); + const format = isCollateral ? context?.collateralReturnFormat : context?.outputsFormat[index]; + const isBabbage = format === Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE; - return context?.useBabbageOutputs - ? { - ...destination, - amount: txOut.value.coins.toString(), - datumHash: txOut.datumHash?.toString(), - format: Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, - inlineDatum: txOut.datum ? getInlineDatum(txOut.datum) : undefined, - referenceScript: scriptHex, - tokenBundle: mapTokenMap(txOut.value.assets) - } - : { - ...destination, - amount: txOut.value.coins.toString(), - datumHash: txOut.datumHash?.toString(), - format: Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, - inlineDatum: undefined, - referenceScript: undefined, - tokenBundle: mapTokenMap(txOut.value.assets) - }; + return { + ...toDestination(txOut, context), + amount: txOut.value.coins.toString(), + datumHash: txOut.datumHash?.toString(), + format, + inlineDatum: isBabbage ? (txOut.datum ? getInlineDatum(txOut.datum) : undefined) : undefined, + referenceScript: isBabbage ? scriptHex : undefined, + tokenBundle: mapTokenMap(txOut.value.assets) + }; }; export const mapTxOuts = (txOuts: Cardano.TxOut[], context: TrezorTxTransformerContext): Trezor.CardanoOutput[] => - txOuts.map((txOut) => toTxOut(txOut, context)); + txOuts.map((txOut, index) => toTxOut({ index, isCollateral: false, txOut }, context)); diff --git a/packages/hardware-trezor/src/types.ts b/packages/hardware-trezor/src/types.ts index c82ba49e6b5..8d4825d1e40 100644 --- a/packages/hardware-trezor/src/types.ts +++ b/packages/hardware-trezor/src/types.ts @@ -13,8 +13,10 @@ export type TrezorTxTransformerContext = { accountIndex: number; /** Whether sets should be encoded as tagged set in CBOR */ tagCborSets: boolean; - /** Whether to use Babbage output format or not. */ - useBabbageOutputs: boolean; + /** The outputs format in the same order as they appear in the transaction. */ + outputsFormat: Array; + /** The collateral return output format. */ + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat | undefined; } & SignTransactionContext; export type TrezorTxOutputDestination = diff --git a/packages/hardware-trezor/test/testData.ts b/packages/hardware-trezor/test/testData.ts index 98006b0a91b..33fa73f50fa 100644 --- a/packages/hardware-trezor/test/testData.ts +++ b/packages/hardware-trezor/test/testData.ts @@ -1,4 +1,5 @@ import * as Crypto from '@cardano-sdk/crypto'; +import * as Trezor from '@trezor/connect'; import { AddressType, GroupedAddress, KeyRole } from '@cardano-sdk/key-management'; import { Cardano } from '@cardano-sdk/core'; import { HexBlob } from '@cardano-sdk/util'; @@ -169,10 +170,15 @@ export const contextWithKnownAddresses: TrezorTxTransformerContext = { networkId: Cardano.NetworkId.Testnet, networkMagic: 999 }, + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, knownAddresses: [knownAddress], + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ], tagCborSets: false, - txInKeyPathMap: {}, - useBabbageOutputs: false + txInKeyPathMap: {} }; export const contextWithKnownAddressesWithoutStakingCredentials: TrezorTxTransformerContext = { @@ -181,10 +187,14 @@ export const contextWithKnownAddressesWithoutStakingCredentials: TrezorTxTransfo networkId: Cardano.NetworkId.Testnet, networkMagic: 999 }, + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, knownAddresses: [knownAddressWithoutStakingPath], + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + ], tagCborSets: false, - txInKeyPathMap: {}, - useBabbageOutputs: false + txInKeyPathMap: {} }; export const contextWithoutKnownAddresses: TrezorTxTransformerContext = { @@ -193,10 +203,14 @@ export const contextWithoutKnownAddresses: TrezorTxTransformerContext = { networkId: Cardano.NetworkId.Testnet, networkMagic: 999 }, + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, knownAddresses: [], + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + ], tagCborSets: false, - txInKeyPathMap: {}, - useBabbageOutputs: false + txInKeyPathMap: {} }; export const coreWithdrawalWithKeyHashCredential = { diff --git a/packages/hardware-trezor/test/transformers/tx.test.ts b/packages/hardware-trezor/test/transformers/tx.test.ts index 19d05c16357..8a77de863f7 100644 --- a/packages/hardware-trezor/test/transformers/tx.test.ts +++ b/packages/hardware-trezor/test/transformers/tx.test.ts @@ -4,6 +4,7 @@ import { babbageTxBodyWithScripts, contextWithKnownAddresses, contextWithoutKnownAddresses, + knownAddress, knownAddressKeyPath, knownAddressPaymentKeyPath, knownAddressStakeKeyPath, @@ -45,6 +46,11 @@ describe('tx', () => { expect( await txToTrezor(txBody, { ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ], txInKeyPathMap: { [TxInId(txBody.inputs[0])]: knownAddressPaymentKeyPath } }) ).toEqual({ @@ -202,10 +208,13 @@ describe('tx', () => { expect( await txToTrezor(babbageTxBodyWithScripts, { ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + ], txInKeyPathMap: { [TxInId(babbageTxBodyWithScripts.inputs[0])]: knownAddressPaymentKeyPath - }, - useBabbageOutputs: true + } }) ).toEqual({ additionalWitnessRequests: [ @@ -286,7 +295,12 @@ describe('tx', () => { }); test('can map transaction with collaterals', async () => { - expect(await txToTrezor(txBodyWithCollaterals, contextWithoutKnownAddresses)).toEqual({ + expect( + await txToTrezor(txBodyWithCollaterals, { + ...contextWithoutKnownAddresses, + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + }) + ).toEqual({ additionalWitnessRequests: [], collateralInputs: [ { @@ -325,11 +339,16 @@ describe('tx', () => { expect( await txToTrezor(plutusTxWithBabbage, { ...contextWithKnownAddresses, + collateralReturnFormat: Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, + knownAddresses: [knownAddress], + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE, + Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE + ], txInKeyPathMap: { [TxInId(plutusTxWithBabbage.inputs[0])]: knownAddressPaymentKeyPath, [TxInId(plutusTxWithBabbage.collaterals[0])]: knownAddressPaymentKeyPath - }, - useBabbageOutputs: true + } }) ).toEqual({ additionalWitnessRequests: [ diff --git a/packages/hardware-trezor/test/transformers/txOut.test.ts b/packages/hardware-trezor/test/transformers/txOut.test.ts index aa7cb35b7c1..793acd870e1 100644 --- a/packages/hardware-trezor/test/transformers/txOut.test.ts +++ b/packages/hardware-trezor/test/transformers/txOut.test.ts @@ -19,7 +19,14 @@ import { mapTxOuts, toTxOut } from '../../src/transformers/txOut'; describe('txOut', () => { describe('mapTxOuts', () => { it('can map a set of transaction outputs to third party address', async () => { - const txOuts = mapTxOuts([txOut, txOut, txOut], contextWithKnownAddresses); + const txOuts = mapTxOuts([txOut, txOut, txOut], { + ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ] + }); expect(txOuts.length).toEqual(3); for (const out of txOuts) { @@ -33,7 +40,14 @@ describe('txOut', () => { }); it('can map a set of transaction outputs with assets to third party address', async () => { - const txOuts = mapTxOuts([txOutWithAssets, txOutWithAssets, txOutWithAssets], contextWithKnownAddresses); + const txOuts = mapTxOuts([txOutWithAssets, txOutWithAssets, txOutWithAssets], { + ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ] + }); expect(txOuts.length).toEqual(3); @@ -81,10 +95,14 @@ describe('txOut', () => { }); it('can map a set of transaction outputs to owned address', async () => { - const txOuts = mapTxOuts( - [txOutToOwnedAddress, txOutToOwnedAddress, txOutToOwnedAddress], - contextWithKnownAddresses - ); + const txOuts = mapTxOuts([txOutToOwnedAddress, txOutToOwnedAddress, txOutToOwnedAddress], { + ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ] + }); expect(txOuts.length).toEqual(3); @@ -104,7 +122,14 @@ describe('txOut', () => { it('can map a set of transaction outputs with assets to owned address', async () => { const txOuts = mapTxOuts( [txOutWithAssetsToOwnedAddress, txOutWithAssetsToOwnedAddress, txOutWithAssetsToOwnedAddress], - contextWithKnownAddresses + { + ...contextWithKnownAddresses, + outputsFormat: [ + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY, + Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY + ] + } ); expect(txOuts.length).toEqual(3); @@ -156,16 +181,14 @@ describe('txOut', () => { }); it('can map a set of transaction outputs with both output formats', async () => { - const legacyTxOuts = mapTxOuts([txOutWithDatumHashAndOwnedAddress], contextWithKnownAddresses); - - const babbageTxOuts = mapTxOuts([txOutWithReferenceScriptAndDatumHash], { - ...contextWithKnownAddresses, - useBabbageOutputs: true - }); + const txOuts = mapTxOuts( + [txOutWithDatumHashAndOwnedAddress, txOutWithReferenceScriptAndDatumHash], + contextWithKnownAddresses + ); - expect(legacyTxOuts.length).toEqual(1); + expect(txOuts.length).toEqual(2); - expect(legacyTxOuts).toEqual([ + expect(txOuts).toEqual([ { addressParameters: { addressType: Trezor.PROTO.CardanoAddressType.BASE, @@ -175,12 +198,7 @@ describe('txOut', () => { amount: '10', datumHash: '0f3abbc8fc19c2e61bab6059bf8a466e6e754833a08a62a6c56fe0e78f19d9d5', format: Trezor.PROTO.CardanoTxOutputSerializationFormat.ARRAY_LEGACY - } - ]); - - expect(babbageTxOuts.length).toEqual(1); - - expect(babbageTxOuts).toEqual([ + }, { addressParameters: { addressType: Trezor.PROTO.CardanoAddressType.BASE, @@ -198,7 +216,7 @@ describe('txOut', () => { describe('toTxOut', () => { it('can map a simple transaction output to third party address', async () => { - const out = toTxOut(txOut, contextWithKnownAddresses); + const out = toTxOut({ index: 0, isCollateral: false, txOut }, contextWithKnownAddresses); expect(out).toEqual({ address: 'addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp', @@ -208,7 +226,7 @@ describe('txOut', () => { }); it('can map a simple transaction output with assets to third party address', async () => { - const out = toTxOut(txOutWithAssets, contextWithKnownAddresses); + const out = toTxOut({ index: 0, isCollateral: false, txOut: txOutWithAssets }, contextWithKnownAddresses); expect(out).toEqual({ address: 'addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp', @@ -251,7 +269,7 @@ describe('txOut', () => { }); it('can map a simple transaction output to owned address', async () => { - const out = toTxOut(txOutToOwnedAddress, contextWithKnownAddresses); + const out = toTxOut({ index: 0, isCollateral: false, txOut: txOutToOwnedAddress }, contextWithKnownAddresses); expect(out).toEqual({ addressParameters: { @@ -265,7 +283,10 @@ describe('txOut', () => { }); it('can map a simple transaction output with assets to owned address', async () => { - const out = toTxOut(txOutWithAssetsToOwnedAddress, contextWithKnownAddresses); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithAssetsToOwnedAddress }, + contextWithKnownAddresses + ); expect(out).toEqual({ addressParameters: { @@ -312,7 +333,7 @@ describe('txOut', () => { }); it('can map simple transaction output with datum hash', async () => { - const out = toTxOut(txOutWithDatumHash, contextWithKnownAddresses); + const out = toTxOut({ index: 0, isCollateral: false, txOut: txOutWithDatumHash }, contextWithKnownAddresses); expect(out).toEqual({ address: @@ -324,7 +345,10 @@ describe('txOut', () => { }); it('can map simple transaction output with datum hash to owned address', async () => { - const out = toTxOut(txOutWithDatumHashAndOwnedAddress, contextWithKnownAddresses); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithDatumHashAndOwnedAddress }, + contextWithKnownAddresses + ); expect(out).toEqual({ addressParameters: { @@ -339,7 +363,10 @@ describe('txOut', () => { }); it('can map simple transaction with inline datum', async () => { - const out = toTxOut(txOutWithInlineDatum, { ...contextWithKnownAddresses, useBabbageOutputs: true }); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithInlineDatum }, + { ...contextWithKnownAddresses, outputsFormat: [Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE] } + ); expect(out).toEqual({ address: @@ -351,10 +378,10 @@ describe('txOut', () => { }); it('can map simple transaction with inline datum to owned address', async () => { - const out = toTxOut(txOutWithInlineDatumAndOwnedAddress, { - ...contextWithKnownAddresses, - useBabbageOutputs: true - }); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithInlineDatumAndOwnedAddress }, + { ...contextWithKnownAddresses, outputsFormat: [Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE] } + ); expect(out).toEqual({ addressParameters: { @@ -369,10 +396,11 @@ describe('txOut', () => { }); it('can map a simple transaction output with reference script and datum hash', async () => { - const out = toTxOut(txOutWithReferenceScriptAndDatumHash, { - ...contextWithKnownAddresses, - useBabbageOutputs: true - }); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithReferenceScriptAndDatumHash }, + { ...contextWithKnownAddresses, outputsFormat: [Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE] } + ); + expect(out).toEqual({ addressParameters: { addressType: Trezor.PROTO.CardanoAddressType.BASE, @@ -387,10 +415,11 @@ describe('txOut', () => { }); it('can map a simple transaction output with reference script and inline datum', async () => { - const out = toTxOut(txOutWithReferenceScriptAndInlineDatum, { - ...contextWithKnownAddresses, - useBabbageOutputs: true - }); + const out = toTxOut( + { index: 0, isCollateral: false, txOut: txOutWithReferenceScriptAndInlineDatum }, + { ...contextWithKnownAddresses, outputsFormat: [Trezor.PROTO.CardanoTxOutputSerializationFormat.MAP_BABBAGE] } + ); + expect(out).toEqual({ addressParameters: { addressType: Trezor.PROTO.CardanoAddressType.BASE, diff --git a/packages/input-selection/CHANGELOG.md b/packages/input-selection/CHANGELOG.md index 4bae52ae101..94c44af4d49 100644 --- a/packages/input-selection/CHANGELOG.md +++ b/packages/input-selection/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.14.10](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/input-selection@0.14.9...@cardano-sdk/input-selection@0.14.10) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/input-selection + ## [0.14.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/input-selection@0.14.8...@cardano-sdk/input-selection@0.14.9) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/input-selection diff --git a/packages/input-selection/package.json b/packages/input-selection/package.json index 092208b9737..a70c8297177 100644 --- a/packages/input-selection/package.json +++ b/packages/input-selection/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/input-selection", - "version": "0.14.9", + "version": "0.14.10", "description": "TypeScript definitions for input-selection (Coin Selection Algorithms for Cardano)", "engines": { "node": ">=16.20.2" diff --git a/packages/key-management/CHANGELOG.md b/packages/key-management/CHANGELOG.md index 891b6ded6ee..9bf331e229e 100644 --- a/packages/key-management/CHANGELOG.md +++ b/packages/key-management/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.27.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/key-management@0.27.8...@cardano-sdk/key-management@0.27.9) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/key-management + ## [0.27.8](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/key-management@0.27.7...@cardano-sdk/key-management@0.27.8) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/key-management diff --git a/packages/key-management/package.json b/packages/key-management/package.json index bf95e8156c4..ce41190a227 100644 --- a/packages/key-management/package.json +++ b/packages/key-management/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/key-management", - "version": "0.27.8", + "version": "0.27.9", "description": "Key management types and utilities for Cardano", "engines": { "node": ">=16.20.2" diff --git a/packages/ogmios/CHANGELOG.md b/packages/ogmios/CHANGELOG.md index 12a18bd958d..e847f3ced3a 100644 --- a/packages/ogmios/CHANGELOG.md +++ b/packages/ogmios/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.18.36](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/ogmios@0.18.35...@cardano-sdk/ogmios@0.18.36) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/ogmios + +## [0.18.35](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/ogmios@0.18.34...@cardano-sdk/ogmios@0.18.35) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/ogmios + ## [0.18.34](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/ogmios@0.18.33...@cardano-sdk/ogmios@0.18.34) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/ogmios diff --git a/packages/ogmios/package.json b/packages/ogmios/package.json index b0d48887b19..5aa2904fed1 100644 --- a/packages/ogmios/package.json +++ b/packages/ogmios/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/ogmios", - "version": "0.18.34", + "version": "0.18.36", "description": "Ogmios Providers", "engines": { "node": ">=16.20.2" diff --git a/packages/projection-typeorm/CHANGELOG.md b/packages/projection-typeorm/CHANGELOG.md index 5cd25fb32c0..8cca2faf4af 100644 --- a/packages/projection-typeorm/CHANGELOG.md +++ b/packages/projection-typeorm/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.9.36](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection-typeorm@0.9.35...@cardano-sdk/projection-typeorm@0.9.36) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/projection-typeorm + +## [0.9.35](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection-typeorm@0.9.34...@cardano-sdk/projection-typeorm@0.9.35) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/projection-typeorm + ## [0.9.34](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection-typeorm@0.9.33...@cardano-sdk/projection-typeorm@0.9.34) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/projection-typeorm diff --git a/packages/projection-typeorm/package.json b/packages/projection-typeorm/package.json index 11dd7439e2f..ee9a9ef2fdd 100644 --- a/packages/projection-typeorm/package.json +++ b/packages/projection-typeorm/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/projection-typeorm", - "version": "0.9.34", + "version": "0.9.36", "description": "Project Chain Sync events into PostgreSQL via TypeORM", "engines": { "node": ">=16.20.2" diff --git a/packages/projection/CHANGELOG.md b/packages/projection/CHANGELOG.md index e51a35ac535..faaccfc0985 100644 --- a/packages/projection/CHANGELOG.md +++ b/packages/projection/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.12.36](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection@0.12.35...@cardano-sdk/projection@0.12.36) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/projection + +## [0.12.35](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection@0.12.34...@cardano-sdk/projection@0.12.35) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/projection + ## [0.12.34](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/projection@0.12.33...@cardano-sdk/projection@0.12.34) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/projection diff --git a/packages/projection/package.json b/packages/projection/package.json index 6ee027a8a9b..63bf5651621 100644 --- a/packages/projection/package.json +++ b/packages/projection/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/projection", - "version": "0.12.34", + "version": "0.12.36", "description": "Chain Sync event projection", "repository": "https://github.com/input-output-hk/cardano-js-sdk", "license": "Apache-2.0", diff --git a/packages/tx-construction/CHANGELOG.md b/packages/tx-construction/CHANGELOG.md index 2241900dcbd..02164f08905 100644 --- a/packages/tx-construction/CHANGELOG.md +++ b/packages/tx-construction/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.26.9](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/tx-construction@0.26.8...@cardano-sdk/tx-construction@0.26.9) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/tx-construction + ## [0.26.8](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/tx-construction@0.26.7...@cardano-sdk/tx-construction@0.26.8) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/tx-construction diff --git a/packages/tx-construction/package.json b/packages/tx-construction/package.json index 7d84d6c55c4..6e1d57b97e9 100644 --- a/packages/tx-construction/package.json +++ b/packages/tx-construction/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/tx-construction", - "version": "0.26.8", + "version": "0.26.9", "description": "Types and functions for constructing transactions on Cardano", "engines": { "node": ">=16.20.2" diff --git a/packages/util-dev/CHANGELOG.md b/packages/util-dev/CHANGELOG.md index bf42098ebd4..4f1f660c9f6 100644 --- a/packages/util-dev/CHANGELOG.md +++ b/packages/util-dev/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.25.14](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/util-dev@0.25.13...@cardano-sdk/util-dev@0.25.14) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/util-dev + +## [0.25.13](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/util-dev@0.25.12...@cardano-sdk/util-dev@0.25.13) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/util-dev + ## [0.25.12](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/util-dev@0.25.11...@cardano-sdk/util-dev@0.25.12) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/util-dev diff --git a/packages/util-dev/package.json b/packages/util-dev/package.json index 177214199e4..cee6a4a3710 100644 --- a/packages/util-dev/package.json +++ b/packages/util-dev/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/util-dev", - "version": "0.25.12", + "version": "0.25.14", "description": "Utilities for tests in other packages", "repository": "https://github.com/input-output-hk/cardano-js-sdk", "license": "Apache-2.0", diff --git a/packages/util-rxjs/CHANGELOG.md b/packages/util-rxjs/CHANGELOG.md index aa45315b6cb..3955ce6979b 100644 --- a/packages/util-rxjs/CHANGELOG.md +++ b/packages/util-rxjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.9.13](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/util-rxjs@0.9.12...@cardano-sdk/util-rxjs@0.9.13) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/util-rxjs + ## [0.9.12](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/util-rxjs@0.9.11...@cardano-sdk/util-rxjs@0.9.12) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/util-rxjs diff --git a/packages/util-rxjs/package.json b/packages/util-rxjs/package.json index a7ed82dafb6..b3a5cfe1363 100644 --- a/packages/util-rxjs/package.json +++ b/packages/util-rxjs/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/util-rxjs", - "version": "0.9.12", + "version": "0.9.13", "description": "RxJS extensions", "engines": { "node": ">=16.20.2" diff --git a/packages/wallet/CHANGELOG.md b/packages/wallet/CHANGELOG.md index 23a8fd50435..a5f225444e4 100644 --- a/packages/wallet/CHANGELOG.md +++ b/packages/wallet/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.52.6](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/wallet@0.52.5...@cardano-sdk/wallet@0.52.6) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/wallet + +## [0.52.5](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/wallet@0.52.4...@cardano-sdk/wallet@0.52.5) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/wallet + ## [0.52.4](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/wallet@0.52.3...@cardano-sdk/wallet@0.52.4) (2025-04-14) ### Bug Fixes diff --git a/packages/wallet/package.json b/packages/wallet/package.json index 42a1530c912..79a65c5bc8d 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/wallet", - "version": "0.52.4", + "version": "0.52.6", "description": "Wallet modules", "engines": { "node": ">=16.20.2" diff --git a/packages/web-extension/CHANGELOG.md b/packages/web-extension/CHANGELOG.md index ebc3a45dc68..fc810b31cc2 100644 --- a/packages/web-extension/CHANGELOG.md +++ b/packages/web-extension/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.39.6](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/web-extension@0.39.5...@cardano-sdk/web-extension@0.39.6) (2025-04-17) + +**Note:** Version bump only for package @cardano-sdk/web-extension + +## [0.39.5](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/web-extension@0.39.4...@cardano-sdk/web-extension@0.39.5) (2025-04-16) + +**Note:** Version bump only for package @cardano-sdk/web-extension + ## [0.39.4](https://github.com/input-output-hk/cardano-js-sdk/compare/@cardano-sdk/web-extension@0.39.3...@cardano-sdk/web-extension@0.39.4) (2025-04-14) **Note:** Version bump only for package @cardano-sdk/web-extension diff --git a/packages/web-extension/package.json b/packages/web-extension/package.json index 8a1fa4d1f2b..0ffb3b6c5fb 100644 --- a/packages/web-extension/package.json +++ b/packages/web-extension/package.json @@ -1,6 +1,6 @@ { "name": "@cardano-sdk/web-extension", - "version": "0.39.4", + "version": "0.39.6", "description": "Web extension wallet utilities", "engines": { "node": ">=16.20.2"