diff --git a/packages/chains/cardano/lib/CardanoChain.ts b/packages/chains/cardano/lib/CardanoChain.ts index e5a712f..0aec409 100644 --- a/packages/chains/cardano/lib/CardanoChain.ts +++ b/packages/chains/cardano/lib/CardanoChain.ts @@ -225,31 +225,10 @@ class CardanoChain extends AbstractUtxoChain { ); // create change output - const changeBoxMultiAsset = CardanoWasm.MultiAsset.new(); - remainingAssets.tokens.forEach((asset) => { - const assetInfo = asset.id.split('.'); - const policyId: CardanoWasm.ScriptHash = CardanoWasm.ScriptHash.from_hex( - assetInfo[0] - ); - const assetName: CardanoWasm.AssetName = CardanoWasm.AssetName.new( - Buffer.from(assetInfo[1], 'hex') - ); - changeBoxMultiAsset.set_asset( - policyId, - assetName, - CardanoUtils.bigIntToBigNum(asset.value) - ); - }); - const changeBoxLovelace = CardanoWasm.BigNum.from_str( - (remainingAssets.nativeToken - this.configs.fee).toString() - ); - - const changeAmount: CardanoWasm.Value = - CardanoWasm.Value.new(changeBoxLovelace); - changeAmount.set_multiasset(changeBoxMultiAsset); - const changeBox = CardanoWasm.TransactionOutput.new( - CardanoWasm.Address.from_bech32(this.configs.addresses.lock), - changeAmount + remainingAssets.nativeToken -= this.configs.fee; + const changeBox = CardanoUtils.createTransactionOutput( + remainingAssets, + this.configs.addresses.lock ); txBuilder.add_output(changeBox); diff --git a/packages/chains/cardano/lib/CardanoUtils.ts b/packages/chains/cardano/lib/CardanoUtils.ts index 729b525..86cd062 100644 --- a/packages/chains/cardano/lib/CardanoUtils.ts +++ b/packages/chains/cardano/lib/CardanoUtils.ts @@ -125,6 +125,42 @@ class CardanoUtils { value: candidate.value, assets: structuredClone(candidate.assets), }); + + /** + * creates a box candidate by assets and address + * @param assets + * @param address + * @returns + */ + static createTransactionOutput = ( + assets: AssetBalance, + address: string + ): CardanoWasm.TransactionOutput => { + const changeBoxMultiAsset = CardanoWasm.MultiAsset.new(); + assets.tokens.forEach((asset) => { + const assetInfo = asset.id.split('.'); + const policyId: CardanoWasm.ScriptHash = CardanoWasm.ScriptHash.from_hex( + assetInfo[0] + ); + const assetName: CardanoWasm.AssetName = CardanoWasm.AssetName.new( + Buffer.from(assetInfo[1], 'hex') + ); + changeBoxMultiAsset.set_asset( + policyId, + assetName, + CardanoUtils.bigIntToBigNum(asset.value) + ); + }); + + const changeAmount: CardanoWasm.Value = CardanoWasm.Value.new( + CardanoWasm.BigNum.from_str(assets.nativeToken.toString()) + ); + changeAmount.set_multiasset(changeBoxMultiAsset); + return CardanoWasm.TransactionOutput.new( + CardanoWasm.Address.from_bech32(address), + changeAmount + ); + }; } export default CardanoUtils;