Removed confirmed pending transactions (#52)
This commit is contained in:
parent
97ab864cbe
commit
5ad77abf46
|
@ -175,6 +175,15 @@ class PersistentTransactionManager: OutboundTransactionManager {
|
||||||
try repository.update(tx)
|
try repository.update(tx)
|
||||||
return tx
|
return tx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func delete(pendingTransaction: PendingTransactionEntity) throws {
|
||||||
|
do {
|
||||||
|
try repository.delete(pendingTransaction)
|
||||||
|
} catch {
|
||||||
|
throw TransactionManagerError.notPending(tx: pendingTransaction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class OutboundTransactionManagerBuilder {
|
class OutboundTransactionManagerBuilder {
|
||||||
|
|
|
@ -32,4 +32,9 @@ protocol OutboundTransactionManager {
|
||||||
func allPendingTransactions() throws -> [PendingTransactionEntity]?
|
func allPendingTransactions() throws -> [PendingTransactionEntity]?
|
||||||
|
|
||||||
func handleReorg(at: BlockHeight) throws
|
func handleReorg(at: BlockHeight) throws
|
||||||
|
|
||||||
|
/**
|
||||||
|
deletes a pending transaction from the database
|
||||||
|
*/
|
||||||
|
func delete(pendingTransaction: PendingTransactionEntity) throws
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,9 +244,12 @@ public class SDKSynchronizer: Synchronizer {
|
||||||
DispatchQueue.main.async { self.status = .disconnected }
|
DispatchQueue.main.async { self.status = .disconnected }
|
||||||
}
|
}
|
||||||
@objc func processorFinished(_ notification: Notification) {
|
@objc func processorFinished(_ notification: Notification) {
|
||||||
refreshPendingTransactions()
|
DispatchQueue.global().async {
|
||||||
DispatchQueue.main.async {
|
self.refreshPendingTransactions()
|
||||||
self.status = .synced }
|
DispatchQueue.main.async {
|
||||||
|
self.status = .synced
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func processorTransitionUnknown(_ notification: Notification) {
|
@objc func processorTransitionUnknown(_ notification: Notification) {
|
||||||
|
@ -382,20 +385,30 @@ public class SDKSynchronizer: Synchronizer {
|
||||||
}
|
}
|
||||||
// MARK: book keeping
|
// MARK: book keeping
|
||||||
|
|
||||||
|
private func updateMinedTransactions() throws {
|
||||||
|
try transactionManager.allPendingTransactions()?.filter( { $0.isSubmitSuccess && !$0.isMined } ).forEach( { pendingTx in
|
||||||
|
guard let rawId = pendingTx.rawTransactionId else { return }
|
||||||
|
let tx = try transactionRepository.findBy(rawId: rawId)
|
||||||
|
|
||||||
|
guard let minedHeight = tx?.minedHeight else { return }
|
||||||
|
|
||||||
|
let minedTx = try transactionManager.applyMinedHeight(pendingTransaction: pendingTx, minedHeight: minedHeight)
|
||||||
|
|
||||||
|
notifyMinedTransaction(minedTx)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private func removeConfirmedTransactions() throws {
|
||||||
|
let latestHeight = try transactionRepository.lastScannedHeight()
|
||||||
|
|
||||||
|
try transactionManager.allPendingTransactions()?.filter( { abs($0.minedHeight - latestHeight) >= DEFAULT_REWIND_DISTANCE } ).forEach( { try transactionManager.delete(pendingTransaction: $0) } )
|
||||||
|
}
|
||||||
|
|
||||||
private func refreshPendingTransactions() {
|
private func refreshPendingTransactions() {
|
||||||
do {
|
do {
|
||||||
try transactionManager.allPendingTransactions()?.filter({ $0.isSubmitSuccess && !$0.isMined }).forEach( { pendingTx in
|
try updateMinedTransactions()
|
||||||
guard let rawId = pendingTx.rawTransactionId else { return }
|
try removeConfirmedTransactions()
|
||||||
let tx = try transactionRepository.findBy(rawId: rawId)
|
|
||||||
|
|
||||||
guard let minedHeight = tx?.minedHeight else { return }
|
|
||||||
|
|
||||||
let minedTx = try transactionManager.applyMinedHeight(pendingTransaction: pendingTx, minedHeight: minedHeight)
|
|
||||||
|
|
||||||
notifyMinedTransaction(minedTx)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
print("error refreshing pending transactions: \(error)")
|
print("error refreshing pending transactions: \(error)")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue