From f9da33b1c2a885addf77d324d6087e11ad155886 Mon Sep 17 00:00:00 2001 From: Ravi Hegde Date: Sun, 26 Oct 2025 14:09:52 +0530 Subject: [PATCH] feat(sdk-coin-canton): added acknowledgement data in transaction Ticket: COIN-6182 --- modules/sdk-coin-canton/src/lib/iface.ts | 2 ++ .../src/lib/transaction/transaction.ts | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/modules/sdk-coin-canton/src/lib/iface.ts b/modules/sdk-coin-canton/src/lib/iface.ts index 2437696f36..f54dce6a49 100644 --- a/modules/sdk-coin-canton/src/lib/iface.ts +++ b/modules/sdk-coin-canton/src/lib/iface.ts @@ -9,6 +9,7 @@ export interface TxData { type: TransactionType; sender: string; receiver: string; + acknowledgeData?: TransferAcknowledge; } export interface PreparedTxnParsedInfo { @@ -87,6 +88,7 @@ export interface PartySignature { } export interface TransactionBroadcastData { + acknowledgeData?: TransferAcknowledge; prepareCommandResponse?: CantonPrepareCommandResponse; txType: string; preparedTransaction?: string; diff --git a/modules/sdk-coin-canton/src/lib/transaction/transaction.ts b/modules/sdk-coin-canton/src/lib/transaction/transaction.ts index 201356d398..7cccd47324 100644 --- a/modules/sdk-coin-canton/src/lib/transaction/transaction.ts +++ b/modules/sdk-coin-canton/src/lib/transaction/transaction.ts @@ -6,6 +6,7 @@ import { PartySignature, PreparedTxnParsedInfo, TransactionBroadcastData, + TransferAcknowledge, TxData, } from '../iface'; import utils from '../utils'; @@ -14,6 +15,7 @@ import { DUMMY_HASH, HASHING_SCHEME_VERSION, SIGNATURE_ALGORITHM_SPEC, SIGNATURE export class Transaction extends BaseTransaction { private _prepareCommand: CantonPrepareCommandResponse; private _signerFingerprint: string; + private _acknowledgeData: TransferAcknowledge; constructor(coinConfig: Readonly) { super(coinConfig); @@ -31,6 +33,10 @@ export class Transaction extends BaseTransaction { this._type = transactionType; } + set acknowledgeData(data: TransferAcknowledge) { + this._acknowledgeData = data; + } + get id(): string { if (!this._id) { throw new InvalidTransactionError('transaction is is not set'); @@ -59,9 +65,13 @@ export class Transaction extends BaseTransaction { throw new InvalidTransactionError('Transaction type is not set'); } if (this._type === TransactionType.TransferAcknowledge) { + if (!this._acknowledgeData) { + throw new InvalidTransactionError('AcknowledgeData is not set'); + } const minData: TransactionBroadcastData = { txType: TransactionType[this._type], submissionId: this.id, + acknowledgeData: this._acknowledgeData, }; return Buffer.from(JSON.stringify(minData)).toString('base64'); } @@ -119,6 +129,10 @@ export class Transaction extends BaseTransaction { receiver: '', }; if (this._type === TransactionType.TransferAcknowledge) { + if (!this._acknowledgeData) { + throw new InvalidTransactionError('AcknowledgeData is not set'); + } + result.acknowledgeData = this._acknowledgeData; return result; } if (!this._prepareCommand || !this._prepareCommand.preparedTransaction) { @@ -159,6 +173,10 @@ export class Transaction extends BaseTransaction { this.signerFingerprint = decoded.partySignatures.signatures[0].party.split('::')[1]; this.signatures = decoded.partySignatures.signatures[0].signatures[0].signature; } + } else { + if (decoded.acknowledgeData) { + this.acknowledgeData = decoded.acknowledgeData; + } } } catch (e) { throw new InvalidTransactionError('Unable to parse raw transaction data');