From 9f9d0cd5db151289f1ddf06b092e995aa40e5360 Mon Sep 17 00:00:00 2001 From: Aleksei Muraveinik Date: Wed, 16 Oct 2024 14:40:28 +0200 Subject: [PATCH 1/2] IOS-8253 Use available amount for fee calc --- .../Blockchains/Kaspa/KaspaTransactionBuilder.swift | 5 +++++ BlockchainSdk/Common/Transaction.swift | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/BlockchainSdk/Blockchains/Kaspa/KaspaTransactionBuilder.swift b/BlockchainSdk/Blockchains/Kaspa/KaspaTransactionBuilder.swift index 0a26df2a0..72a6ceb57 100644 --- a/BlockchainSdk/Blockchains/Kaspa/KaspaTransactionBuilder.swift +++ b/BlockchainSdk/Blockchains/Kaspa/KaspaTransactionBuilder.swift @@ -97,6 +97,11 @@ class KaspaTransactionBuilder { } func buildForMassCalculation(transaction: Transaction) throws -> KaspaTransactionData { + let amountValue = min(transaction.amount.value, availableAmount().value) + let amount = Amount(with: blockchain, value: amountValue) + + let transaction = transaction.withAmount(amount) + let builtTransaction = try buildForSign(transaction).0 let dummySignature = Data(repeating: 1, count: 65) return buildForSend( diff --git a/BlockchainSdk/Common/Transaction.swift b/BlockchainSdk/Common/Transaction.swift index ce2d2ebde..80c200c34 100644 --- a/BlockchainSdk/Common/Transaction.swift +++ b/BlockchainSdk/Common/Transaction.swift @@ -36,6 +36,18 @@ public struct Transaction { self.contractAddress = contractAddress self.params = params } + + func withAmount(_ amount: Amount) -> Transaction { + Transaction( + amount: amount, + fee: fee, + sourceAddress: sourceAddress, + destinationAddress: destinationAddress, + changeAddress: changeAddress, + contractAddress: contractAddress, + params: params + ) + } } extension Transaction: Equatable { From 9058d55f94823d9bbe3ca7d3230f9e0bd8a8c715 Mon Sep 17 00:00:00 2001 From: Aleksei Muraveinik Date: Wed, 16 Oct 2024 15:40:46 +0200 Subject: [PATCH 2/2] IOS-8253 Change rule for validator --- BlockchainSdk/Blockchains/Kaspa/KaspaWalletManager.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BlockchainSdk/Blockchains/Kaspa/KaspaWalletManager.swift b/BlockchainSdk/Blockchains/Kaspa/KaspaWalletManager.swift index a33f89ca3..5765dd99f 100644 --- a/BlockchainSdk/Blockchains/Kaspa/KaspaWalletManager.swift +++ b/BlockchainSdk/Blockchains/Kaspa/KaspaWalletManager.swift @@ -148,7 +148,13 @@ extension KaspaWalletManager: WithdrawalNotificationProvider { extension KaspaWalletManager: MaximumAmountRestrictable { func validateMaximumAmount(amount: Amount, fee: Amount) throws { - let amountAvailableToSend = txBuilder.availableAmount() - fee + var amountAvailableToSend = txBuilder.availableAmount() - fee + + let change = amount - amountAvailableToSend + if change > .zeroCoin(for: wallet.blockchain), change < dustValue { + amountAvailableToSend = amountAvailableToSend - (dustValue - change) + } + if amount <= amountAvailableToSend { return }