From 5dc94e411dc8ba93a1df40de51445562bf831a26 Mon Sep 17 00:00:00 2001 From: Veetrag Jain Date: Tue, 3 Feb 2026 17:05:40 +0530 Subject: [PATCH] fix(sdk-coin-ada): add multiassets to outputs for sponsored transactions Ticket: WIN-8841 --- .../src/lib/transactionBuilder.ts | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/modules/sdk-coin-ada/src/lib/transactionBuilder.ts b/modules/sdk-coin-ada/src/lib/transactionBuilder.ts index f511c0e58c..a2e500b8d2 100644 --- a/modules/sdk-coin-ada/src/lib/transactionBuilder.ts +++ b/modules/sdk-coin-ada/src/lib/transactionBuilder.ts @@ -499,9 +499,35 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { let totalAmountToSend = CardanoWasm.BigNum.zero(); this._transactionOutputs.forEach((output) => { const amount = CardanoWasm.BigNum.from_str(output.amount); - outputs.add( - CardanoWasm.TransactionOutput.new(util.getWalletAddress(output.address), CardanoWasm.Value.new(amount)) - ); + if (this._sponsorshipInfo && this._sponsorshipInfo.isRebuild && output.multiAssets) { + let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new(); + const toAddress = util.getWalletAddress(output.address); + txOutputBuilder = txOutputBuilder.with_address(toAddress); + let txOutputAmountBuilder = txOutputBuilder.next(); + const multiAssets = output.multiAssets as CardanoWasm.MultiAsset; + const multiAsset = CardanoWasm.MultiAsset.new(); + for (let i = 0; i < multiAssets.keys().len(); i++) { + const policyId = multiAssets.keys().get(i); + const assets = multiAssets.get(policyId); + const asset = CardanoWasm.Assets.new(); + if (!assets) { + continue; + } + const assetName = assets.keys().get(0); + const quantity = assets.get(assetName); + if (!quantity) { + continue; + } + asset.insert(assetName, quantity); + multiAsset.insert(policyId, asset); + } + txOutputAmountBuilder = txOutputAmountBuilder.with_coin_and_asset(amount, multiAsset); + outputs.add(txOutputAmountBuilder.build()); + } else { + outputs.add( + CardanoWasm.TransactionOutput.new(util.getWalletAddress(output.address), CardanoWasm.Value.new(amount)) + ); + } totalAmountToSend = totalAmountToSend.checked_add(amount); });