2019-10-30 13:18:57 -07:00
|
|
|
//
|
|
|
|
// CompactBlockValidationInformation.swift
|
|
|
|
// ZcashLightClientKit
|
|
|
|
//
|
|
|
|
// Created by Francisco Gindre on 10/30/19.
|
|
|
|
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
enum CompactBlockValidationError: Error {
|
|
|
|
case validationFailed(height: BlockHeight)
|
2021-05-28 15:45:18 -07:00
|
|
|
case failedWithError(_ error: Error?)
|
2019-10-30 13:18:57 -07:00
|
|
|
}
|
|
|
|
class CompactBlockValidationOperation: ZcashOperation {
|
|
|
|
|
|
|
|
override var isConcurrent: Bool { false }
|
|
|
|
|
|
|
|
override var isAsynchronous: Bool { false }
|
|
|
|
|
|
|
|
var rustBackend: ZcashRustBackendWelding.Type
|
|
|
|
|
|
|
|
private var cacheDb: URL
|
|
|
|
private var dataDb: URL
|
|
|
|
|
|
|
|
init(rustWelding: ZcashRustBackendWelding.Type, cacheDb: URL, dataDb: URL) {
|
|
|
|
rustBackend = rustWelding
|
|
|
|
self.cacheDb = cacheDb
|
|
|
|
self.dataDb = dataDb
|
|
|
|
super.init()
|
|
|
|
}
|
|
|
|
|
|
|
|
override func main() {
|
|
|
|
guard !shouldCancel() else {
|
|
|
|
cancel()
|
|
|
|
return
|
|
|
|
}
|
2021-06-14 16:25:01 -07:00
|
|
|
self.startedHandler?()
|
2019-10-30 13:18:57 -07:00
|
|
|
let result = self.rustBackend.validateCombinedChain(dbCache: cacheDb, dbData: dataDb)
|
2021-05-28 15:45:18 -07:00
|
|
|
switch result {
|
|
|
|
case 0:
|
|
|
|
let error = CompactBlockValidationError.failedWithError(rustBackend.lastError())
|
|
|
|
self.error = error
|
|
|
|
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
|
|
|
self.fail(error: error)
|
2019-10-30 13:18:57 -07:00
|
|
|
|
2021-05-28 15:45:18 -07:00
|
|
|
case ZcashRustBackendWeldingConstants.validChain:
|
|
|
|
break
|
|
|
|
default:
|
2019-10-30 13:18:57 -07:00
|
|
|
let error = CompactBlockValidationError.validationFailed(height: BlockHeight(result))
|
|
|
|
self.error = error
|
2020-03-09 13:25:27 -07:00
|
|
|
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
2021-01-05 09:50:53 -08:00
|
|
|
self.fail(error: error)
|
2019-10-30 13:18:57 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|