Skip to content

Commit ca9bdb3

Browse files
authored
fix(sdk-coin-ada): add multiassets to outputs for sponsored transactions
2 parents 2156579 + 5dc94e4 commit ca9bdb3

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

modules/sdk-coin-ada/src/lib/transactionBuilder.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -499,9 +499,35 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder {
499499
let totalAmountToSend = CardanoWasm.BigNum.zero();
500500
this._transactionOutputs.forEach((output) => {
501501
const amount = CardanoWasm.BigNum.from_str(output.amount);
502-
outputs.add(
503-
CardanoWasm.TransactionOutput.new(util.getWalletAddress(output.address), CardanoWasm.Value.new(amount))
504-
);
502+
if (this._sponsorshipInfo && this._sponsorshipInfo.isRebuild && output.multiAssets) {
503+
let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
504+
const toAddress = util.getWalletAddress(output.address);
505+
txOutputBuilder = txOutputBuilder.with_address(toAddress);
506+
let txOutputAmountBuilder = txOutputBuilder.next();
507+
const multiAssets = output.multiAssets as CardanoWasm.MultiAsset;
508+
const multiAsset = CardanoWasm.MultiAsset.new();
509+
for (let i = 0; i < multiAssets.keys().len(); i++) {
510+
const policyId = multiAssets.keys().get(i);
511+
const assets = multiAssets.get(policyId);
512+
const asset = CardanoWasm.Assets.new();
513+
if (!assets) {
514+
continue;
515+
}
516+
const assetName = assets.keys().get(0);
517+
const quantity = assets.get(assetName);
518+
if (!quantity) {
519+
continue;
520+
}
521+
asset.insert(assetName, quantity);
522+
multiAsset.insert(policyId, asset);
523+
}
524+
txOutputAmountBuilder = txOutputAmountBuilder.with_coin_and_asset(amount, multiAsset);
525+
outputs.add(txOutputAmountBuilder.build());
526+
} else {
527+
outputs.add(
528+
CardanoWasm.TransactionOutput.new(util.getWalletAddress(output.address), CardanoWasm.Value.new(amount))
529+
);
530+
}
505531
totalAmountToSend = totalAmountToSend.checked_add(amount);
506532
});
507533

0 commit comments

Comments
 (0)