Migrate to latest in-progress revision of Rust crates
- New backend method `ZcashRustBackend.isSeedRelevantToWallet` - `ZcashRustBackend.scanBlocks` now takes a `fromState` argument.
This commit is contained in:
parent
6c9b7a91d6
commit
90dcb0e3bb
|
@ -176,8 +176,7 @@
|
||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/zcash-hackworks/zcash-light-client-ffi",
|
"location" : "https://github.com/zcash-hackworks/zcash-light-client-ffi",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "7c801be1f445402a433b32835a50d832e8a50437",
|
"revision" : "e4ee7f62741fa04008c8c9b7769bd58764b1a5ce"
|
||||||
"version" : "0.6.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -16,7 +16,8 @@ let package = Package(
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/grpc/grpc-swift.git", from: "1.19.1"),
|
.package(url: "https://github.com/grpc/grpc-swift.git", from: "1.19.1"),
|
||||||
.package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.14.1"),
|
.package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.14.1"),
|
||||||
.package(url: "https://github.com/zcash-hackworks/zcash-light-client-ffi", exact: "0.6.0")
|
// Compiled from revision `533a7d4def586d0eda2993ad3ac4396452727158`.
|
||||||
|
.package(url: "https://github.com/zcash-hackworks/zcash-light-client-ffi", revision: "e4ee7f62741fa04008c8c9b7769bd58764b1a5ce")
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
.target(
|
.target(
|
||||||
|
|
|
@ -321,6 +321,10 @@ public enum ZcashError: Equatable, Error {
|
||||||
/// - `rustError` contains error generated by the rust layer.
|
/// - `rustError` contains error generated by the rust layer.
|
||||||
/// ZRUST0056
|
/// ZRUST0056
|
||||||
case rustGetWalletSummary(_ rustError: String)
|
case rustGetWalletSummary(_ rustError: String)
|
||||||
|
/// Error from rust layer when calling ZcashRustBackend.isSeedRelevantToWallet
|
||||||
|
/// - `rustError` contains error generated by the rust layer.
|
||||||
|
/// ZRUST0057
|
||||||
|
case rustIsSeedRelevantToWallet(_ rustError: String)
|
||||||
/// SQLite query failed when fetching all accounts from the database.
|
/// SQLite query failed when fetching all accounts from the database.
|
||||||
/// - `sqliteError` is error produced by SQLite library.
|
/// - `sqliteError` is error produced by SQLite library.
|
||||||
/// ZADAO0001
|
/// ZADAO0001
|
||||||
|
@ -676,6 +680,7 @@ public enum ZcashError: Equatable, Error {
|
||||||
case .rustLatestCachedBlockHeight: return "Error from rust layer when calling ZcashRustBackend.latestCachedBlockHeight"
|
case .rustLatestCachedBlockHeight: return "Error from rust layer when calling ZcashRustBackend.latestCachedBlockHeight"
|
||||||
case .rustScanProgressOutOfRange: return "Rust layer's call ZcashRustBackend.getScanProgress returned values that after computation are outside of allowed range 0-100%."
|
case .rustScanProgressOutOfRange: return "Rust layer's call ZcashRustBackend.getScanProgress returned values that after computation are outside of allowed range 0-100%."
|
||||||
case .rustGetWalletSummary: return "Error from rust layer when calling ZcashRustBackend.getWalletSummary"
|
case .rustGetWalletSummary: return "Error from rust layer when calling ZcashRustBackend.getWalletSummary"
|
||||||
|
case .rustIsSeedRelevantToWallet: return "Error from rust layer when calling ZcashRustBackend.isSeedRelevantToWallet"
|
||||||
case .accountDAOGetAll: return "SQLite query failed when fetching all accounts from the database."
|
case .accountDAOGetAll: return "SQLite query failed when fetching all accounts from the database."
|
||||||
case .accountDAOGetAllCantDecode: return "Fetched accounts from SQLite but can't decode them."
|
case .accountDAOGetAllCantDecode: return "Fetched accounts from SQLite but can't decode them."
|
||||||
case .accountDAOFindBy: return "SQLite query failed when seaching for accounts in the database."
|
case .accountDAOFindBy: return "SQLite query failed when seaching for accounts in the database."
|
||||||
|
@ -850,6 +855,7 @@ public enum ZcashError: Equatable, Error {
|
||||||
case .rustLatestCachedBlockHeight: return .rustLatestCachedBlockHeight
|
case .rustLatestCachedBlockHeight: return .rustLatestCachedBlockHeight
|
||||||
case .rustScanProgressOutOfRange: return .rustScanProgressOutOfRange
|
case .rustScanProgressOutOfRange: return .rustScanProgressOutOfRange
|
||||||
case .rustGetWalletSummary: return .rustGetWalletSummary
|
case .rustGetWalletSummary: return .rustGetWalletSummary
|
||||||
|
case .rustIsSeedRelevantToWallet: return .rustIsSeedRelevantToWallet
|
||||||
case .accountDAOGetAll: return .accountDAOGetAll
|
case .accountDAOGetAll: return .accountDAOGetAll
|
||||||
case .accountDAOGetAllCantDecode: return .accountDAOGetAllCantDecode
|
case .accountDAOGetAllCantDecode: return .accountDAOGetAllCantDecode
|
||||||
case .accountDAOFindBy: return .accountDAOFindBy
|
case .accountDAOFindBy: return .accountDAOFindBy
|
||||||
|
|
|
@ -175,6 +175,8 @@ public enum ZcashErrorCode: String {
|
||||||
case rustScanProgressOutOfRange = "ZRUST0055"
|
case rustScanProgressOutOfRange = "ZRUST0055"
|
||||||
/// Error from rust layer when calling ZcashRustBackend.getWalletSummary
|
/// Error from rust layer when calling ZcashRustBackend.getWalletSummary
|
||||||
case rustGetWalletSummary = "ZRUST0056"
|
case rustGetWalletSummary = "ZRUST0056"
|
||||||
|
/// Error from rust layer when calling ZcashRustBackend.isSeedRelevantToWallet
|
||||||
|
case rustIsSeedRelevantToWallet = "ZRUST0057"
|
||||||
/// SQLite query failed when fetching all accounts from the database.
|
/// SQLite query failed when fetching all accounts from the database.
|
||||||
case accountDAOGetAll = "ZADAO0001"
|
case accountDAOGetAll = "ZADAO0001"
|
||||||
/// Fetched accounts from SQLite but can't decode them.
|
/// Fetched accounts from SQLite but can't decode them.
|
||||||
|
|
|
@ -348,6 +348,10 @@ enum ZcashErrorDefinition {
|
||||||
/// - `rustError` contains error generated by the rust layer.
|
/// - `rustError` contains error generated by the rust layer.
|
||||||
// sourcery: code="ZRUST0056"
|
// sourcery: code="ZRUST0056"
|
||||||
case rustGetWalletSummary(_ rustError: String)
|
case rustGetWalletSummary(_ rustError: String)
|
||||||
|
/// Error from rust layer when calling ZcashRustBackend.isSeedRelevantToWallet
|
||||||
|
/// - `rustError` contains error generated by the rust layer.
|
||||||
|
// sourcery: code="ZRUST0057"
|
||||||
|
case rustIsSeedRelevantToWallet(_ rustError: String)
|
||||||
|
|
||||||
// MARK: - Account DAO
|
// MARK: - Account DAO
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,26 @@ actor ZcashRustBackend: ZcashRustBackendWelding {
|
||||||
return ffiBinaryKeyPtr.pointee.unsafeToUnifiedSpendingKey(network: networkType)
|
return ffiBinaryKeyPtr.pointee.unsafeToUnifiedSpendingKey(network: networkType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isSeedRelevantToWallet(seed: [UInt8]) async throws -> Bool {
|
||||||
|
globalDBLock.lock()
|
||||||
|
let result = zcashlc_is_seed_relevant_to_wallet(
|
||||||
|
dbData.0,
|
||||||
|
dbData.1,
|
||||||
|
seed,
|
||||||
|
UInt(seed.count),
|
||||||
|
networkType.networkId
|
||||||
|
)
|
||||||
|
globalDBLock.unlock()
|
||||||
|
|
||||||
|
// -1 is the error sentinel.
|
||||||
|
guard result >= 0 else {
|
||||||
|
throw ZcashError.rustIsSeedRelevantToWallet(lastErrorMessage(fallback: "`isSeedRelevantToWallet` failed with unknown error"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 is false, 1 is true.
|
||||||
|
return result != 0
|
||||||
|
}
|
||||||
|
|
||||||
func proposeTransfer(
|
func proposeTransfer(
|
||||||
account: Int32,
|
account: Int32,
|
||||||
to address: String,
|
to address: String,
|
||||||
|
@ -595,9 +615,20 @@ actor ZcashRustBackend: ZcashRustBackendWelding {
|
||||||
return scanRanges
|
return scanRanges
|
||||||
}
|
}
|
||||||
|
|
||||||
func scanBlocks(fromHeight: Int32, limit: UInt32 = 0) async throws -> ScanSummary {
|
func scanBlocks(fromHeight: Int32, fromState: TreeState, limit: UInt32 = 0) async throws -> ScanSummary {
|
||||||
|
let fromStateBytes = try fromState.serializedData(partial: false).bytes
|
||||||
|
|
||||||
globalDBLock.lock()
|
globalDBLock.lock()
|
||||||
let summaryPtr = zcashlc_scan_blocks(fsBlockDbRoot.0, fsBlockDbRoot.1, dbData.0, dbData.1, fromHeight, limit, networkType.networkId)
|
let summaryPtr = zcashlc_scan_blocks(
|
||||||
|
fsBlockDbRoot.0,
|
||||||
|
fsBlockDbRoot.1,
|
||||||
|
dbData.0,
|
||||||
|
dbData.1,
|
||||||
|
fromHeight,
|
||||||
|
fromStateBytes,
|
||||||
|
UInt(fromStateBytes.count),
|
||||||
|
limit,
|
||||||
|
networkType.networkId)
|
||||||
globalDBLock.unlock()
|
globalDBLock.unlock()
|
||||||
|
|
||||||
guard let summaryPtr else {
|
guard let summaryPtr else {
|
||||||
|
|
|
@ -41,6 +41,11 @@ protocol ZcashRustBackendWelding {
|
||||||
/// - Throws: `rustCreateAccount`.
|
/// - Throws: `rustCreateAccount`.
|
||||||
func createAccount(seed: [UInt8], treeState: TreeState, recoverUntil: UInt32?) async throws -> UnifiedSpendingKey
|
func createAccount(seed: [UInt8], treeState: TreeState, recoverUntil: UInt32?) async throws -> UnifiedSpendingKey
|
||||||
|
|
||||||
|
/// Checks whether the given seed is relevant to any of the accounts in the wallet.
|
||||||
|
///
|
||||||
|
/// - parameter seed: byte array of the seed
|
||||||
|
func isSeedRelevantToWallet(seed: [UInt8]) async throws -> Bool
|
||||||
|
|
||||||
/// Scans a transaction for any information that can be decrypted by the accounts in the wallet, and saves it to the wallet.
|
/// Scans a transaction for any information that can be decrypted by the accounts in the wallet, and saves it to the wallet.
|
||||||
/// - parameter tx: the transaction to decrypt
|
/// - parameter tx: the transaction to decrypt
|
||||||
/// - parameter minedHeight: height on which this transaction was mined. this is used to fetch the consensus branch ID.
|
/// - parameter minedHeight: height on which this transaction was mined. this is used to fetch the consensus branch ID.
|
||||||
|
@ -173,9 +178,10 @@ protocol ZcashRustBackendWelding {
|
||||||
/// cache, an error will be signalled.
|
/// cache, an error will be signalled.
|
||||||
///
|
///
|
||||||
/// - parameter fromHeight: scan starting from the given height.
|
/// - parameter fromHeight: scan starting from the given height.
|
||||||
|
/// - parameter fromState: The TreeState Protobuf object for the height prior to `fromHeight`
|
||||||
/// - parameter limit: scan up to limit blocks.
|
/// - parameter limit: scan up to limit blocks.
|
||||||
/// - Throws: `rustScanBlocks` if rust layer returns error.
|
/// - Throws: `rustScanBlocks` if rust layer returns error.
|
||||||
func scanBlocks(fromHeight: Int32, limit: UInt32) async throws -> ScanSummary
|
func scanBlocks(fromHeight: Int32, fromState: TreeState, limit: UInt32) async throws -> ScanSummary
|
||||||
|
|
||||||
/// Upserts a UTXO into the data db database
|
/// Upserts a UTXO into the data db database
|
||||||
/// - parameter txid: the txid bytes for the UTXO
|
/// - parameter txid: the txid bytes for the UTXO
|
||||||
|
|
|
@ -2222,6 +2222,39 @@ actor ZcashRustBackendWeldingMock: ZcashRustBackendWelding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - isSeedRelevantToWallet
|
||||||
|
|
||||||
|
var isSeedRelevantToWalletSeedThrowableError: Error?
|
||||||
|
func setIsSeedRelevantToWalletSeedThrowableError(_ param: Error?) async {
|
||||||
|
isSeedRelevantToWalletSeedThrowableError = param
|
||||||
|
}
|
||||||
|
var isSeedRelevantToWalletSeedCallsCount = 0
|
||||||
|
var isSeedRelevantToWalletSeedCalled: Bool {
|
||||||
|
return isSeedRelevantToWalletSeedCallsCount > 0
|
||||||
|
}
|
||||||
|
var isSeedRelevantToWalletSeedReceivedSeed: [UInt8]?
|
||||||
|
var isSeedRelevantToWalletSeedReturnValue: Bool!
|
||||||
|
func setIsSeedRelevantToWalletSeedReturnValue(_ param: Bool) async {
|
||||||
|
isSeedRelevantToWalletSeedReturnValue = param
|
||||||
|
}
|
||||||
|
var isSeedRelevantToWalletSeedClosure: (([UInt8]) async throws -> Bool)?
|
||||||
|
func setIsSeedRelevantToWalletSeedClosure(_ param: (([UInt8]) async throws -> Bool)?) async {
|
||||||
|
isSeedRelevantToWalletSeedClosure = param
|
||||||
|
}
|
||||||
|
|
||||||
|
func isSeedRelevantToWallet(seed: [UInt8]) async throws -> Bool {
|
||||||
|
if let error = isSeedRelevantToWalletSeedThrowableError {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
isSeedRelevantToWalletSeedCallsCount += 1
|
||||||
|
isSeedRelevantToWalletSeedReceivedSeed = seed
|
||||||
|
if let closure = isSeedRelevantToWalletSeedClosure {
|
||||||
|
return try await closure(seed)
|
||||||
|
} else {
|
||||||
|
return isSeedRelevantToWalletSeedReturnValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - decryptAndStoreTransaction
|
// MARK: - decryptAndStoreTransaction
|
||||||
|
|
||||||
var decryptAndStoreTransactionTxBytesMinedHeightThrowableError: Error?
|
var decryptAndStoreTransactionTxBytesMinedHeightThrowableError: Error?
|
||||||
|
@ -2737,34 +2770,34 @@ actor ZcashRustBackendWeldingMock: ZcashRustBackendWelding {
|
||||||
|
|
||||||
// MARK: - scanBlocks
|
// MARK: - scanBlocks
|
||||||
|
|
||||||
var scanBlocksFromHeightLimitThrowableError: Error?
|
var scanBlocksFromHeightFromStateLimitThrowableError: Error?
|
||||||
func setScanBlocksFromHeightLimitThrowableError(_ param: Error?) async {
|
func setScanBlocksFromHeightFromStateLimitThrowableError(_ param: Error?) async {
|
||||||
scanBlocksFromHeightLimitThrowableError = param
|
scanBlocksFromHeightFromStateLimitThrowableError = param
|
||||||
}
|
}
|
||||||
var scanBlocksFromHeightLimitCallsCount = 0
|
var scanBlocksFromHeightFromStateLimitCallsCount = 0
|
||||||
var scanBlocksFromHeightLimitCalled: Bool {
|
var scanBlocksFromHeightFromStateLimitCalled: Bool {
|
||||||
return scanBlocksFromHeightLimitCallsCount > 0
|
return scanBlocksFromHeightFromStateLimitCallsCount > 0
|
||||||
}
|
}
|
||||||
var scanBlocksFromHeightLimitReceivedArguments: (fromHeight: Int32, limit: UInt32)?
|
var scanBlocksFromHeightFromStateLimitReceivedArguments: (fromHeight: Int32, fromState: TreeState, limit: UInt32)?
|
||||||
var scanBlocksFromHeightLimitReturnValue: ScanSummary!
|
var scanBlocksFromHeightFromStateLimitReturnValue: ScanSummary!
|
||||||
func setScanBlocksFromHeightLimitReturnValue(_ param: ScanSummary) async {
|
func setScanBlocksFromHeightFromStateLimitReturnValue(_ param: ScanSummary) async {
|
||||||
scanBlocksFromHeightLimitReturnValue = param
|
scanBlocksFromHeightFromStateLimitReturnValue = param
|
||||||
}
|
}
|
||||||
var scanBlocksFromHeightLimitClosure: ((Int32, UInt32) async throws -> ScanSummary)?
|
var scanBlocksFromHeightFromStateLimitClosure: ((Int32, TreeState, UInt32) async throws -> ScanSummary)?
|
||||||
func setScanBlocksFromHeightLimitClosure(_ param: ((Int32, UInt32) async throws -> ScanSummary)?) async {
|
func setScanBlocksFromHeightFromStateLimitClosure(_ param: ((Int32, TreeState, UInt32) async throws -> ScanSummary)?) async {
|
||||||
scanBlocksFromHeightLimitClosure = param
|
scanBlocksFromHeightFromStateLimitClosure = param
|
||||||
}
|
}
|
||||||
|
|
||||||
func scanBlocks(fromHeight: Int32, limit: UInt32) async throws -> ScanSummary {
|
func scanBlocks(fromHeight: Int32, fromState: TreeState, limit: UInt32) async throws -> ScanSummary {
|
||||||
if let error = scanBlocksFromHeightLimitThrowableError {
|
if let error = scanBlocksFromHeightFromStateLimitThrowableError {
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
scanBlocksFromHeightLimitCallsCount += 1
|
scanBlocksFromHeightFromStateLimitCallsCount += 1
|
||||||
scanBlocksFromHeightLimitReceivedArguments = (fromHeight: fromHeight, limit: limit)
|
scanBlocksFromHeightFromStateLimitReceivedArguments = (fromHeight: fromHeight, fromState: fromState, limit: limit)
|
||||||
if let closure = scanBlocksFromHeightLimitClosure {
|
if let closure = scanBlocksFromHeightFromStateLimitClosure {
|
||||||
return try await closure(fromHeight, limit)
|
return try await closure(fromHeight, fromState, limit)
|
||||||
} else {
|
} else {
|
||||||
return scanBlocksFromHeightLimitReturnValue
|
return scanBlocksFromHeightFromStateLimitReturnValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue