@@ -61,6 +61,8 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
61
61
swapResponse = nil
62
62
jupiterQuote = nil
63
63
braveFee = nil
64
+ // price quote requested for a different amount
65
+ priceQuoteTask? . cancel ( )
64
66
}
65
67
guard !sellAmount. isEmpty, BDouble ( sellAmount. normalizedDecimals) != nil else {
66
68
state = . idle
@@ -353,13 +355,13 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
353
355
}
354
356
355
357
@MainActor private func createEthSwapTransaction( ) async -> Bool {
356
- self . isMakingTx = true
357
- defer { self . isMakingTx = false }
358
358
guard let accountInfo = self . accountInfo else {
359
359
self . state = . error( Strings . Wallet. unknownError)
360
360
self . clearAllAmount ( )
361
361
return false
362
362
}
363
+ self . isMakingTx = true
364
+ defer { self . isMakingTx = false }
363
365
let coin = accountInfo. coin
364
366
let network = await rpcService. network ( coin, origin: nil )
365
367
guard let swapParams = self . swapParameters ( for: . perSellAsset, in: network) else {
@@ -661,6 +663,7 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
661
663
self . isUpdatingPriceQuote = true
662
664
let ( jupiterQuote, swapErrorResponse, _) = await swapService. jupiterQuote ( jupiterQuoteParams)
663
665
defer { self . isUpdatingPriceQuote = false }
666
+ guard !Task. isCancelled else { return }
664
667
if let jupiterQuote {
665
668
await self . handleSolPriceQuoteResponse ( jupiterQuote, swapParams: swapParams)
666
669
} else if let swapErrorResponse {
@@ -748,6 +751,8 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
748
751
let selectedFromToken else {
749
752
return false
750
753
}
754
+ self . isMakingTx = true
755
+ defer { self . isMakingTx = false }
751
756
let network = await rpcService. network ( . sol, origin: nil )
752
757
let jupiterSwapParams : BraveWallet . JupiterSwapParams = . init(
753
758
chainId: network. chainId,
@@ -777,8 +782,8 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
777
782
fromBase64EncodedTransaction: swapTransactions. swapTransaction,
778
783
txType: . solanaSwap,
779
784
send: . init(
780
- maxRetries: nil ,
781
- preflightCommitment: nil ,
785
+ maxRetries: . init ( maxRetries : 2 ) ,
786
+ preflightCommitment: " processed " ,
782
787
skipPreflight: . init( skipPreflight: true )
783
788
)
784
789
)
@@ -831,8 +836,10 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
831
836
}
832
837
}
833
838
839
+ private var priceQuoteTask : Task < ( ) , Never > ?
834
840
func fetchPriceQuote( base: SwapParamsBase ) {
835
- Task { @MainActor in
841
+ priceQuoteTask? . cancel ( )
842
+ priceQuoteTask = Task { @MainActor in
836
843
// reset quotes before fetching new quote
837
844
swapResponse = nil
838
845
jupiterQuote = nil
@@ -842,6 +849,7 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
842
849
return
843
850
}
844
851
let network = await rpcService. network ( accountInfo. coin, origin: nil )
852
+ guard !Task. isCancelled else { return }
845
853
// Entering a buy amount is disabled for Solana swaps, always use
846
854
// `SwapParamsBase.perSellAsset` to fetch quote based on the sell amount.
847
855
// `SwapParamsBase.perBuyAsset` is sent when `selectedToToken` is changed.
@@ -871,6 +879,7 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore {
871
879
self . isUpdatingPriceQuote = true
872
880
defer { self . isUpdatingPriceQuote = false }
873
881
let ( swapResponse, swapErrorResponse, _) = await swapService. priceQuote ( swapParams)
882
+ guard !Task. isCancelled else { return }
874
883
if let swapResponse = swapResponse {
875
884
await self . handleEthPriceQuoteResponse ( swapResponse, base: base, swapParams: swapParams)
876
885
} else if let swapErrorResponse = swapErrorResponse {
0 commit comments